MortalCheats - Cheat for Life
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dúvida sobre estruturas....

2 participantes

Ir para baixo

Dúvida sobre estruturas.... Empty Dúvida sobre estruturas....

Mensagem por Perdigão Sáb 9 Jul 2011 - 15:08

Bom galera, fiz um código pra mim entender melhor o uso de estruturas.
Este código de programa que eu fiz, lê 8 nomes de alunos, 4 notas para cada aluno, em seguido apresenta todas as notas de cada aluno junta a sua media, e apresenta também a média da turma...
Mas numa sala de aula da vida real, não tem 8 alunos, tem mais, eu posso mudar para 30,40, etc, mas em vez disso, eu quero que o programa, pergunte quantos alunos tem na turma, e faça a estrutura do tamanho entrado, entenderam?

O livro que eu to lendo, mostra um exemplo de como fazer isso, que é por meio de ponteiros, mas quando compilo o exemplo no Visual Studio 2008 Express Edition, retorna 3 erros e 1 warning:

Código:
1>.\sdg.cpp(32) : error C2057: expected constant expression
1>.\sdg.cpp(32) : error C2466: cannot allocate an array of constant size 0
1>.\sdg.cpp(32) : error C2133: 'ALUNO' : unknown size
1>.\sdg.cpp(61) : warning C4244: '=' : conversion from 'double' to 'float', possible loss of data

O código do Exemplo é esse:

Código:
// C08EX03.CPP

#include <iostream>
#include <iomanip>
#include <cctype>
#include <cstring>
#include <cstdlib> 
using namespace std;

#define TOTAL 41

int main(void)
{

  // Definicao de variaveis e configuracao do ambiente

  struct CAD_ALUNO
    {
      char  NOME[TOTAL];
      float NOTA[4];
      float MEDIA;
    };

  int I, J, TAMANHO;
  float SOMA_NT, SOMA_MD, MEDIA_GP;
  char LETRA, ENTRANOTA[6], QUANT[15];
  struct CAD_ALUNO ALUNO[TAMANHO], *PALUNO, X;
  PALUNO = &ALUNO[0];

  cout << setprecision(2);
  cout << setiosflags(ios::fixed);
  // Rotina para a entrada dos nomes

  cout << "Cadastro de alunos\n\n";
  cout << "Entre a quantidade de elementos: ";
  cin.getline(QUANT, sizeof(QUANT));
  TAMANHO = atoi(QUANT);

  // Rotina para a entrada dos nomes e notas

  cout << endl;
  for (I = 0; I <= TAMANHO-1; I++)
    {
      cout << "Informe o " << setw(2) << I + 1 << "o. nome: ";
      cin.getline(PALUNO[I].NOME, sizeof(PALUNO[I].NOME));
      cout << endl;
      cout << "Entre as notas:\n" << endl;
      for (J = 0; J <= 3; J++)
        {
          cout << setw(2) << J + 1 << "a. nota: ";
          cin.getline(ENTRANOTA, sizeof(ENTRANOTA));
          PALUNO[I].NOTA[J] = atof(ENTRANOTA);
        }
      cout << endl;
    }

  // Processamento do calculo das medias

  SOMA_MD = 0;
    for (I = 0; I <= TAMANHO-1; I++)
    {
      SOMA_NT = 0;
      for (J = 0; J <= 3; J++)
        SOMA_NT = SOMA_NT + PALUNO[I].NOTA[J];
      PALUNO[I].MEDIA = SOMA_NT / 4;
      SOMA_MD = SOMA_MD + PALUNO[I].MEDIA;
    }
  MEDIA_GP = SOMA_MD / TAMANHO;

  // Classificacao dos dados

  for (I = 0; I < TAMANHO-1; I++)
    for (J = I + 1; J < TAMANHO; J++)
      if (strcmp(PALUNO[I].NOME, PALUNO[J].NOME) > 0)
        {
          X = PALUNO[I];
          PALUNO[I] = PALUNO[J];
          PALUNO[J] = X;
        }

  // Apresentacao da tabela nome/notas/media

  cout << endl;
  cout << "Relatorio Geral" << endl;
  cout << endl;
  cout << setiosflags(ios::left);
  cout << setw(41) << "Aluno";
  cout << resetiosflags(ios::left);
  cout << setiosflags(ios::right);
  cout << setw( 7) << "Nota1";
  cout << setw( 7) << "Nota2";
  cout << setw( 7) << "Nota3";
  cout << setw( 7) << "Nota4";
  cout << setw( 7) << "Media";
  cout << endl;
  cout << endl;
  for (I = 0; I <= TAMANHO-1; I++)
    {
      cout << resetiosflags(ios::right);
      cout << setiosflags(ios::left);
      cout << setw(41) << PALUNO[I].NOME;
      cout << resetiosflags(ios::left);
      cout << setiosflags(ios::right);
      for (J = 0; J <= 3; J++)
        cout << setw( 7) << PALUNO[I].NOTA[J];
      cout << setw( 7) << PALUNO[I].MEDIA;
      cout << endl;
    }
  cout << endl;
  cout << setw(70) << "Media Geral = " << setw( 6) << MEDIA_GP;
  cout << endl;
  cout << endl;
  cout << "\nTecle <F> + <Enter> para finalizar o programa ";
  do
    {
      LETRA = cin.get();
      LETRA = toupper(LETRA);
    }
  while (LETRA != 'F');
  return 0;
}
Perdigão
Perdigão
Silver Member
Silver Member

Mensagens : 249
Posts : 5215
Agradecimentos : 9
Data de inscrição : 16/06/2011

Ir para o topo Ir para baixo

Dúvida sobre estruturas.... Empty Re: Dúvida sobre estruturas....

Mensagem por IsLifersBozo? Dom 10 Jul 2011 - 8:30

você não definiu o que é ALUNO (no caso uma variável)
Código:
struct CAD_ALUNO, ALUNO[TAMANHO], *PALUNO, X;

só consegui ver esse erro
:S
IsLifersBozo?
IsLifersBozo?
Silver Member
Silver Member

Mensagens : 219
Posts : 9689
Agradecimentos : 6
Data de inscrição : 02/06/2011
Idade : 29

Ir para o topo Ir para baixo

Dúvida sobre estruturas.... Empty Re: Dúvida sobre estruturas....

Mensagem por Perdigão Dom 10 Jul 2011 - 12:46

edoo, essa variavel nao precisa ser declarada pq faz parte da estrutura, o erro esta no tamanho dela, que é a variavel TAMANHO, e se fosse uma variavel, poderia ser assim:

Código:
<ponteiro> = new <tipo> <variavel>[<TAMANHO>];
Assim poderiamos decidir o tamanho da varivel, ao executar o programa...
Mas o exemplo do livro (o exemplo era pra ensinar isso numa struct) dá erro na hora de compilar, nao fui eu que fiz a source, foi o autor... affff
eu nao consigo acha isso na net.

o certo para o meu problema, seria usar um ponteiro para definir o tamanho da struct, mas nao sei adaptar isso.

Até mais
Perdigão
Perdigão
Silver Member
Silver Member

Mensagens : 249
Posts : 5215
Agradecimentos : 9
Data de inscrição : 16/06/2011

Ir para o topo Ir para baixo

Dúvida sobre estruturas.... Empty Re: Dúvida sobre estruturas....

Mensagem por Conteúdo patrocinado


Conteúdo patrocinado


Ir para o topo Ir para baixo

Ir para o topo

- Tópicos semelhantes

 
Permissões neste sub-fórum
Não podes responder a tópicos