Ir ao conteúdo
  • Cadastre-se

C++ Problemas num programa de iniciante. Matrizes e For.


Ezert Aracksam

Posts recomendados

#include <iostream>

using namespace std;

int main () {

    int cel = 10; //número de células da array.

    for (int i = 0; i <= cel; i++) {

        int iAnt = i-1; //"i Anterior".

        int a [cel];

        a[i] = i; //a[1] = 1; a[2] = 2; etc...

        cout << a[i] << endl;

        if (i > 0) cout << "Anterior: " << a[iAnt] << endl <<endl; else cout << "Sem anterior" << endl<< endl;

    }


}

Olá a  todos!

 

Estou estudando c++ e resolvi escrever o código em anexo para fins de aprendizado.

 

O programa tem como objetivo fazer um output do valor de cada célula da matriz seguido pelo valor da célula anterior.

 

Aqui está um print da tela de execução do programa:

 

image.thumb.png.a18bb2c9360f5b205cee52506313d400.png

 

Então. Como podem ver, até o output do valor da célula 8, ia tudo bem.

Mas de repente começa a mostrar que o valor anterior é 48, quando deveria ser 7.

As coisas pioram ainda mais: quando deveria aparecer Anterior:  8, aparece Anterior: -1842119973.

etc...

 

Estou entendendo nada...

 

Por favor, me ajudem!

 

Obrigado desde já...

  • Amei 1
Link para o comentário
Compartilhar em outros sites

#include <iostream>

using namespace std;

int main () {

    int a[11]; //número de células da array.

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

        int iAnt = i-1; //"i Anterior".

        a[i] = i; //a[1] = 1; a[2] = 2; etc...

        cout << a[i] << endl;

        if (i > 0) cout << "Anterior: " << a[iAnt] << endl <<endl; else cout << "Sem anterior" << endl<< endl;

    }



system ("pause");
return 0;
}

Fiz  dois metodos o segundo com seu codigo , apenas retirei o vetor e declarei fora do for e tudo certo.

 

#include <iostream>

using namespace std;

int main () {

    int cel = 10; //número de células da array.
 	int a [cel];
    for (int i = 0; i <= cel; i++) {

        int iAnt = i-1; //"i Anterior".


        a[i] = i; //a[1] = 1; a[2] = 2; etc...

        cout << a[i] << endl;

        if (i > 0) cout << "Anterior: " << a[iAnt] << endl <<endl; else cout << "Sem anterior" << endl<< endl;

    }
system ("pause");
return 0;

}

 

  • Curtir 1
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Olá, posso dar só uma ajudinha? O valor da variável "i" não pode atingir o valor 10 no for. Portanto, no for, ao invés de 

for (i = 0; i <= 10; i++){
 // resto 
}

Ele deve ser implementado assim:

for (i = 0; i < 10; i++){
 // resto                  
}

Pois considerando que um vetor A[10] possui 10 campos iniciando do campo A[0], a ultima posição dele é sempre A[9].

Para fins didáticos, um vetor A possui a posição inicial em A[0] e a posição final em A[i - 1]. Caso você tente acessar a posição A[10], ele retornará: ou um erro, ou lixo.

Nesse caso, o valor da posição 10 não existe, Por isso o valor absurdo!

adicionado 8 minutos depois
6 minutos atrás, Henrique dos Santos Dias disse:

Olá, posso dar só uma ajudinha? O valor da variável "i" não pode atingir o valor 10 no for. Portanto, no for, ao invés de 


for (i = 0; i <= 10; i++){
 // resto 
}

Ele deve ser implementado assim:


for (i = 0; i < 10; i++){
 // resto                  
}

Pois considerando que um vetor A[10] possui 10 campos iniciando do campo A[0], a ultima posição dele é sempre A[9].

Para fins didáticos, um vetor A possui a posição inicial em A[0] e a posição final em A[i - 1]. Caso você tente acessar a posição A[10], ele retornará: ou um erro, ou lixo.

Nesse caso, o valor da posição 10 não existe, Por isso o valor absurdo!

Perdão, eu estava enganado!

 

A unica coisa que consigo ver, é que seu vetor está declarado dentro do FOR.

Declare ele antes de iniciar o FOR que provavelmente seu programa irá funcionar do modo que se espera.

  • Curtir 1
  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

Em 18/09/2018 às 14:36, WilliamNascimento disse:

#include <iostream>

using namespace std;

int main () {

    int a[11]; //número de células da array.

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

        int iAnt = i-1; //"i Anterior".

        a[i] = i; //a[1] = 1; a[2] = 2; etc...

        cout << a[i] << endl;

        if (i > 0) cout << "Anterior: " << a[iAnt] << endl <<endl; else cout << "Sem anterior" << endl<< endl;

    }



system ("pause");
return 0;
}

Fiz  dois metodos o segundo com seu codigo , apenas retirei o vetor e declarei fora do for e tudo certo.

 


#include <iostream>

using namespace std;

int main () {

    int cel = 10; //número de células da array.
 	int a [cel];
    for (int i = 0; i <= cel; i++) {

        int iAnt = i-1; //"i Anterior".


        a[i] = i; //a[1] = 1; a[2] = 2; etc...

        cout << a[i] << endl;

        if (i > 0) cout << "Anterior: " << a[iAnt] << endl <<endl; else cout << "Sem anterior" << endl<< endl;

    }
system ("pause");
return 0;

}

 

 

Em 18/09/2018 às 16:34, Henrique dos Santos Dias disse:

Olá, posso dar só uma ajudinha? O valor da variável "i" não pode atingir o valor 10 no for. Portanto, no for, ao invés de 


for (i = 0; i <= 10; i++){
 // resto 
}

Ele deve ser implementado assim:


for (i = 0; i < 10; i++){
 // resto                  
}

Pois considerando que um vetor A[10] possui 10 campos iniciando do campo A[0], a ultima posição dele é sempre A[9].

Para fins didáticos, um vetor A possui a posição inicial em A[0] e a posição final em A[i - 1]. Caso você tente acessar a posição A[10], ele retornará: ou um erro, ou lixo.

Nesse caso, o valor da posição 10 não existe, Por isso o valor absurdo!

adicionado 8 minutos depois

Perdão, eu estava enganado!

 

A unica coisa que consigo ver, é que seu vetor está declarado dentro do FOR.

Declare ele antes de iniciar o FOR que provavelmente seu programa irá funcionar do modo que se espera.

 

Muito obrigado aos dois! O problema era mesmo o local indevido que estava a citação do vetor! Corrigi isso e está funcionando perfeitamente!

 

Mas eu gostaria de saber por que não posso por dentro de For... É algo que explodiu minha cabeça quando aconteceu, porque entendi nada hehe.

 

Essa pergunta (creio eu) é mais complexa e demorada de responder, então entendo caso não queiram tomar seu tempo para respondê-la. 

 

Muito obrigado pela ajuda!

Link para o comentário
Compartilhar em outros sites

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!