Ir ao conteúdo
  • Cadastre-se

Faça a tabuada deste número de 1 a 10, alguem me ajuda?


Ir à solução Resolvido por Simon Viegas,

Posts recomendados

@Fabio Aragao

 

Eu fiz até aqui

Program Tabuada;
var   n,tab: integer;Begin  writeln('Qual a tabuada');  readln(tab);  for n:= 1 to 10 do     writeln(tab, ' x ', n, ' = ', tab*n);End.
 
Minha duvida é:
Como eu faço para o pascal mim perguntar "Qual a tabuada", até eu digitar a tecla "0" para finalizar o programa, ou seja, eu quero que ele mim pergunte varias vezes ai quando eu não quiser mas aperto "0".
Link para o comentário
Compartilhar em outros sites

 

@ronald1087xd Usando seu codigo não vi erro algum... está rodando perfeitamente, acabei de fazer o teste, veja a saida do seu proprio codigo:

Qual a tabuada66 x 1 = 66 x 2 = 126 x 3 = 186 x 4 = 246 x 5 = 306 x 6 = 366 x 7 = 426 x 8 = 486 x 9 = 546 x 10 = 60

eu sei que ta correto o que eu quero, por exemplo:

Eu executo o programa ai aparece "Qual a tabuada" ai eu digito 5, até ai beleza. So que eu quero que o programa mim pergunte de novo qual tabuada eu quero.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

eu sei que ta correto o que eu quero, por exemplo:

Eu executo o programa ai aparece "Qual a tabuada" ai eu digito 5, até ai beleza. So que eu quero que o programa mim pergunte de novo qual tabuada eu quero.

 

precisa usar uma estrutura de repetição.

https://pt.wikibooks.org/wiki/Pascal/Estrutura_de_repeti%C3%A7%C3%A3o

Link para o comentário
Compartilhar em outros sites

Eu acho que eu esqueci de mencionar, mas a estrutura de repetição é usando IF. Como eu faço isso??

Estrutura de repetição é FOR, WHILE e REPEAT

IF é estrutura condicional,

 

O programa tem que fazer a leitura dos dados, processar e dar o resultado, dai ele tem que voltar ao começo e pedir tudo novamente.

então voce vai utilizar uma estrutura de repetição, que seja:

- sistema voce vai repetir ENQUANTO não for digitado...................... ou

- sistema voce vai repetir ATÉ ser digitado...........................

 

Entendeu ?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Estrutura de repetição é FOR, WHILE e REPEAT

IF é estrutura condicional,

 

O programa tem que fazer a leitura dos dados, processar e dar o resultado, dai ele tem que voltar ao começo e pedir tudo novamente.

então voce vai utilizar uma estrutura de repetição, que seja:

- sistema voce vai repetir ENQUANTO não for digitado...................... ou

- sistema voce vai repetir ATÉ ser digitado...........................

 

Entendeu ?

Entendi, vou tentar aqui!

Link para o comentário
Compartilhar em outros sites

Estrutura de repetição é FOR, WHILE e REPEAT

IF é estrutura condicional,

 

O programa tem que fazer a leitura dos dados, processar e dar o resultado, dai ele tem que voltar ao começo e pedir tudo novamente.

então voce vai utilizar uma estrutura de repetição, que seja:

- sistema voce vai repetir ENQUANTO não for digitado...................... ou

- sistema voce vai repetir ATÉ ser digitado...........................

 

Entendeu ?

eu conseguir fazer o que eu queria, fazer ele mim perguntar. Agr eu quero que ele para quando eu digitar "0".

Sabe dizer como eu faço isso??

 

SEGUE ALGORITMO ABAIXO:

Program Tabuada;
 
varn,tab: integer;Beginfor tab:= 1 to 10 dobeginwrite('Qual a tabuada: ');readln(tab);for n:= 1 to 10 dowriteln(tab, ' x ', n, ' = ', tab*n);end;End.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Não entendi o porque do meu post ter sido removido....... vamos ver se alguem fala alguma coisa pois não recebi mensagem alguma.

 

Oi... falha minha... foi eu quem apagou. :).

 

Aconteceu que ao apagar não tinha opção de deixar um comentário, daí eu ia te enviar um mensagem privada, mas acabei me ocupando e depois me esqueci.. desculpe!

 

 

Mas em fim, a questão toda foi a seguinte:

Evitem postar uma resposta pronta para usuário, o ideal é passsar as orientações e deixar que ele faça!

 

Abraços

 

 

UPDATE

 

@Fabio Aragao

Parece que sua postagem foi removida, mas obrigado mim ajudou muito!!!!

e @Math.Pi

Obrigado tbem pela força!!!

 

Fábio, por favor, poste aqui o seu código para, caso necessário, ser reanalizado, e também de servir de base para outros usuários...

 

 

No aguardo.

Link para o comentário
Compartilhar em outros sites

 

Oi... falha minha... foi eu quem apagou. :).

 

Aconteceu que ao apagar não tinha opção de deixar um comentário, daí eu ia te enviar um mensagem privada, mas acabei me ocupando e depois me esqueci.. desculpe!

 

 

Mas em fim, a questão toda foi a seguinte:

Evitem postar uma resposta pronta para usuário, o ideal é passsar as orientações e deixar que ele faça!

 

Abraços

 

 

UPDATE

 

 

Fábio, por favor, poste aqui o seu código para, caso necessário, ser reanalizado, e também de servir de base para outros usuários...

 

 

No aguardo.

 

Tenho até medo da analise do Prof @Simon Viegas, heheheheheh

 

la vai o codigo que eu postei:

Program Taboada ;    var n,tab: integer;        resp : string;Beginresp := 's';   while ( resp = 's' ) do   begin     write('Qual a tabuada: ');     readln(tab);     for n:= 1 to 10 do     writeln(tab, ' x ', n, ' = ', tab*n);     write( 'Deseja continuar (S/N): ' ) ;      readln( resp ) ;    end;End.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá!!

Tenho até medo da analise do Prof @Simon Viegas, heheheheheh

Que nada, estamos aqui para aprendermos uns com os outros.. hehehehhehe


Na minha analise, o código está de OK. Apenas um ressalva para a identação, que particularmente acho de extrema importância e a condição para repetir não está de acordo o enunciado (tem que sair ao digitar 0, correto?).

No meu padrão ficaria assim:

program Taboada;var   n,tab :integer;  resp  :string;beginresp:='s';while resp='s' do  begin  write('Qual a tabuada: ');  readln(tab);  for n:= 1 to 10 do    writeln(tab,' x ',n,' = ',tab*n);  write('Deseja continuar (S/N): ');   readln(resp);   end;end.

***



Aproveitando a oportunidade, vou comentar sobre algumas possíveis melhorias que poderiam ser úteis, no caso, exemplificando alguns conceitos e que podem ser utilizados em outros contextos.

1| NÃO DIFERENCIAR MAIÚSCULAS E MINÚSCULAS
Por exemplo, nesse programa, ao usuário responder se vai continuar ou não, o programa só vai aceitar repetir se ele digitar exatamente "s" (minúsculo). Se digitar "S" ou qualquer outro caractere ou, conjunto de caracteres, que não seja esse, o programa sairá. Não vai repetir.

Ai temos pelo menos 2 pontos:

a) seria melhor utilizar CHAR, em vez de STRING, pois a resposta só precisa de um caractere, e uma string acaba sendo, de certo modo, um desperdício (variável com capacidade "muito" maior" do que precisa). A outra vantagem de utilizar um char, é que se ele digitar mais de um caractere o que vai importar é o primeiro, ex.: se digitar "sim", a variável só vai armazenar o "s". Se digitar "sgjk3123", ele também só vai pegar a primeira letra e iria funcionar, entende? Claro que isso depende do propósito. Se um contexto seja necessário que seja EXATAMENTE uma letra específica, ai teria que pensar o algoritmo de outra forma.

RESUMINDO:
usar

resp :char;

em vez de

resp :string;

B) é possível que o programa aceite tanto "s", quanto "S". Tem duas formas básicas. Uma seria declarando o while com as duas possibilidades. ex.


while (resp='s') or (resp='S') do

ou utilizar do comando UpCase(). (UpCase = "retorna o correspondente em maiúsculo do caractere informado")

while UpCase(resp)='S' doou mesmowhile resp='S' do  begin  ...  ...  readln(resp);  resp:=UpCase(resp); //já deixa a variável com o valor correspondente em maiúsculo  end;

2) FORMATAÇÃO DE 'TEXTO"
No Pascal, existe uma forma bastante simples e funcional de formatar um conjunto de caracteres, no caso "inserindo espaços a esquerda". Vamos ver na prática:

Tomemos os exemplo:



write('Deseja continuar (S/N): ':50);

Nesse caso, esse :X (usei :50) após a variável ou, nesse exemplo, uma cadeia de caracteres em si, significa que ela (a cadeia) vai "passa a ter pelo menos X caracteres", ou seja, se tiver 10 letras, vão ser inseridos 40 espaços no início. Se tiver 30, vão ser adicionados 20 espaços etc... se tiver mais de 50, ai ele não vai fazer nada! (vai ter pelo menos 50 da mesma forma);

E para que isso vai me servir?

Como está exibindo uma "tabela", pode ser interessante que a exibição fique alinhada, veja:

Sem formatação:

Qual a tabuada: 77 x 1 = 77 x 2 = 147 x 3 = 217 x 4 = 287 x 5 = 357 x 6 = 427 x 7 = 497 x 8 = 567 x 9 = 637 x 10 = 70Deseja continuar (S/N):

Com formatação:



Qual a tabuada: 7 7 x  1 =  7 7 x  2 = 14 7 x  3 = 21 7 x  4 = 28 7 x  5 = 35 7 x  6 = 42 7 x  7 = 49 7 x  8 = 56 7 x  9 = 63 7 x 10 = 70Deseja continuar (S/N):

Percebem a diferença?


Abaixo como ficaria o código:

    writeln(tab:2,' x ',n:2,' = ',tab*n:2);

3) ESCOLHENDO O LAÇO "IDEAL" (For, While ou Repeat)
Como costume dizer: "Tudo que dá para fazer com um, dá para se fazer com outro", em outras palavras: só precisaria existir um! Correto? Mas acontece que cada um é mais pratico que outro, daí é interessante entender o funcionamento dos 3... :D


Em relação a esse "problema da tabuada", creio que já ficou meio claro que o for não cai muito bem, pois não se trata de uma quantidade de repetição fixa, mas sim condicional («O programa termina quando for digitado o número zero.»). Logo, sobra o Repeat e While. Com While já vimos, abaixo só um exemplo com Repeat.



program Taboada;var   n,tab :integer;  resp  :char;beginrepeat  write('Qual a tabuada: ');  readln(tab);  for n:= 1 to 10 do    writeln(tab:2,' x ',n:2,' = ',tab*n:2);  write('Deseja continuar (S/N): ');   readln(resp); until UpCase(resp)<>'S';end.

Perceba que nesse caso talvez o repeat seja mais correto que o While, pois "sempre será executado pelo menos uma vez", e o While tem a característica "Verificar primeiro antes de iniciar o primeiro loop".


E no caso "corrigindo" a condição para finalizar:

program Taboada;var   n,tab :integer;beginrepeat  write('Qual a tabuada: ');  readln(tab);  for n:= 1 to 10 do    writeln(tab:2,' x ',n:2,' = ',tab*n:2);until tab=0;end.

Por ai vai.

Qualquer coisa é só postar, ou avisem que fechamos o tópico.

No aguardo.

Link para o comentário
Compartilhar em outros sites

Creio que valha meu comentário..

Quando comecei na faculdade recorri a este fórum postando duvidas sobre programas em pascal.. 

O procedimento adotado sempre foi o mesmo ( confesso que me ajudou muito ) de postar o que eu consigo fazer, para depois as ajudas começarem a fluir.

Muitos podem discordar deste método, mas para quem quer realmente aprender, vale muito a pena o fórum se valer deste procedimento, pois, para quem quer aprender, tem que colocar a cabeça para funcionar, e se a pessoa quer somente respostinha pronta, apenas chegar aqui, colocar a duvida e vai ter alguém à disposição para responder, vai perder tempo, pois não temos professores particulares trabalhando de graça aqui...

Bom, com a ajuda dos amigos aqui do fórum, pus minha cabeça para funcionar e comecei a tentar fazer primeiro e pedir ajuda quando eu não sabia mais o que fazer, mas antes procurava em algum livro para praticar a logica...

Agradeço muito o incentivo dos amigos aqui que ajudam e ao professor @Simon Viegas que depois deste ultimo post, só cresce meu respeito pelo seu conhecimento e vontade em ajudar...

Hoje também tento ajudar com o pouquíssimo que sei, mas, aprendendo a cada post do fórum.

Um dia aqui me ajudaram e tenho este espirito de compartilhar...

Meu respeito aos professores que nos ajudam aqui voluntariamente!!!!

Link para o comentário
Compartilhar em outros sites

Eu tava analisando este algoritmo e tem o seguinte problema, eu quero finalizar ao digitar zero, beleza digito 0 ele finaliza.....mas o problema é, que ele ta somando o zero e eu não quero isso. Como eu conserto???
 
Segue abaixo o algoritmo:

Program Tabuada;varnum:integer;cont:integer;Beginwriteln('DIGITE "0" PARA FINALIZAR O PROGRAMA!'); writeln;writeln;repeat writeln;write('Digite a tabuada: ');readln(num);for cont:= 1 to 10 dobeginwriteln(num:3:0, 'x', cont, '=', (num*cont):6:0); end                                                  until num=0; writeln('PROGRAMA ENCERRADO!!!');   End.
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...