Ir ao conteúdo

Posts recomendados

Postado
#include <stdio.h>
  
  int main()
{
 
  
  return 0;
}

não estou conseguindo entender como um loop roda quando esta aninhado não consigo entender a ordem de execução e preferência do computador, estou tentado imprimir um triangulo de asteriscos e não estou conseguindo entender, pois eu penso que o loop vai repetir e sair de um jeito ele faz de outro que muitas vezes não entendo, sou novo em programação. se alguém poder m mandar uma mensagem no privado para me ajudar seria ótimo.

  • Membro VIP
Postado

O main() não é loop. Coloca dentro de um for(;;) p.ex.
 

#include <stdio.h>
  
  int main()
{
 for(;;)
 {
  // faça o que tem que fazer pra sempre...
 }
  
  return 0;
}

 

 

Postado
1 minuto atrás, .if disse:

O main() não é loop. Coloca dentro de um for(;;) p.ex.

 

 

cara a minha duvida e a seguinte não estou conseguinte entender o comportamento do loop por exempl

#include <stdio.h>
  
  int main()
  {
  	for(int i=0; i<=10; i++)
  {
  	//instrucao 1
                       
    	for(int j=1; j<10; j++)
        {
        	//instrucao 1
        }
  
  	//instrucao 2
  
  		for(int k=2;k<=9; k--)
        {
        	//instrucao 1         
        }
    //instrucao 3                   
  }
  
  	return 0;
  }

o

Postado
10 minutos atrás, Flávio Pedroza disse:

Tem um erro nesse laço:

	for(int k=2;k<=9; k--)
        {
        	//instrucao 1         
        }

se k começa em 2, e vai decrescendo, ele nunca vai chegar em 9.

 

 

entao agora que eu vi que esta incorreto mas a minha duvida sao as repeticoes das intrucoes que estão na forma de comentaria eu me perco no funcionamento repetiçao, ainda não entendi como o comando roda, você tem alguma outra rede social com mensagens instantanias que eu possa conversar melhor com voce

  • Membro VIP
Postado

@Edinei Almeida, basicamente a ordem de atualização é feita da dentro para fora.
 

A medida que o fluxo entra em alguma coisa (laço de repetição, estrutura de seleção, função... qualquer coisa), vai ter que esperar terminar aqui que entrou por último, daí volta para o que entrou anteriormente, daí volta para o anterior e assim vai... se no caminho, entrou em algum coisa nova, vai ter que terminar essa coisa nova.. por aí vai..

Exemplo:

 

laço1 {
  laço2 {

  }
  laço3 {

  }
}


Então, o programa rodando "entrou" no laço1... seu índice está inicial. Aí, eventualmente entrou em alguma outra coisa, que é o laço2, logo, o laço2 tem que terminar para continuar... O laço 1 fica parado esperando o 2 terminar, e o 3 nem começou ainda, apenas está aguardando o 2. Ao 2 terminar, entra no 3. Que vai terminar e voltar para 1. Que vai entrar no 2 novamente, que vai terminar e entrar no 3......

Até o que tiver que terminar, terminar.
 

  • Curtir 1
Postado
9 minutos atrás, Simon Viegas disse:

@Edinei Almeida, basicamente a ordem é feita da dentro para fora. Só isso.

 

laço1 {
  laço2 {

  }
  laço3 {

  }
}


Então, o programa rodando "entrou" no laço1... seu índice está inicial. Aí, eventualmente entrou em alguma outra coisa, que é o laço2, logo, o laço2 tem que terminar para continuar... 

Ao terminar, entrou em outra coisa, que é o laço3, daí, vai fazer o que tem que fazer e continuar..

O laço1 termina, vai atualizar o índice, vê se vai sair dele ou entrar novamente... se entrar, vai seguir novamente o fluxo...

para fazer um programa que imprime um triangulo ou asterisco e essa mesma logica, tipo eu tenho que controlar as linhas, as colunas, os espaços em branco e a impressao dos asteriscos .

como e faria esse programa no caso ? eu me perco por que um laço depende do outro ai eu me perco na execuçao

  • Membro VIP
Postado

Aí por enquanto é com você...

Primeiro entenda melhor como funciona os laços de repetições aninhados. Faça diversos testes. Vá alterando os parâmetros... veja os resultados. Vá quebrando a cabeça mesmo..

Uma hora, será capaz de não achar uma solução e acabar copiado um pronto... normal!!! Mas, ao ficar tentado, e depois se deparar com uma solução pronta, vai entender melhor o que a outra pessoa pode ter pensado na hora de criar o algoritmo.


Acredite: a grande maioria das coisas que implementamos são apenas replicações de coisas que viu anteriormente em outro lugar... mas o detalhe é que ao mesmo tempo também será capaz de "mesclar" coisas, saca? 

Repito: vá tentado aí. Tente imprimir de formas diferentes. Vá testando.

  • Curtir 1
  • Membro VIP
Postado
19 horas atrás, Edinei Almeida disse:

um programa que imprime um triangulo ou asterisco e essa mesma logica, tipo eu tenho que controlar as linhas, as colunas, os espaços em branco e a impressao dos asteriscos .

// Online C compiler to run C program online
#include <stdio.h>

int main() {
unsigned char a=20,b;
      printf(".........Triangulo Ednei............\n\n");
    while (--a)
    {
    printf("%*s%c",a,"*");
    printf("%*s%c\n",b++,"*");
    b++;
    }
    a=40;
    while(--a) printf("*");
    return 0;
}

https://www.programiz.com/c-programming/online-compiler/

Tem bugs.. clique em run várias vezes... mas 1/2 que cria um triangulo. 😁

 

19 horas atrás, Simon Viegas disse:

será capaz de não achar uma solução e acabar copiado um pronto... normal!!! Mas, ao ficar tentado, e depois se deparar com uma solução pronta, vai entender melhor o que a outra pessoa pode ter pensado na hora de criar o algoritmo.

nem sei o que pensei... 🤪.. não comento, não explico 😜

Postado
Em 06/06/2022 às 11:36, Edinei Almeida disse:

não estou conseguindo entender como um loop roda quando esta aninhado não consigo entender a ordem de execução e preferência do computador

 

Primeiro tem que ficar claro o loop simples como este,

for(int i = 0; i < 10; i += 1){
}

 

Aí vai rodar 10 vezes e se colocar um printf dentro verá a mensagem essa quantidade de vezes.

 

No caso do aninhado, que é um dentro de outro, umas das uma forma é assim,

for(int i = 0; i < 10; i += 1){
    for(int j = 0; j < 10; j += 1){
        
    }
}

 

Se colocar um comando no loop mais interno (o for do contador j), como um printf, verá a mensagem 100 vezes. Isso porque o loop mais interno vai rodar 10 vezes a quantidade de vezes do outro (contador i). Se quiser entender melhor a ordem de execução você pode colocar comandos para mostrar as mensagens, p.ex,

for(int i = 0; i < 10; i += 1){
    printf("Externo, i = %d\n", i);
    for(int j = 0; j < 10; j += 1){
        printf("Interno, j = %d\n", j);
    }
    printf("***\n");
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!