Jump to content

Ciclos


Ruka284
 Share

Recommended Posts

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

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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);

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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!

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
 Share

×
×
  • 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.