Ir para o conteúdo
Ruka284

Ciclos

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 ?

Editado por NunoDinis

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

ndsotware.org

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.