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

Ruka284

Ciclos

Recommended Posts

Ruka284

Bom dia.

Ainda tenho algumas dificuldades nos ciclos, no while, for, case.

Podem explicar s.f.f. como funciona estes ciclos, e como validar, as suas formulas de sintaxe.

Se puderem dar exmplos ainda melhor.

Obrigado

Share this post


Link to post
Share on other sites
pmg

Primeiro, o case não faz parte de ciclos.

Segundo o ciclo for(...) {...} é um caso especial do ciclo while (condition) {...} e o ciclo do {...} while(condition); é muito muito parecido com o while "normal".

Qualquer dos ciclo serve para repetir as instruções dentro do bloco correspondente.

Sempre que tens uma descrição com "para todos os elementos ...", "repete N vezes ...", "enquanto as galinhas não tiverem dentes ...", etc precisas dum ciclo. A escolha do ciclo é quase uma questão de gosto pessoal mas basicamente é assim:

Se precisas de repetir um grupo de instruções um número específico de vezes, usa um for().

Se precisas de repetir enquanto uma condição for verdade, usa while... se for aceitável deixr de executar as instruções; se tiveres de executar as instruções pelo menus uma vez, usa do while.

Exemplos:

"Imprimir os 10 primeiros numeros pares maiores que 0"

for (i = 0; i < 10; i++) printf("%d ", 2 * (i + 1));

"Escreve todas as potencias de 2 com 4 ou menos digitos"

pot = 1; while (pot < 1000) { printf("%d ", pot); pot *= 2; }


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
Dexter's Lab

Embora o Pmg já tenha dito tudo vou também dar o meu contributo, assim podes pelo menos sublinhar as palavras dele.

Case NÃO é um ciclo. Pode apenas substituir uma grande sequência de if's.

Caso A aconteça: instruçao

Caso B aconteça: outra instrução

Caso C aconteça: outra instrução...

Em C os ciclos são for, while, do...while e técnicas de recursividade.

Para criares um ciclo, à partida e geralmente precisas de ter uma forma de o controlar. Para isso vamos criar a variavel (cont) de controlo para dizermos ao ciclo quando queremos que ele acabe.

for(como começa; como acaba; que valor soma ou subtrai para chegar ao fim) {

}

Ex:. for(cont=0; cont <= 10; cont+1) - ciclo começa com o controlador a 0 e vai andar +1 casa enquanto for < ou = a 10.

while (quando acaba) {

}

e

do{

}while(quando acaba);

Share this post


Link to post
Share on other sites
NunoDinis

Case NÃO é um ciclo. Pode apenas substituir uma grande sequência de if's.

Caso A aconteça: instruçao

Caso B aconteça: outra instrução

Caso C aconteça: outra instrução...

Então está bem, vamos lá ver.

Exemplo: Escreva um algoritmo que dado o nome do Nuno, do pmg, do ruka e do dexter escreva o seu clube.

A tua ideia:

if(nome == "nuno") {
printf("Benfica")
}
if(nome == "pmd") {
printf("Porto")
}
if(nome == "ruka") {
printf("Sporting")
}
if(nome == "Dexter") {
printf("Braga")
}

A minha ideia:

switch (nome)
{
case "nuno" :
 printf("Benfica");
 break;
case "pmg" : 
 printf("Porto");
 break;
case "ruka" :
 printf("Sporting");
 break;
case "Dexter" :
 printf("Braga");
 break;
}

Ambas as soluções estão corretas. Agora a minha pergunta: o porquê de utilizar uma série de ifs, quando na linguagem C podemos utilizar o switch, que na minha opinião descomplica muito mais a situação ?

Edited by NunoDinis

Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
thoga31

Agora a minha pergunta: o porquê de utilizar uma série de ifs, quando na linguagem C podemos utilizar o switch, que na minha opinião descomplica muito mais a situação ?

Mas isso foi o que o @Dexter disse!


Knowledge is free!

Share this post


Link to post
Share on other sites
pmg

if(nome == "nuno") {
printf("Benfica")
}
if(nome == "pmd") {
printf("Porto")
}

switch (nome)
{
case "nuno" :
 printf("Benfica");
 break;
case "pmg" :
 printf("Porto");
 break;
}

Ambas as soluções estão corretas.

Ambas as soluções estão erradas! Em C não é possível comparar o conteúdo de strings como estás a fazer.

Tirando isso (que invalida toda a resposta) o switch é mais agradável do que uma seris de ifs encadeados.

Para compara o conteúdo de strings, usa strcmp() (que não é exactamente aplicável a um switch).

if (!strcmp(nome, "nuno")) whetever;
else if (!strcmp(nome, "pmg")) whatever;


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Share this post


Link to post
Share on other sites
NunoDinis

Ambas as soluções estão erradas! Em C não é possível comparar o conteúdo de strings como estás a fazer.

Tirando isso (que invalida toda a resposta) o switch é mais agradável do que uma seris de ifs encadeados.

Mas numérico dá, correto ?

O switch (ou case como é o caso do VB.NET), é aplicável a todas as LP ?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

Share this post


Link to post
Share on other sites
thoga31

Mas numérico dá, correto ?

O switch (ou case como é o caso do VB.NET), é aplicável a todas as LP ?

Numérico dá. E não existe em todas as LPs. Python é um exemplo. Tu tens isto:

if n >= 15:
  print("Bom")
elif n >= 10:
  print("Razoavel")
elif n >= 5:
  print("Mau")
else:
  print("WTF?")


Knowledge is free!

Share this post


Link to post
Share on other sites
NunoDinis

E em termos de velocidade de execução do código, qual deles o mais rápido?


Estranha forma de vida que tem a capacidade de transformar comandos em mensagens de erro.

ndsotware.org

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

×

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.