Ir ao conteúdo
  • Cadastre-se

Problema de matriz e vetor em dev c++


nerigu

Posts recomendados

alguem poderia me ajudar como posso fazer esse programa, usando matriz pelo c++?

Em uma classe há n alunos, cada um dos quais realizou k provas com pesos distintos. Dados n , k, os pesos das k provas e as notas de cada aluno, calcular a média ponderada das provas para cada aluno e a média aritmética da classe em cada uma das provas

Link para o comentário
Compartilhar em outros sites

Posta o que conseguiu. O cálculo de média ponderada é a nota multiplicada pelo peso correspondente dividido pela soma dos pesos.

ex:

nota1 = 10

nota2 = 5

nota3 = 4

peso1 = 3

peso2 = 2

peso3 = 5

media = (nota1 + nota2 + nota3) / 3

media ponderada = (nota1 * peso1 + nota2 * peso2 + nota3 * peso3) / 10

10 é a soma dos pesos

Link para o comentário
Compartilhar em outros sites

bom, eu fiz mais ou menos, primeiro q eu nao sei digitar a nota para cada aluno, eu digito somente para um, e depois não sei calcular a media ponderada, pois nao sei como juntar o peso com cada nota, e o final para tirar a media da sala... ai esta o que eu escrevi...

#include <stdio.h>
#include <conio.h>
#include <string.h>

#define P 3 //P = QUANTIDADES DE PROVAS
#define A 3 //A = QUANTIDADES DE ALUNOS
#define PE 3 //PE = QUANTIDADE DE PESOS

int main () {

int aluno[A], prova[P], peso[3], soma, i;
float media;

do {
printf("Digite quantos alunos =");
scanf("%d",&aluno[A]);
}while (aluno[A]>4);

soma = 0;

for (i=0; i<aluno[A]; i++) {
//printf ("Aluno %d= ",aluno[A]);


}



do{
printf("\nDigite quantas provas cada aluno fez = ");
scanf("%d",&prova[P]);
}while (prova[P]>4);

soma = 0;

for (i=0; i<prova[P]; i++) {
printf ("Prova %d ,",i);
printf (" Nota ");
scanf ("%d",&prova[i]);
}


do{
printf("\nDigite quantos pesos = ");
scanf("%d",&peso[PE]);
}while (peso[PE]!= prova[P]);

soma = 0;

for (i=0; i<peso[PE]; i++) {
printf ("Peso %d ,",i);
printf (" Peso de cada Prova ");
scanf ("%d",&peso[i]);




soma = (soma + (prova[i] * peso[i]));

media = soma/prova[P];

}


printf("soma = %d", soma);
printf("\n media = %f", media);

getch ();
return 0;
}

Link para o comentário
Compartilhar em outros sites

Não entendi o que você quis fazer, seu código está confuso. Por exemplo nesse trecho a variável "A" não é incrementada, caindo num laço infinito.


do {
printf("Digite quantos alunos =");
scanf("%d",&aluno[A]);
}while (aluno[A]>4);

Nesse código abaixo não tem os cálculos da média, apenas o preenchimento dos dados na matriz, pois vi que você tá meio perdido na entrada dos dados.

Dá uma olhada e depois implementa o processamento dos cálculos e a saída.


#include <stdio.h>
#include <conio.h>

void main()
{
int n, // número de alunos
k, // número de provas
i, j; // índices dos laços

int mat[ n ][ k ];

printf( "Entre com total de alunos: " );
scanf( "%d", &n );
printf( "Entre com total de provas: " );
scanf( "%d", &k );

for( i = 0; i < n; i++ )
{
printf( "\nNotas do aluno %d\n", i+1 );

for( j = 0; j < k; j++ )
{
printf( "Nota %d : ", j+1 );
scanf( "%d", &mat[ i ][ j ] );
}
}

printf( "\n\n" );
system( "PAUSE" );
}

Link para o comentário
Compartilhar em outros sites

brigadoo cara! já ajudo muito! então eu usei isso :

do {

printf("Digite quantos alunos =");

scanf("%d",&aluno[A]);

}while (aluno[A]>4)

para que o usuario se limitasse com o numero de alunos, por exemplo se ele digitasse mais que 3 alunos o programa pede para ele digitar novamente, isso no casso de ele digitar muitos alunos... mas isso era só um incremento meu...

agora quando for fazer para entrar com o peso, eu faço o mesmo esquema que voce fez para entrar com os alunos e provas?

Link para o comentário
Compartilhar em outros sites

Você pode criar um vetor para armazenar a média de cada aluno, ou ir fazendo o cálculo das média de cada aluno à medida em que o usuário for entrando com as notas. Pode definir também os valores dos pesos ou pedir ao usuário que entre com os valores dos pesos. Como pretende fazer?

Note que não fiz restrição às notas, o correto é aceitar apenas notas entre 0 e 10.

Você pode modificar o código que fiz criando essa restrição.

Link para o comentário
Compartilhar em outros sites

Se k é o total de provas e o peso é igual ao total de provas, suponhamos que o usuário entre com k = 10, sendo assim teremos também 10 pesos, concorda?

Como a nota máxima numa prova é 10, então a soma dos pesos tem que ser 10.

Nesse caso onde foi solicitada 10 provas(k = 10) então cada peso deve ser igual a 1, pois a soma deles será 10.

Para facilitar, o correto seria definir uma qtd fixa de pesos e provas. Do jeito que está no enunciado, você tem que dividir os pesos.

Ex: suponha que sejam 3 provas, logo 3 pesos. Como a soma dos pesos deve ser 10, pois a nota máxima da prova é 10, digamos que para a primeira prova o usuário entre com peso1 = 8, então para os outros pesos restam 2.

Se para a segunda prova ele digitar peso2 = 2, então logicamente peso3 = 0.

Também dá pra fazer assim, mas é muito trabalhoso, teria que criar uma variável que verificasse o valor do peso e ir descontando de 10, por ex:

int controle; // controla valor do peso

se digitar peso1 = 5, então

controle = peso1 - 10;

agora sabemos que a variável controle é igual a 5

se digitar um valor maior que 5 para peso2 o programa não aceita, se digitar valor menor que 5, programa atualiza variável controle e para o peso3 faz nova verificação.

Ou também criar um vetor peso, onde cada posição do vetor corresponda á posição da nota na matriz, e depois fazer os cálculos.

Tenho uma prova de GA e Física amanhã, estou sem tempo para elaborar o código pra você, talvez algum colega o faça.

Fiz um mais simples onde a quantidade de provas, quantidade de pesos e valores dos pesos é pré definida no começo. Assim dá pra você ter uma ideia e adaptar à sua necessidade.

abraço...


#include <stdio.h>
#include <conio.h>

void main()
{
int n, // número de alunos
k, // número de provas
i, j, // índices dos laços
mat[ n ][ k ], // matriz
p1, p2, p3; // pesos das notas

float media[ n ], // média por aluno
media_turma, // média da turma
soma_notas; // recebe a soma das notas de cada aluno

k = 3; // 3 provas
p1 = 2; // peso 2 para a primeira prova
p2 = 5; // peso 5 para a segunda prova
p3 = 3; // peso 3 para a terceira prova

printf( "Entre com total de alunos: " );
scanf( "%d", &n );
// printf( "Entre com total de provas: " );
// scanf( "%d", &k );

media_turma = 0;

for( i = 0; i < n; i++ )
{
soma_notas = 0;
printf( "\nNotas do aluno %d\n", i+1 );

for( j = 0; j < k; j++ )
{
printf( "Nota %d : ", j+1 );
scanf( "%d", &mat[ i ][ j ] );

// esse laço garante que serão digitadas notas entre 0 e 10
while( mat[ i ][ j ] < 0 || mat[ i ][ j ] > 10)
{
printf( "\nERRO! Notas entre 0 e 10!\n" );
printf( "Nota %d : ", j+1 );
scanf( "%d", &mat[ i ][ j ] );
}

if( j == 0 ) // primeira prova, recebe p1 = 2
soma_notas += p1 * mat[ i ][ j ];

if( j == 1 ) // segunda prova recebe p2 = 5
soma_notas += p2 * mat[ i ][ j ];

if( j == 2 ) // terceira prova recebe p3 = 3
soma_notas += p3 * mat[ i ][ j ];
}
media[ i ] = soma_notas / 10; // 10 é a soma dos pesos
media_turma += media[ i ];
}
for( i = 0; i < n; i++ )
printf( "\nMedia do aluno %d = %.2f%%",i+1, media[ i ] );

printf( "\n\nMedia da turma = %.2f%%", media_turma / n );

printf( "\n\n" );
system( "PAUSE" );
}

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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