• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

souzadc

[Ajuda] Programa em Pascal

6 mensagens neste tópico

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!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para alguém te ajudar o melhor seria apresentares uma questão concreta, para além de postares o teu enunciado.

Explica porque ainda não conseguiste realizar o programa....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

Sera k voce se podia especificar melhor???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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???

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!!!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora