quarta-feira, 25 de maio de 2011

trabalho de AED

questao numero 1:

program ex1;
uses crt, dos;
var opcao1, opcao2: char; {opcao1 = escolher se é hoje ou amanha o compromisso; opcao2 = escolher se deseja ou nao terminar o programa}
    h, m, subtracao: integer; {h = hora do compromisso, e armazena o horario do compromisso convertido para minutos; m = minuto do compromisso; subtracao = diferença entre o horario do sistema e o horario do compromisso}
    hatual, matual, satual, csatual: word; {hatual = hora do sistema e armazena o horario do sistema convertido para minutos; matual = minuto do sistema; satual = segundo do sistema; csatual = centesimos de segundos do sistema}
    horadodia: string; {horadodia = determinar se o compromisso do dia seguinte é de tarde, de manhã, de noite ou de madrugada}

begin
     repeat                    
         writeln('Escreva o dia do compromisso: (h para hoje, a para amanha)');
         repeat
            readln(opcao1);
            if (opcao1 <> 'a') and (opcao1 <> 'h') then
                writeln('Opcao invalida! Escreva h para hoje, ou a para amanha');
         until (opcao1 = 'a') or (opcao1 = 'h');
         repeat
            writeln('Qual a hora do compromisso?');
            readln(h);
            if (h > 23) or (h < 0) then
                writeln('Hora invalida! Entre com um numero entre 0 e 23');
         until (h <= 23) and (h >= 0);
         repeat
            writeln('Qual o minuto do compromisso?');
            readln(m);                                                    
            if (m > 59) or (m < 0) then
                writeln('Minuto invalido! Entre com um numero entre 0 e 60');
         until (m >= 0) and (m <= 59);
         h:=h*60+m;
         gettime(hatual,matual,satual,csatual);
         hatual:=hatual*60+matual;
         subtracao:=h-hatual;
         if (opcao1 = 'h') then
            if (subtracao >= 0) then
               writeln('Esteja preparado! Seu compromisso inicia daqui: ', subtracao div 60, 'h e ', subtracao mod 60, 'min')
            else
               writeln('Voce se atrasou para o compromisso! Ele iniciou ha: ', -subtracao div 60,'h e ',-subtracao mod 60, 'min')
         else
            begin
               if (h >= 0) and (h < 5*60) then
                   horadodia:='madrugada'
               else if (h >= 5*60) and (h < 12*60) then
                   horadodia:='manha'
               else if (h >= 12*60) and (h < 18*60) then
                   horadodia:='tarde'
               else if (h >= 18*60) and (h < 24*60) then
                   horadodia:='noite';
               writeln('Amanha de ', horadodia, ' voce tem um compromisso agendado pras: ', h div 60,'h e ',h mod 60,'min');
            end;
         writeln('Deseja continuar o programa? (s ou n)');
         repeat
            readln(opcao2);
            if (opcao2 <> 'n') and (opcao2 <> 's') then
               writeln('Opcao invalida! Escreva s para continuar, ou n para terminar o programa');
         until (opcao2 = 'n') or (opcao2 = 's');
         clrscr;
     until (opcao2 = 'n')
end.

questao numero 2:

program ex2;
uses crt;
var n, ntemp, contador, temp, i, j, capicua: integer; {n = numero a ser testado; ntemp = variavel temporaria para efetuar operacoes com o numero sem perder o numero original; contador = utilizado para contar quantos algarismos tem o numero a ser testado; temp = utilizado para calcular o exponencial de 10 e armazenar 1 se o numero for quadrado perfeito, e 0 caso contrario, e tambem armazenar o quadrado do numero, para testar se o numero é quadrado perfeito ou nao; i = contador do for; j = utilizado para armazenar quanto a metade do numero de algarismos do numero; capicua = armazena 1 se o numero for capicua, e 0 se não for}

begin
     for n:=0 to 10001 do
     begin
           ntemp:=n;
           contador:=0;
           while (ntemp <> 0) do
           begin
                ntemp:=ntemp div 10;
                contador:=contador+1;
           end;
           ntemp:=n;
           j:=contador div 2;
           capicua:=1;
           while (contador >= j-1) and (capicua = 1) do
           begin
                temp:=1;
                for i:=1 to contador-1 do
                    temp:=temp*10;
                if (ntemp div temp <> ntemp mod 10) then
                   capicua:=0;
                ntemp:=ntemp mod temp div 10;
                contador:=contador-2;
           end;
           contador:=1;
           repeat
                temp:=contador*contador;
                contador:=contador+1;
           until (temp >= n);
           if (temp = n) then
              temp:=1
           else
              temp:=0;
           if (capicua = 1) and (temp = 1) then
              writeln(n, '-Esse numero eh capicua e quadrado perfeito!');
     end;
     readln;
end.

questao numero 3:

program ex3;
uses crt;
var n1, n2, mdc, opcao: integer; {n1 = armazena o primeiro numero pro MDC; n2 = armazena o segundo numero pro MDC; mdc = armazena o mdc, que vai diminuindo caso esse numero nao divida os dois numeros n1 e n2; opcao = variavel para finalizar o programa ou nao}

begin
     repeat
           writeln('Escreva dois numeros para o calculo do MDC');
           readln(n1, n2);
           if (n1 < n2) then
              mdc:=n1
           else
              mdc:=n2;
           while (n1 mod mdc <> 0) or (n2 mod mdc <> 0) do
              mdc:=mdc-1;
           writeln('O MDC entre ', n1,' e ', n2,' eh: ',mdc);
           repeat
              writeln('Deseja reiniciar o programa? (1 para sim, 2 para nao)');
              readln(opcao);
              if (opcao <> 1) and (opcao <> 2) then
                 writeln('Opcao invalida! Escreva 1 para sim e 2 para nao');
           until (opcao = 1) or (opcao = 2);
           clrscr;
     until (opcao <> 1);
end. 


questao numero 4:

program ex4;
uses crt, dos;
var opcaomenu:integer;
    opcao1: char;
    h, m, subtracao: integer;
    hatual, matual, satual, csatual: word;
    horadodia: string;
    n, ntemp, contador, temp, i, j, capicua: integer;
    n1, n2, mdc: integer;
    pro1, pro2, pro3: integer; {pro1 = contabilizar o numero de vezes que o programa 1 foi executado; pro2 = contabilizar o numero de vezes que o programa 2 foi executado; pro3 = contabilizar o numero de vezes que o programa 3 foi executado}

begin
     pro1:=0;
     pro2:=0;
     pro3:=0;
     repeat
           writeln('Escolha qual programa voce quer executar:');
           writeln('1- Compromissos');
           writeln('2- Numeros Capicua');
           writeln('3- MDC de dois numeros');
           writeln('4- Finalizar programa');
           repeat
               readln(opcaomenu);
               if (opcaomenu < 1) or (opcaomenu > 4) then
                  writeln('Opcao invalida! Entre com um numero entre 1 e 4');
           until (opcaomenu >= 1) and (opcaomenu <= 4);
           if (opcaomenu = 1) then
           begin
             writeln('Escreva o dia do compromisso: (h para hoje, a para amanha)');
             repeat
                readln(opcao1);
                if (opcao1 <> 'a') and (opcao1 <> 'h') then
                    writeln('Opcao invalida! Escreva h para hoje, ou a para amanha');
             until (opcao1 = 'a') or (opcao1 = 'h');
             repeat
                writeln('Qual a hora do compromisso?');
                readln(h);
                if (h > 23) or (h < 0) then
                    writeln('Hora invalida! Entre com um numero entre 0 e 23');
             until (h <= 23) and (h >= 0);
             repeat
                writeln('Qual o minuto do compromisso?');
                readln(m);                                                    
                if (m > 59) or (m < 0) then
                    writeln('Minuto invalido! Entre com um numero entre 0 e 60');
             until (m >= 0) and (m <= 59);
             h:=h*60+m;
             gettime(hatual,matual,satual,csatual);
             hatual:=hatual*60+matual;
             subtracao:=h-hatual;
             if (opcao1 = 'h') then
                if (subtracao >= 0) then
                   writeln('Esteja preparado! Seu compromisso inicia daqui: ', subtracao div 60, 'h e ', subtracao mod 60, 'min')
                else
                   writeln('Voce se atrasou para o compromisso! Ele iniciou ha: ', -subtracao div 60,'h e ',-subtracao mod 60, 'min')
             else
                begin
                   if (h >= 0) and (h < 5*60) then
                       horadodia:='madrugada'
                   else if (h >= 5*60) and (h < 12*60) then
                       horadodia:='manha'
                   else if (h >= 12*60) and (h < 18*60) then
                       horadodia:='tarde'
                   else if (h >= 18*60) and (h < 24*60) then
                       horadodia:='noite';
                   writeln('Amanha de ', horadodia, ' voce tem um compromisso agendado pras: ', h div 60,'h e ',h mod 60,'min');
                end;
               
             pro1:=pro1+1;
           end
           else if (opcaomenu = 2) then
           begin
             for n:=0 to 10001 do
             begin
                   ntemp:=n;
                   contador:=0;
                   while (ntemp <> 0) do
                   begin
                        ntemp:=ntemp div 10;
                        contador:=contador+1;
                   end;
                   ntemp:=n;
                   j:=contador div 2;
                   capicua:=1;
                   while (contador >= j-1) and (capicua = 1) do
                   begin
                        temp:=1;
                        for i:=1 to contador-1 do
                            temp:=temp*10;
                        if (ntemp div temp <> ntemp mod 10) then
                           capicua:=0;
                        ntemp:=ntemp mod temp div 10;
                        contador:=contador-2;
                   end;
                   contador:=1;
                   repeat
                        temp:=contador*contador;
                        contador:=contador+1;
                   until (temp >= n);
                   if (temp = n) then
                      temp:=1
                   else
                      temp:=0;
                   if (capicua = 1) and (temp = 1) then
                      writeln(n, ' Numero capicua e quadrado perfeito!');
             end;
             pro2:=pro2+1;
           end
           else if (opcaomenu = 3) then
           begin
              writeln('Escreva dois numeros para o calculo do MDC');
              readln(n1, n2);
              if (n1 < n2) then
                 mdc:=n1
              else
                 mdc:=n2;
              while (n1 mod mdc <> 0) or (n2 mod mdc <> 0) do
                 mdc:=mdc-1;
              writeln('O MDC entre ', n1,' e ', n2,' eh: ',mdc);
              pro3:=pro3+1;
           end
           else if (opcaomenu = 4) then
           begin
              writeln('O programa 1 foi executado ', pro1, ' vezes');
              writeln('O programa 2 foi executado ', pro2, ' vezes');
              writeln('O programa 3 foi executado ', pro3, ' vezes');
           end;
           readln;
           clrscr;
     until (opcaomenu = 4);
end.