For loop build error

Asked

Viewed 69 times

3

I’m making a program that asks how many notes the user will type and after that, enters a 'for' loop asking what are the notes to type. Notes are stored in a array and finally the average.

#include <iostream>
using namespace std;

int main(){

int qt, tot, med;
cout << "Quantidade de notas: ";
cin >> qt;

int nt[] = {};

for(i = 0; i <= qt; i++){
    cout << "Digite a nota " << i+1 << " : " << endl;
    cin >> nt[i];
    tot = tot + nt[i];
}

med = (tot / qt);

cout << "Media = " << med << endl;

return main();
}

The problem is that every time I try to compile, the following error appears:

 'i' was not declared in this scope
  for(i = 0; i <= qt; i++){

2 answers

2


There are several errors in the code, when solve this will appear others. We will arrange at least one part:

#include <iostream>
using namespace std;

int main() {
    cout << "Quantidade de notas: ";
    int qt;
    cin >> qt;
    int nt[qt] = {}; //isto é mais C que C++
    int tot = 0;
    for (int i = 0; i < qt; i++) {
        cout << "Digite a nota " << i + 1 << " : " << endl;
        cin >> nt[i];
        tot += nt[i];
    }
    cout << "Media = " << tot / qt << endl;
}

See working on ideone. And in the Coding Ground. Also put on the Github for future reference.

The array had no size and would corrupt the memory.

The iteration variable of for was not declared, as the compiler reported.

The counter went up to a position after the size entered.

You cannot call the same function without an output condition and that it is not too long not to give stackoverflow.

You may want averages with decimal part, this code does not allow this.

The rest is more cosmetic.

0

Come on Nate, about the reference mistake:

'i' was not declared in this scope
for(i = 0; i <= qt; i++){ ...}

What was missing was to put even the type of variable i, because in this context it has to be declared as a variable, and that will be used as control of the loop of repetition for. Staying like this:

for(int i = 0; i <= qt; i++){ ...}

I thought it was funny that I developed a code a few days ago to do the same operation, just like you thought. Calculate the arithmetic mean of a certain number of notes reported by the user.

I implemented my solution using class, objects, dynamic arrays and I find it interesting to leave it to you here, to study it and analyze it. Goes below:

#include <iostream>

using namespace std;

class Calculadora{

private:
    double resultado;
    int qtdNotas;
    double *nota = new double;
public:
    //Setters
    void setResultado(double resultado){
        this->resultado = resultado;
    }
    void setQtdNotas(int qtdNotas){
        this->qtdNotas = qtdNotas;
    }
    void setNota(double *nota){
        for(int i=0; i <= getQtdNotasArray(); i++){
            *(this->nota + i) = *(nota + i);
        }
    }
    //Getters
    double getResultado(){
        return this->resultado;
    }
    int getQtdNotasArray(){
        return this->qtdNotas - 1;
    }
    int getQtdNotas(){
        return this->qtdNotas;
    }

    //Média
    double calculaMedia(){
        double resultado = 0;
        int i = 0;
        int qtdNotas = this->getQtdNotas();

       while(i <= this->getQtdNotasArray()){
            resultado += *(this->nota + i);
            i++;
        }

        resultado = resultado / (double)qtdNotas;

        return this->resultado = resultado;
    }
};


int main()
{
    int qtdNotas; //Recebe quantidade de notas informadas pelo usuário, a média é baseada nessa quantidade
    double *nota = new double; //Declaração de variável ponteiro, utilizada para posterior criação do array dinâmico

    Calculadora *o = new Calculadora; //Cria o objeto "o" e utiliza e o utiliza para reservar espaço na memória

    cout << "Programa Media de um Aluno. Abaixo serao solicitadas as notas dos 4 bimentres para ser calculada a media final.\n";
    cout << "A media do aluno sera baseada em quantas notas? ";
    cin >> qtdNotas; cout << endl;

    o->setQtdNotas(qtdNotas); //Insere quantidade de notas sobre qual o calculo será feito

    for(int i=0; i <= o->getQtdNotasArray(); i++){
        cout << i + 1 << " : ";
        cin >> *(nota + i); cout << endl; //Guarda na variável ponteiro, em seu devido espaço(array), os valores das medias inseridas pelo usuário
    }

    o->setNota(nota); //pega referência do ponteiro onde foram alocadas as notas e passa pela função para ser atribuída a um atributo dentro da classe
    o->calculaMedia(); //com todos os dados já inseridos nos atributos do objeto, este método somente manda executar o calculo da média aritmética simples, e manda guardar o resultado em um atributo de nome resultado para somente ser recuperado posteriormente

    cout << "Notas recolhidas com sucesso! A media para este aluno e de: " << o->getResultado(); //Método que somente recupera o resultado dos calculos já realizados anteriormente

    return 0;
}

I am running my programs in IDE Code::Blocks, using gcc compiler and C++ 11 ISO standard. Here is my contribution, incidentally I am starting in C++ so any serious error of technical aspect feel free to report.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.