Jump to content
Sign in to follow this  
souzadc

Programa em Pascal

Recommended Posts

souzadc

Pessoal

Venho aqui pedir a ajuda de vocês. Estou com um trabalho pra entragar na Faculdade e ainda não consegui obter sucesso.

Se algum de vocês puder me ajudar eu agradeceria muito.

Segue mais ou menos o que seria.

Pré-Requisitos

1. O programa deverá ser desenvolvido em pascal.

2. Não poderá utilizar Units prontas ou funções de conversão de base, ou ainda, de somatório.

3. Ao ser inicializado, deverá oferecer um menu de opções das bases a serem somadas.

4. Não deverá ser feita a conversão do número forneceido. A adição deve trabalhar com os carries

5. O programa deverá ser modularizado através de procedures e/ou functions

6. O programa deverá ser totalmente comentado, tanto no que diz respeito as variáveis globais e locais, quanto dos módulos em si

7. Tabela contendo correlação de valores decimais e números alfanuméricos, quando for o caso.

8. Tamanho de dígitos de entrada: mínimo de 4, máximo de 6.

Objetivo

Realizar a operação de adição nas bases: binário, octal e hexadecimal.

Critérios de avaliação

Serão “bonificados” os programas que derem soluções globais a operação de adição. Soluções originais utilizando-se: pilha ou lista encadeada.

Agrade desde já a colaboração de vocês.

Sem mais!!!


Souzadc<< Forum Invaders>>

Share this post


Link to post
Share on other sites
souzadc

Cara,

Seguinte: Não sei se a lógica esta correta. Agora eu queria implementar uma tabela Ascii mais não sei como.

PROGRAM SOMA_BINARIA;
USES CRT;
VAR
NUM1,NUM2:STRING;
aux,tam1,tam2,I,VAI,maior,start,soma,base:INTEGER;
A,b,tot:ARRAY[1..20] OF INTEGER;
op:char;

function conv_int_str(x:integer):string;
var NUM: string; {Declaracao da variavel que retornara para o programa
já convertida em integer}
begin
case x of
0:num:='0';
1:num:='1';
2:num:='2';
3:num:='3';
4:num:='4';
5:num:='5';
6:num:='6';
7:num:='7';
8:num:='8';
9:num:='9';
10:num:='A';
11:num:='B';
12:num:='C';
13:num:='D';
14:num:='E';
15:num:='F';
END;
CONV_INT_STR := NUM;
end;

function CONV_STR_INT(s:char):INTEGER; {Funcao que converte os
algarismos do termo}
var                                      {em integer para ser utiliado na soma}
NUM: integer; {Declaracao da variavel que retornara para o programa
já convertida em integer}
begin
case s of
'0':num:=0;
'1':num:=1;
'2':num:=2;
'3':num:=3;
'4':num:=4;
'5':num:=5;
'6':num:=6;
'7':num:=7;
'8':num:=8;
'9':num:=9;
'A','a':num:=10;
'B','b':num:=11;
'C','c':num:=12;
'D','d':num:=13;
'E','e':num:=14;
'F','f':num:=15;
END;
CONV_STR_INT := NUM;
end;

BEGIN
   CLRSCR;
   WRITE('Digite o 1§ numero binario: ');READLN(NUM1);
   WRITE('Digite o 2§ numero binario: ');READLN(NUM2);
   tam1:= length(NUM1);
   tam2:=length(num2);
   if (tam1>=tam2) then
      maior:=tam1+1
   else
       maior:=tam2+1;
       aux:=maior;
   for i:=aux downto 0 do
       begin
            A[I]:=conv_str_int(NUM1[tam1]);
            tam1:=tam1-1;
            if (tam1=0) then
               i:=0;
       end;
   aux:=maior;
   FOR i:=aux downto 0 DO
       begin
            B[i]:=conv_str_int(NUm2[tam2]);
            tam2:=tam2-1;
            if (tam2=0) then
               i:=0;
       end;

   vai:=0;
   aux:=maior;
   soma:=0;
   base:=16;
   for i:=maior downto 1 do
       begin
            soma:= a[i] + b[i] + vai;
            if (soma>=base) then
               begin
                    tot[i]:=soma-base;
                    vai:=1;
               end
            else
                begin
                     tot[i]:=soma;
                     vai:=0;
                end;
       soma:=0;
       end;

   writeln;
   aux:=maior;
   start:=1;
   for i:=1 to maior do
       begin
            if (tot[i]=0) then
               start:=start+1
            else
                i:=MAIOR;
       end;
   Write('Resultado da soma.........: ');
   for i:=start to aux do
      begin
           write(conv_int_str(tot[i]));
      end;
   readkey;
end.;

Se puder ajudar agradeceria.

um abraço.

Sem mais!!!


Souzadc<< Forum Invaders>>

Share this post


Link to post
Share on other sites
marceluh

Desculpa mas eu nao percebi o k voce quer fazer com a tabela ascii.

Sera k voce se podia especificar melhor???

Share this post


Link to post
Share on other sites
souzadc

Cara,

Na verdade eu quero enxugar o programa o máximo possivel. E essa conversão de bases eu ouvi falar com a tabela Ascii seria melhor. só que eu não sei como implementá-la a minha realidade.

Sem mais!!!

Desculpa mas eu nao percebi o k voce quer fazer com a tabela ascii.

Sera k voce se podia especificar melhor???


Souzadc<< Forum Invaders>>

Share this post


Link to post
Share on other sites
souzadc

Cara,

O programa já esta quase pronto. Falta apenas fazer um menu para ele e fazer que funciocine para a base Octal. Segue o codigo fonte. Por favor me ajudem a complementá-lo.

Obrigado

program HEXA;  uses crt; var

a,b:string[6];

function inverte (s : string) : string; {inverte uma string} var

tmp : string; i : byte;

begin

tmp := ' '; for i:= length(s) downto 1 do
tmp := tmp + copy (s, i, 1); inverte :=tmp;

end; function dec(s : string) : longint; {converte um número hexadecimal} var {em decimal}

code : integer; d : longint;

begin

s := '$' + s; val(s, d, code); dec := d;

end; function hex (n : longint) : string; {converte um número decimal} var

r : byte; {em hexadecimal} x : string[1]; h : string;

begin

		  h := ' '; repeat
					r := n mod 16; n := trunc(n/16); if r >= 10 then
							  case r of
					10 : x := 'A'; 11 : x := 'B'; 12 : x := 'C'; 13 : x := 'D'; 14 : x := 'E'; 15 : x := 'F'; end else
		  str(r, x); h := h + x; until n < 16; if n >= 10 then
					case n of
		  10 : x := 'A'; 11 : x := 'B'; 12 : x := 'C'; 13 : x := 'D'; 14 : x := 'E'; 15 : x := 'F'; end else
str(n, x); h := h + x; h := inverte(h); hex := h;

end; procedure ler_valores; begin

 clrscr;
  highvideo;
   gotoxy(25,3);
	write('SOMA DE VALORES HEXADECIMAIS');
	 gotoxy(18,1);
	   lowvideo;
		 gotoxy(10,5);
		 write('Entre com o primeiro valor (at‚ 6 caracteres) => ');
		readln(a);
		 gotoxy(10,7); write('Entre com o segundo valor (at‚ 6 caracteres) => '); readln(b);

end; function soma_hex(a, b : string) : string; {soma dois valores hexadecimais} begin

soma_hex := hex( dec(a) + dec(b) );

end; function erro(x : string) : boolean; {verifica erro nos valores hexadecimais} var

i, n : byte; code : integer; a : string[1];

begin

		  erro := false; code := 0; for i:= length(x) downto 1 do
					begin
							  a := '0'; a := copy(x, i, 1); val (a, n, code); if code<>0 then
  if (a<>'A') and (a<>'a') and (a<>'B') and (a<>'b') and (a<>'C') and (a<>'c') and (a<>'D') and
  (a<>'d') and (a<>'E') and (a<>'e') and (a<>'F') and (a<>'f') then
erro := true; end; end;

begin

		  repeat
ler_valores; until not (erro(a) or erro(b)); gotoxy(10,9); write('A soma ‚ => ',soma_hex(a,b)); repeat until keypressed;

end.

Sem mais!!!!


Souzadc<< Forum Invaders>>

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.