Contagem dentro de 3 loops for [RESOLVIDO]

1. Contagem dentro de 3 loops for [RESOLVIDO]

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 15/09/2014 - 10:04h

Ola PessoALL

Estou com um problema , preciso fazer uma contagem (1,2,3,4,5,6,....) dentro de 3 loops for.Teria alguma maneira de fazer isso ?


#include <stdio.h>

int main(){

int c,i,j,k;

for(i = 0;i<=10;i++){
for(j = 0;j<=10;j++){
for(k = 0;k<=10;k++){
// Dai imprimiria o valor em contagem do 'c'
// Teria algum calculo para isso ?
printf("Indice : %i\n",c);
}
}
}
}


T+


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 16/09/2014 - 00:38h

Acabei de notar que seu código usa “<=valor_final”, ao passo que eu sigo a forma mais comum no jargão do C, que é “<valor_apos_final” . Além de mais usual entre programadores experientes, a forma que eu emprego é especialmente útil quando se está trabalhando com arrays e seus índices, pois o tal “valor_apos_final” coincide exatamente com o tamanho usado na declaração do array ou em valores que possam ser obtidos com o uso do operador sizeof (por exemplo: a forma básica de saber a quantidade de elementos de um array, que é fazer “sizeof array/sizeof array[0]” -- tamanho total dividido pelo tamanho do primeiro elemento).

Se você realmente quiser prosseguir com o uso de <=, deve somar 1 nos fatores das multiplicações do meu segundo e terceiro exemplos, complicando um pouco mais as contas.

Na verdade, se você não quiser ou não puder, por algum motivo, usar o primeiro exemplo, que conta por simples incremento (máxima eficiência), a forma mais geral seria a seguinte.

for(i=I_INICIAL; i<LIMITE_I; i++){
for(j=J_INICIAL; j<LIMITE_J; j++){
for(k=K_INICIAL; k<LIMITE_K; k++){
/* 6 somas/subtrações + 2 multiplicações */
contador = (k-K_INICIAL) + (LIMITE_K-K_INICIAL)*((j-J_INICIAL) + (LIMITE_J-J_INICIAL)*(i-I_INICIAL));
}
}
}


Se você preferir trabalhar com <=, a fórmula fica a seguinte (com um total de oito somas/subtrações e as mesmas duas multiplicações).

contador = (k-K_INICIAL) + (K_FINAL+1-K_INICIAL)*((j-J_INICIAL) + (J_FINAL+1-J_INICIAL)*(i-I_INICIAL)); 


3. Re: Contagem dentro de 3 loops for [RESOLVIDO]

Paulo
paulo1205

(usa Ubuntu)

Enviado em 15/09/2014 - 15:06h

/* Modo simples */

c=0;
for(i=0; i<LIMITE_I; i++){
for(j=0; j<LIMITE_J; j++){
for(k=0; k<LIMITE_K; k++){
/* Usa ‘c’ */
c++; /* Um incremento */
}
}
}


-------

/* Outro modo */

for(i=0; i<LIMITE_I; i++){
for(j=0; j<LIMITE_J; j++){
for(k=0; k<LIMITE_K; k++){
c = LIMITE_J*LIMITE_K*i + LIMITE_K*j + k; /* 3 multiplicações e 2 adições */
/* Usa ‘c’ */
}
}
}


-------

/* Mais um modo */

for(i=0; i<LIMITE_I; i++){
for(j=0; j<LIMITE_J; j++){
for(k=0; k<LIMITE_K; k++){
c = k + LIMITE_K*(j + LIMITE_J*i); /* 2 multiplicações e duas adições */
/* Usa ‘c’ */
}
}
}







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts