Ir ao conteúdo
  • Cadastre-se

C++ c/c++ não faz a cópia de valores


Ninenome
Ir à solução Resolvido por Lucca Rodrigues,

Posts recomendados

#include <iostream>
#include <cstring>
/*11. Faca um programa que leia os dados de 10 alunos (Nome, matricula, Media Final),
armazenando em um vetor. Uma vez lidos os dados, divida estes dados em 2 novos vetores,
o vetor dos aprovados e o vetor dos reprovados, considerando a media mınima para a
aprovacao como sendo 5.0. Exibir na tela os dados do vetor de aprovados, seguido dos
dados do vetor de reprovados.
*/
using namespace std;
struct Alunos
{
    char nome[40];
    int matricula;
    double mediaFinal;
};
Alunos lerDados();
void imprimirDados(Alunos ap[], Alunos rp[], int c, int c1);
int main()
{
    int i, cont = 0, cont1 = 0;
    Alunos dados[3];
    Alunos apro[3];
    Alunos repr[3];
    for(i = 0; i < 3; i++)
    {
        dados[i] = lerDados();
    }
    for(i = 0; i < 3; i++)//não esta copiando para aprovados
    {
        if(dados[i].mediaFinal > 5.0)
        {
            cont++;
            strcpy(apro[i].nome,dados[i].nome);
            apro[i].mediaFinal = dados[i].mediaFinal;
            apro[i].matricula = dados[i].matricula;
        }
    }
    for(i = 0; i < 3; i++)//não esta copiando para reprovados
    {
        if(dados[i].mediaFinal < 5.0)
        {
            cont1++;
            strcpy(repr[i].nome,dados[i].nome);
            repr[i].mediaFinal = dados[i].mediaFinal;
            repr[i].matricula = dados[i].matricula;
        }
    }
    imprimirDados(apro, repr, cont, cont1);
    return 0;
}
Alunos lerDados()
{
    Alunos p;
    int n1, n2, n3;
    cout<<"Nome do aluno: "<<endl;
    cin.getline(p.nome,40);
    cin.sync();
    cout<<"Matricula: "<<endl;
    cin>>p.matricula;
    cin.sync();
    cout<<"Digite as notas 1, 2, 3: "<<endl;
    cout<<"Nota 1: ";cin>>n1;
    cout<<"Nota 2: ";cin>>n2;
    cout<<"Nota 3: ";cin>>n3;
    cin.sync();
    cout<<endl;
    p.mediaFinal = (n1 + n2 + n3)/3;
    return p;
}
void imprimirDados(Alunos ap[], Alunos rp[], int c, int c1)//imprimi os aprovados e reprovados
{
    int i;
        for(i = 0; i < c; i++)
        {
            cout<<"--------APROVADO--------"<<endl;
            cout<<"Nome.......: "<<ap[i].nome<<endl<<endl;
            cout<<"Matricula..: "<<ap[i].matricula<<endl<<endl;
            cout<<"Media final: "<<ap[i].mediaFinal<<endl<<endl;
        }
        for(i = 0; i < c1; i++)
        {
            cout<<"--------REPROVADO--------"<<endl;
            cout<<"Nome.......: "<<rp[i].nome<<endl<<endl;
            cout<<"Matricula..: "<<rp[i].matricula<<endl<<endl;
            cout<<"Media final: "<<rp[i].mediaFinal<<endl<<endl;
        }
}

entre linha 30 a 46 o programa deveria copiar os valores para o outro vetor e assim exibi-los na função imprimirDados na linha 70.As impressões s]ao separadas entre aprovados primeiro(na linha 76) em seguida é impresso os reprovados(na linha 82). Gostaria de saber se este tipo de cópia não e permitido pelo sistema e aceito ideias de solução! Desde ja agradeço! 

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

  • Solução

@Ninenome Você não precisa atribuir membro por membro da estrutura. Assim como atribuiu o retorno de lerDados() à dados[i], faça o mesmo para apro e repr, porém use cont e cont1 como índice:

apro[cont] = dados[i];
cont++;
//...
repr[cont1] = dados[i];
cont1++;

Afinal, só incrementamos o contador para estes quando for encontrada uma nota num intervalo específico, assim como estabeleceu com o comando if.

/*
11. Faca um programa que leia os dados de 10 alunos (Nome, matricula, Media Final),
armazenando em um vetor. Uma vez lidos os dados, divida estes dados em 2 novos vetores,
o vetor dos aprovados e o vetor dos reprovados, considerando a media mınima para a
aprovacao como sendo 5.0. Exibir na tela os dados do vetor de aprovados, seguido dos
dados do vetor de reprovados.
*/

#include <iostream>
#include <cstring>

using namespace std;

struct Alunos
{
    char nome[40];
    int matricula;
    double mediaFinal;
};

Alunos lerDados();
void imprimirDados(Alunos ap[], Alunos rp[], int c, int c1);

int main()
{
    int i, cont = 0, cont1 = 0;
    Alunos dados[3];
    Alunos apro[3];
    Alunos repr[3];
    for(i = 0; i < 3; i++)
    {
        dados[i] = lerDados();
    }
    for(i = 0; i < 3; i++)
    {
        if(dados[i].mediaFinal > 5.0)
        {
            apro[cont] = dados[i];
            cont++;
        }
    }
    for(i = 0; i < 3; i++)
    {
        if(dados[i].mediaFinal < 5.0)
        {
            repr[cont1] = dados[i];
            cont1++;
        }
    }
    imprimirDados(apro, repr, cont, cont1);
    return 0;
}
Alunos lerDados()
{
    Alunos p;
    char nl[6];
    int n1, n2, n3;
    cout<<"Nome do aluno: "<<endl;
    cin.getline(p.nome,40);
    cin.sync();
    cout<<"Matricula: "<<endl;
    cin>>p.matricula;
    cin.sync();
    cout<<"Digite as notas 1, 2, 3: "<<endl;
    cout<<"Nota 1: ";cin>>n1;
    cout<<"Nota 2: ";cin>>n2;
    cout<<"Nota 3: ";cin>>n3;
    cin.sync();
    cout<<endl;
    p.mediaFinal = (n1 + n2 + n3)/3;
    cin.getline(nl,6);
    return p;
}
void imprimirDados(Alunos ap[], Alunos rp[], int c, int c1)
{
    int i;
        for(i = 0; i < c; i++)
        {
            cout<<"--------APROVADO--------"<<endl;
            cout<<"Nome.......: "<<ap[i].nome<<endl<<endl;
            cout<<"Matricula..: "<<ap[i].matricula<<endl<<endl;
            cout<<"Media final: "<<ap[i].mediaFinal<<endl<<endl;
        }
        for(i = 0; i < c1; i++)
        {
            cout<<"--------REPROVADO--------"<<endl;
            cout<<"Nome.......: "<<rp[i].nome<<endl<<endl;
            cout<<"Matricula..: "<<rp[i].matricula<<endl<<endl;
            cout<<"Media final: "<<rp[i].mediaFinal<<endl<<endl;
        }
}

 

  • Curtir 1
  • Obrigado 1
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!