Jump to content

Inserir opções não válidas


Tome Almeida

Recommended Posts

Eu estou a fazer um menú e quando seleciono algo que não está inserido no escopo do programa gostava que informasse o utilizador e inserisse a opção de voltar atrás com uma label.

Quando fiz isso sempre que executo o exercício escolhido aparece no final sempre a mensagem do exercício não válido.

Se alguém me conseguisse ajudar, agradecia.

Em anexo, vai o código em questão:

Program MenuFicha4 ;

    label inicio;
    label inicioseccao1;
    label inicioseccao2;
    label inicioseccao3;
    label fim;
    label inicioex2_6;
    label fimex2_6;
    
    
    var seccao:integer;
    var labelseccao:char;
    var seccao1,seccao2,seccao3:string;
    var respseccao1,respseccao2,respseccao3:char;
    var a:real;
    var b:real;
    var c,d,e:real;
    var g,h,f,i:real;
    var j,k,l:real;
    var m,n,o:real;
    var p,q:real;
    var a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11:real;
    var b1:integer;
    var b2,b3:integer;
    var b4:integer;
    var b5,b6,b7:real;
    var b8,b9,b10:real;
    var c1,c2,c3:real;
    var c4:char;
    var c5,c6,c7,c8,c9,c10:real;
    var d1,d2,d3:real;
    var d4:integer;
    var d5,d6,d7,d8:real;
    var d9,d10:integer;
    var e1,e2:integer;
    var e3,e4,e5,e6:integer;
    var e7,e8,e9:integer;
    var t1, t2, t3, t4, t5, t6, t7, max, min: real;
    var fernando,fernando1,fernando2,fernando3:char;


    const pi = 3.1416;
    
Begin

    textcolor(white);
    
    inicio:
    clrscr;
    
    textcolor(lightred);
    writeln('********************************************');
    writeln('*                                          *');
    writeln('*      Bem-Vindo ao menú da Ficha 4!       *');
    writeln('*                                          *');
    writeln('*        Feito por: Tomé Almeida           *');
    writeln('*                                          *');
    writeln('********************************************');                                                    
    writeln();
    writeln();
  textcolor(white);
    writeln('A ficha 4 está dividida em 3 secções:');
    writeln();
  writeln();
    writeln('> Secção 1');
    writeln();
    writeln('> Secção 2');
    writeln();
    writeln('> Secção 3');
    writeln();
    writeln();
    writeln('Insira a secção que deseja abrir');
    write('> ');
    readln(seccao);
    
    
      clrscr;
        
            
        
            case seccao of
            
                

            
                1:    begin
                        inicioseccao1:
                        clrscr;
                        writeln('Selecionou a secção 1!');
                      writeln();
                          writeln();
                         writeln(' 1.1  -> Área do quadrado              ');
                       writeln(' 1.2  -> Perímetro da cirncunferência  ');
                       writeln(' 1.3  -> Gasolina gasta                ');
                       writeln(' 1.4  -> Latas de tinta                ');
                    writeln(' 1.5  -> Hipotenusa do triângulo       ');
                    writeln(' 1.6  -> Tempo gasto                   ');
                    writeln(' 1.7  -> Conversão para polegadas      ');
                    writeln(' 1.8  -> Conversão para Fahrenheit     ');
                    writeln(' 1.9  -> Forrar com a carpete          ');
                    writeln(' 1.10 -> Distância entre dois pontos   ');
                    writeln();
                    writeln();
                    writeln('Insira o exercício que deseja executar!');
                      write('> ');
                        
                            readln(seccao1);
                      
                           clrscr;
                                
                                if (seccao1='1.1')then
                                            begin
                                                writeln('Insira os lados do quadrado');
                                                    readln(a);
    
                                                    clrscr;
    
                                                writeln('A área do quadrado é ',(a*a):0:2);
                                            
                                                    readkey;
                                             end; 
                                                
                                  
                                  if (seccao1='1.2')then
                                         begin
                                    
                                                writeln('Insira o raio da circunferência');
                                                    readln(b);
                              
                                                        clrscr;
    
                                                writeln('O perímetro da circunferência é ',(2*pi*b):0:2);
    
                                                    readkey; 
                                             end;
                                                
                                  
                                  if (seccao1='1.3')then        
                                             begin
                                 
                                                 writeln('Indica a distância percorrida em km e os litros de gasolina gastos');
                                                    readln(c,e);
    
                                                        d:=c/e;
                                                        
                                                            clrscr;
    
                                                 writeln('Fez uma média de ',d:0:1 ,' litros por kilómetro!');
    
                                                    readkey;
                                             end;
                                                
                                     
                                    if (seccao1='1.4')then
                                                 begin
                                     
                                                     writeln('Insira a altura e a largura da parede');
                                                          readln(f,g);
  
                                                          h:=f*g;
                                                          i:=h/3;
  
                                                                  clrscr;
  
                                                      writeln('São necessárias ',i:0:1,' latas de tinta para cobrir toda a parede');
                                                      readkey;
                                                      
                                              end;
                                              
                                    
                                     if (seccao1='1.5')then
                                                 begin
                                                   writeln('Indique os valores dos catetos');
                                                        readln(j,k);
    
    
                                                            l:=sqrt((j*j)+(k*k));
    
                                                    writeln('A hipotenusa do triângulo é ',l:0:1);
    
                                                        readkey;
                                                        
                                                end;
                                                
                                     
                                     if (seccao1='1.6')then 
                                              begin
                                                     writeln('Indica a distância percorrida em km e o tempo gasto');
                                                        readln(m,n);
    
                                                            o:=m/n;
                                                                clrscr;
    
                                                    writeln('Fez uma média de ',o:0:2 ,' minutos por kilómetro!');
    
                                                        readkey;
                                                        
                                                end;
                                                
                                     
                                     
                                      if (seccao1='1.7')then
                                                 begin
                                                     writeln('Indique a medida em centímetros');
                                                        readln(q);
    
                                                            p:=q/2.54;
    
                                                                clrscr;
    
                                                    writeln('A sua medida dá ',p:0:1, ' polegadas!');
    
                                                        readkey;
  
                          end;
                          
                      
                                     
                                      if (seccao1='1.8')then
                                                 begin
                                     writeln('Insira a temperatura em graus Celsius');
                                                        readln(a6);
    
                                                            a7:=(9/5)*a6+32;
    
                                                                clrscr;
    
                                                    writeln('A temperatura inserida dá ',a7:0:1, ' graus Fahrenheit!');
    
                                                        readkey;
                                                        
                                                end;
                                                
                                      if (seccao1='1.9')then
                                             begin
                                                 writeln('Insira o comprimento e a largura da carpete');
                                                        readln(a8,a9);
    
                                                            a10:=a8*a9;
                                                            a11:=a10*35;
    
                                                                clrscr;
                                    
                                                 writeln('Vão ser necessários ',a11:0:1,' euros para forrar todo o piso com a carpete');
    
                                                    readkey;
                                                    
                                             end;
                                             
                                     
                                      if(seccao1='1.10')then
                                                  begin
                                                     writeln('Insira o X e o Y do ponto P');
                                                        readln(a1,a2);
    
                                                            clrscr;
    
                                                    writeln('Insira o X e o Y do ponto Q');
                                                        readln(a3,a4);
    
                                                             a5:=((a3-a1)*(a3-a1))+((a4-a2)*(a4-a2));
     
                                                    writeln('Os pontos estão a ',sqrt (a5):0:1, ' valores de distância');
    
                                                        readkey;
                                                        
                                                end
                                                
                                                    else 
                                                        writeln('Exercício não válido! Pretende escolher outro?');
                                                            readln(fernando1);
                                                                if(fernando1='S') or (fernando1='s')then
                                                                    goto inicioseccao1
                                                                        else
                                                                            
                                                
                                                
                                                
                                                clrscr;
                                                
                                                write('> Se pretender voltar ao menú principal prima ');
                                                    begin
                                                        textcolor(lightred);
                                                            write('[1]');
                                                      textcolor(white);
                                                          write('.');
                                                    end;
                                                writeln();
                                                write('> Se pretender voltar a escolher um exercício da secção 1 prima ');
                                                    begin
                                                        textcolor(lightred);
                                                            write('[2]');
                                                        textcolor(white);
                                                            write('.');
                                                    end;
                                                writeln();
                                                write('> Se pretender encerrar o programa prima ');
                                                    textcolor(lightred);
                                                        write('[3]');
                                                    textcolor(white);
                                                        write('.');
                                                        
                                                writeln();
                                                        
                                                    readln(respseccao1);
                                                    
                                                        if(respseccao1='1')then
                                                            goto inicio;
                                                            
                                                        if(respseccao1='2')then
                                                            goto inicioseccao1
                                                
                                                else
                                                
                                                  goto fim
                                                  
  
                            end;
                
                2:begin
                        inicioseccao2:
                        clrscr;
                        writeln('Selecionou a secção 2!');
                      writeln();
                          writeln();                                    
                         writeln(' 2.1  -> Par ou Ímpar                    ');
                       writeln(' 2.2  -> Maior e menor                   ');
                       writeln(' 2.3  -> Permissão para a carta          ');
                       writeln(' 2.4  -> IMC                             ');
                    writeln(' 2.5  -> Salário total                   ');
                    writeln(' 2.6  -> Média do aluno                  ');
                    writeln(' 2.7  -> Equação de raízes completas     ');
                    writeln(' 2.8  -> Classificação de triângulos     ');
                    writeln();
                    writeln();
                    writeln('Insira o exercício que deseja executar!');
                      write('> ');
                         
                            readln(seccao2);
                            
                                clrscr;
                                
                                    if(seccao2='2.1')then
                                        begin
                                            writeln('Introduza um valor inteiro');
                                                        readln(b1);
            
            
                                                                    if ( b1 mod 2 = 0) then    
                                                    
                                                                       begin
                                                                            writeln('O valor introduzido ', b1,'  é par')
                                                                      end
                         
                                                                            else
                            
                                                                    begin
                                                                            writeln('O valor introduzido  ', b1,'  é impar'); 
                                                                  end;
            
          
                             readkey;
                         end;
    
    
                     if(seccao2='2.2')then
                          begin
                                             writeln('Introduza dois valores inteiros');
                                                 readln(b2,b3);
     
                                                    if ( b2 > b3 ) then
        
                                                                writeln('O maior valor é ', b2, ' e o menor valor é ', b3    )
                
                                                        else
            
                                                                writeln('O maior valor  é ', b3, ' e o menor valor é ', b2);
    
    
                           readkey;
                        end;

                            
                                  if(seccao2='2.3')then
                                      begin
                                          writeln('Introduza uma idade e descubre se já podes ter carta de motorista');
                                                read(b4);
                                            
    
                                                    if ( b4 >= 18) then
            
                                                            writeln('Tu já podes ter a carta!');
            
                                                        if ( b4 < 18) then 
                
                                                             writeln('Tu ainda não tens permissão para ter a carta.');
                                      
                                       readkey;
                                    end;
                                    
                                    
                                  if(seccao2='2.4')then
                                      begin
                                          writeln ('Insira o seu peso(em kg) e altura(metros)');
                                                    readln(b5, b6);
    
                                                        b7:= b5 / sqr(b6);
    
                                                            writeln('Seu imc corresponde a ', b7:0:2);
                            
                                        readkey;
                                    end;
                                    
                                    
                                  if(seccao2='2.5')then
                                      begin
                                          writeln('Introduza o total de horas trabalhadas.');
                                                    readln(b8);
        
                                                        b9 := b8 * 14.50;
        
        
                                                            if ( b9 >= 1200) then 
                                                                begin    
                                                                    b10 := b9 - ( b9 * 0.15);
          
                
                                                                      writeln('O seu salário corresponde a ', b9:0:2 ,'; e após a redução de 15%, passou a ser ', b10:0:2); 
                 
                                                              end
            
                                                                    else 
        
                                                                        writeln('O seu salário total corresponde ? ', b9:0:2);

                                          readkey;
                                          
                                    end;
                                    
                                    
                                 if(seccao2='2.6')then
                                     begin
                                       inicioex2_6:
                                            clrscr;

                                                textcolor(white);
                                                    writeln( 'Introduza duas notas.');
                                                        readln( c1 , c2 );
    
                                                            c3 := (c1 + c2)/2;    
    
                                                                     if ( c1 < 0 ) or ( c1 > 20) or ( c2 < 0 ) or ( c2 > 20) then
       
                                                           begin
           
                                                                   writeln('A nota introduzida não pode ser lida. Deseja recomeçar? S|N');
                                                                       readln(c4);
               
                                                                           if ( c4 = 's') or ( c4 = 'S') then
                   
                                                                               goto inicioex2_6;
                   
                                                                           if ( c4 = 'n') or ( c4 = 'N') then
                    
                                                                               goto fimex2_6;
                     
                                                            end
  
       
                                                                else 
            
                                                                    if ( c3 >= 7 ) then 
        
                                                         begin
              
                                                           textcolor (lightblue);
                                                                 writeln('O aluno(a) está aprovado! A sua média correspondente é ', c3:0:1);  
               
                                                         end;     
            
            
            
                                                                    if ( c3 < 3 ) then          
    
                                                         begin
  
                                                       textcolor (red);
                                                             writeln('O aluno(a) está reprovado. A sua média correspondente é ', c3:0:1); 
        
                                                         end;
        
            
                                                                    if ( c3 >= 3 ) and ( c3 <= 6 ) then          
                                                        begin 
              
                                                       textcolor (yellow);
                                                             writeln('O aluno(a) está em recuperação. A sua média correspondente é ', c3:0:1); 
    
                                                        end;    

                                            fimex2_6:
                                            
                                            readkey;
                                        end;
                                
                                
                                if(seccao2='2.7')then
                                    begin
                                         writeln('Insira o valor de a,b e c.');
                                             readln(c5, c6, c7);
     

                                                c8 := (sqr( c6 )) - ( 4 * c5 * c7 );


                                                    if (c8 > 0) then

                                                        begin
                
                                                                writeln('A equação tem duas raizes reais diferentes.');
                    
                                                                    c9 := ( -c6 + sqrt(c8))/2 * c5; 
                                                                    c10 := ( -c6 - sqrt(c8))/2 * c5;

                                                                    writeln;
                                                                    writeln('A 1ª raiz é ', c9:0:2);
                                                                    writeln('A 2ª raiz é ', c10:0:2);
                
                                                        end;

                                                                if (c8 = 0) then
            
                                                        begin
                    
                                                                writeln('A equação tem uma raíz dupla.');
                        
                                                                c9:= ( -c6 + sqrt(c8))/2 * c5;
                    
                                                                writeln;                        
                                                                writeln('A 1ª raiz é ', c9:0:2);
                
                                                        end;
            
                                                                if ( c8 < 0) then
                                                             writeln('A equação tem duas raízes complexas.');
                
                                   readkey;
                                end;
                                
                                
                            if(seccao2='2.8')then
                                begin
                                        writeln('Introduz três valores');
                                            readln(d1, d2, d3);
            
                                                if ( d1 > ( d2 + d3 )) or ( d2 > (d1 + d3)) or ( d3 > ( d1 + d2)) then

                                                

                                                    begin
        
                                                        writeln('Os valores introduzidos não formam um triângulo');

                                                    end


                                                        else

                                                                if ( d1 = d2 ) and ( d2 = d3 ) then

                                                    begin

                                                        writeln('O triângulo é equilátero');
            
                                                    end


                                                        else

                                                                if ( d1 = d2 ) or ( d1 = d3 ) or ( d2 = d3) then

                                                    begin

                                                        writeln('O triângulo é isósceles');

                                                    end
    
                                                        else

                                                    begin 

                                                        writeln('O triângulo é escaleno');
        
                                                    end;
                                                    
                                            readkey;
                                            
                                    end
                                    
                                        else 
                                                        writeln('Exercício não válido! Pretende escolher outro?');
                                                            readln(fernando2);
                                                                if(fernando2='S') or (fernando2='s')then
                                                                    goto inicioseccao2
                                                                        else
                                    
                                                clrscr;
                                                
                                                write('> Se pretender voltar ao menú principal prima ');
                                                    begin
                                                        textcolor(lightred);
                                                            write('[1]');
                                                      textcolor(white);
                                                          write('.');
                                                    end;
                                                writeln();
                                                write('> Se pretender voltar a escolher um exercício da secção 2 prima ');
                                                    begin
                                                        textcolor(lightred);
                                                            write('[2]');
                                                        textcolor(white);
                                                            write('.');
                                                    end;
                                                writeln();
                                                write('> Se pretender encerrar o programa prima ');
                                                    textcolor(lightred);
                                                        write('[3]');
                                                    textcolor(white);
                                                        write('.');
                                                        
                                                writeln();
                                                    readln(respseccao2);
                                                    
                                                        if(respseccao2='1')then
                                                            goto inicio;
                                                            
                                                        if(respseccao2='2')then
                                                            goto inicioseccao2
                                                
                                                else
                                                
                                                  goto fim
                                                  
  
                            end;
                                    
                            
                            
                
                3:begin
                        inicioseccao3:
                        clrscr;
                        writeln('Selecionou a secção 3!');
                      writeln();
                          writeln();                                    
                         writeln(' 3.1  -> Média                    ');
                       writeln(' 3.2  -> Soma de números naturais ');
                       writeln(' 3.3  -> Quadrado ( mod <> 0 )    ');
                       writeln(' 3.4  -> Pares e ímpares          ');
                    writeln(' 3.5  -> Fatorial                 ');
                    writeln(' 3.6  -> Temperaturas             ');
                    writeln();
                    writeln();
                    writeln('Insira o exercício que deseja executar!');
                      write('> ');
                        
                            readln(seccao3);
                            
                                clrscr;
                                
                                    if(seccao3='3.1')then
                                        begin
                                            d5 := 0;

                                                    for  d4 := 1 to 10 do
        
                                                         begin
            
                                                            writeln('Introduz um valor.');
                                                                readln(d6);
        
                                                                d7 := d5 + d6; 
                                                                  d8 := d7 /2;
                 
                                                          end;
                                                            
                                                    
         
                                                            writeln('A média dos valores é ', d8:0:2);
       
                 
                                  readkey;
                              end;
                              
                              
                            if(seccao3='3.2')then
                                begin
                                    writeln('Introduz um valor inteiro.');
                                                    readln (d9);

                                                        for d9 := d9 downto 1 do
                                                            begin
                                                            d10:= d10 + d9;    
                                                            end;
    
                                                delay(300);
    
                                                    writeln('A soma dos primeiros números naturais corresponde a ', d10:0:0);
                
                                readkey;
                              end;
                              
                            if(seccao3='3.3')then
                                begin
                                    writeln('Insira um número que deseja ver o quadrado');
                                                    readln(e1);
    
                                                        for e2:=1 to e1 do
                                                            begin
                                                              if(e2 mod 2<>0)then
                                                                  writeln(e2);
                                                            end;
                                                            
                                                    readkey;
                                            end;
                                            
                                            
                                        if(seccao3='3.4')then
                                            begin
                                                 randomize;
    
                                                        while ( e3 < 1000 ) do    
        
                                                            begin
                                                                e4 := random(100);
                
                                                                    delay(10);
                
                                                                        writeln(e4);
                
                                                                            if ( e4 mod 2 = 0 ) then 
                    
                                                                 begin
                                                                    e5 := e5 + 1;
                                                                 end
                        
                                                                      else 
                  
                                                              begin
                                                                  e6 := e6 + 1;
                                                              end;      
                
                                                                    e3 :=    e3 + 1;
            
                                                            end; 
        
        
                                                                delay(500);
                                                                writeln;    
                
                                                                writeln('Foram inseridos ', e5, '  números pares.');
                                                                writeln('Foram inseridos ', e6, '  números impares.');
            
                                                   readkey;
                                            end;       
                                
                                
                                
                            if(seccao3='3.5')then
                                begin
                                    writeln('Introduz um valor');
                                                    readln(e7);
        
                                                        e9:= 1;
        
                                                            for e8:= e7 downto 1 do
              
                                                                begin
                              
                                                                    e9 := e9 * e8;
                    
                                                        end;
                    

                                                         writeln('O resultado do fatorial é ', e9:0:2);
                                  readkey;
                                  
                              end;
                              
                              
                              if(seccao3='3.6')then
                                  begin
                                    max := 0;
                                                  min := 100;
        
        
                                                            writeln('Introduza a temperatura de segunda-feira.');
                                                                readln( t1 );
                                        clrscr;
            
                                                            writeln('Introduza a temperatura de terça-feira.');
                                                                readln( t2 );
                                      clrscr;
        
                                                          writeln('Introduza a temperatura de quarta-feira.');
                                                                readln( t3 );
                                        clrscr;
            
                                                            writeln('Introduza a temperatura de quinta-feira.');
                                                                readln( t4 );
                                        clrscr;
            
                                                            writeln('Introduza a temperatura de sexta-feira.');
                                                                readln( t5 );
                                        clrscr;
            
                                                            writeln('Introduza a temperatura de sábado.');
                                                                readln( t6 );
                                        clrscr;
            
                                                            writeln('Introduza a temperatura de domingo.');
                                                                readln( t7 );
                                        clrscr;
            
            
                                                                    if (t1>t2) and (t1>t3) and ( t1 > t4 ) and ( t1 > t5 ) and ( t1 > t6 ) and ( t1 > t7 ) then
        
                                                            max:=    t1
    
                                                                else
            
                                                            min:= t1;
        
        
                                                                if (t2>t1) and (t2>t3) and ( t2 > t4 ) and ( t2 > t5 ) and ( t2 > t6 ) and ( t2 > t7 ) then
            
                                                            max:= t2
    
                                                                else
            
                                                            min:= t2;
            
                                                                if (t3>t1) and (t3>t2) and ( t3 > t4 ) and ( t3 > t5 ) and ( t3 > t6 ) and ( t3 > t7 ) then    
            
                                                            max:= t3
    
                                                                else
            
                                                            min:= t3;
        
        
                                                                if (t4>t1) and (t4>t2) and ( t4 > t3 ) and ( t4 > t5 ) and ( t4 > t6 ) and ( t4 > t7 ) then    
            
                                                            max:= t4
    
                                                                else
            
                                                            min:= t4;
        
                                                                if (t5>t1) and (t5>t2) and ( t5 > t3 ) and ( t5 > t4 ) and ( t5 > t6 ) and ( t5 > t7 ) then    
            
                                                            max:= t5
    
                                                                else
            
                                                            min:= t5;
        
                                                                if (t6>t1) and (t6>t2) and ( t6 > t3 ) and ( t6 > t4 ) and ( t6 > t5 ) and ( t3 > t7 ) then    
            
                                                            max:= t6
    
                                                                else
            
                                                            min:= t6;
        
                                                                if (t7>t1) and (t7>t2) and ( t7 > t3 ) and ( t7 > t4 ) and ( t7 > t5 ) and ( t7 > t6 ) then    
            
                                                            max:= t7
    
                                                                else
            
                                                            min:= t7;
        
        
                                                            writeln;
                                                            writeln('A temperatura mais quente é ', max:0:1, 'ºC e a mais fria é ', min:0:1, 'ºC');
                              
                                 readkey;
                            end
                                        
                                
                                                else 
                                                        
                                                        writeln('Exercício não válido! Pretende escolher outro?');
                                                            readln(fernando3);
                                                                if(fernando3='S') or (fernando3='s')then
                                                                    goto inicioseccao3
                                                                        else  
                
                                            clrscr;
                                                
                                                write('> Se pretender voltar ao menú principal prima ');
                                                    begin
                                                        textcolor(lightred);
                                                            write('[1]');
                                                      textcolor(white);
                                                          write('.');
                                                    end;
                                                writeln();
                                                write('> Se pretender voltar a escolher um exercício da secção 1 prima ');
                                                    begin
                                                        textcolor(lightred);
                                                            write('[2]');
                                                        textcolor(white);
                                                            write('.');
                                                    end;
                                                writeln();
                                                write('> Se pretender encerrar o programa prima ');
                                                    textcolor(lightred);
                                                        write('[3]');
                                                    textcolor(white);
                                                        write('.');
                                                        
                                                writeln();
                                                    readln(respseccao3);
                                                    
                                                        if(respseccao3='1')then
                                                            goto inicio;
                                                            
                                                        if(respseccao3='2')then
                                                            goto inicioseccao3
                                                
                                                else
                                                
                                                  goto fim
                                                  
  
                            end;
                
                
                
                    else
                      
                        writeln('Opção não válida! Pretende voltar atrás?');
                            readln(fernando);
                                if(fernando='S') or (fernando='s')then
                                    goto inicio
                                        else
                        
                        
                        
                        
                        fim:
                                  clrscr;
                                            writeln('Prima novamente para encerrar!');
                                            
        end;
                                    
     readkey;
     
End.

 

Edited by nunopicado
Syntax Highlight

Tomé

Link to comment
Share on other sites

É assim, antes de mais nada, deixa-me só dizer-te, sem querer desmerecer o teu trabalho, que olhar para esse código é um pesadelo, tal é a quantidade de labels, vars e indentação estranha num mesmo bloco de código. Não é esse o problema de que te queixas, mas é algo a pensares no futuro.

 

Dito isto, estás a validar a opção apenas no ELSE do CASE, ou seja, na opção principal 1, 2 ou 3.
Dentro de cada uma delas, não estás a validar nada, e como tal, o utilizador pode meter qualquer coisa.

Tens de fazer a validação a cada pergunta que fazes ao utilizador, e com a estrutura de IFs que tens isso significa ou usar IFs encadeados ou criar um IF adicional que preveja todos os casos que não aqueles que geres individualmente. Trabalheira à vista, mas tem de ser.

 

Algumas dicas:
Não sei em que nível de aprendizado estás, nem em que contexto (escola, auto-didata, etc.).
Mas tenta estudar um pouco como funcionam procedimentos e funções. Faziam o teu código muito mais legível e fácil de encontrares problemas que aconteçam.
Ciclos: Todos os labels que usas podem ser substituídos por ciclos e procedimentos, sem os riscos das labels. Para teres uma ideia, há pessoas que não só não usam labels, ainda desativam essa funcionalidade do compilador. Para teres uma ideia ainda melhor, o compilador permite desativar essa funcionalidade. É esse o nível de "mau" que usar labels representa.

 

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Em 05/01/2023 às 10:46, nunopicado disse:

É assim, antes de mais nada, deixa-me só dizer-te, sem querer desmerecer o teu trabalho, que olhar para esse código é um pesadelo, tal é a quantidade de labels, vars e indentação estranha num mesmo bloco de código. Não é esse o problema de que te queixas, mas é algo a pensares no futuro.

 

Dito isto, estás a validar a opção apenas no ELSE do CASE, ou seja, na opção principal 1, 2 ou 3.
Dentro de cada uma delas, não estás a validar nada, e como tal, o utilizador pode meter qualquer coisa.

Tens de fazer a validação a cada pergunta que fazes ao utilizador, e com a estrutura de IFs que tens isso significa ou usar IFs encadeados ou criar um IF adicional que preveja todos os casos que não aqueles que geres individualmente. Trabalheira à vista, mas tem de ser.

 

Algumas dicas:
Não sei em que nível de aprendizado estás, nem em que contexto (escola, auto-didata, etc.).
Mas tenta estudar um pouco como funcionam procedimentos e funções. Faziam o teu código muito mais legível e fácil de encontrares problemas que aconteçam.
Ciclos: Todos os labels que usas podem ser substituídos por ciclos e procedimentos, sem os riscos das labels. Para teres uma ideia, há pessoas que não só não usam labels, ainda desativam essa funcionalidade do compilador. Para teres uma ideia ainda melhor, o compilador permite desativar essa funcionalidade. É esse o nível de "mau" que usar labels representa.

 

Boa tarde Nuno.

Antes de mais, muito obrigado pela atenção dada.

Eu estou numa escola, mas entrei mesmo há pouco tempo. Eu estava em Ciências Socioeconómicas e por volta de um mês atrás mudei para este curso.

Eu só uso as labels porque o professor assim o exige, porque eu cá também não sou grande fã.

Assim que consiga, tentarei mudar isto e organizar o código e as variáveis especialmente.

Quando acabar eu reenvio se não se importar, para me dar a sua opinião.

Com os melhores cumprimentos,

Tomé

Tomé

Link to comment
Share on other sites

Em 05/01/2023 às 12:03, Tome Almeida disse:

Eu só uso as labels porque o professor assim o exige, porque eu cá também não sou grande fã.

Espero que o teu professor esteja só a mostrar um exemplo do que não se deve fazer, caso contrário a minha fé na humanidade perdeu mais um bocadinho de consideração... 😂

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Em 05/01/2023 às 15:14, nunopicado disse:

Espero que o teu professor esteja só a mostrar um exemplo do que não se deve fazer, caso contrário a minha fé na humanidade perdeu mais um bocadinho de consideração... 😂

Pois, mas tenho mesmo que usar fora isso não me servia de nada estar a fazer este exercício porque ia ter 0.

Tomé

Link to comment
Share on other sites

Em 05/01/2023 às 21:53, Tome Almeida disse:

Pois, mas tenho mesmo que usar fora isso não me servia de nada estar a fazer este exercício porque ia ter 0.

Tive um professor que veio com essa mania de ter de fazer tal qual ele dizia... Não dos labels, até ele sabia que isso não se devia usar, nunca chegou a falar delas, mas de não querer que usássemos nada que ele não tivesse ensinado.

Perguntei-lhe na aula à frente de todos se, havendo várias maneiras de fazer alguma coisa, umas melhores do que as outras, qual era o problema de fazer melhor em vez de pior? Qual era o benefício de aprender a fazer mal quando se pode fazer bem? Se estamos na escola para aprender a programar, porque motivo teríamos de fazer de uma forma que nenhum programador profissional alguma vez ousaria fazer?

Não respondeu.

A partir daí entreguei sempre os trabalhos como eu achava que devia. Logo que o resultado final fosse produzido de acordo com o pedido no enunciado, ele não me podia tirar nota por fazer diferente do que ele imaginava que devia ser feito.

Se fores para o mercado de trabalho e arranjares uma entrevista de emprego para programador, e eles te pedirem para fazer um programa para demonstrar os teus conhecimentos (muito comum fazerem isso), e apresentares um programa num bloco único, estás automaticamente desqualificado.

Eu entendo os professores começarem por ensinar assim, para que quem não sabe possa aprender aos poucos. Mas quem já sabe não pode nunca ser obrigado a andar para trás no seu conhecimento. Isto falando do não uso de procedimentos e funções, porque a nível de labels, não só ele não pode exigir o seu uso, ele nem deveria ter falado delas mais do que para dizer: "Não usem". Os riscos são muitos, os benefícios, nenhum. São uma representação de um passado distante em que não era possível melhor. É absurdo o seu uso hoje em dia, especialmente por que se está a iniciar e ainda não consegue entender os seus riscos.

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Link to comment
Share on other sites

Sei que isto não vai acrescentar nada ao tópico inicial, mas partilho do sentimento do @nunopicadoacerca do código carregado de labels/gotos. Não faz sentido nem ensinar assim nem programar assim.

Sendo de facto requisito do professor, @Tome Almeida, permite-me sugerir que refaças depois este exercício com o devido recurso a funções e procedimentos.

Edited by thoga31
Português

Knowledge is free!

Link to comment
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
×
×
  • 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.