Ir para conteúdo

Arquivado

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

AkireDuda

MATRIZES E VETORES EM C

Recommended Posts

Hello, preciso fazer uma questão da faculdade sobre matrizes e vetores. Tentei fazer e o programa não executa, não consigo identificar os erros mais grosseiros. Será que alguma boa alma conhecedora de programação em C poderia ajudar esta nobre pessoa?

20. Leia uma matriz 100 x 10 que se refere respostas de 10 questões de múltipla

escolha, referentes a 100 alunos. Leia também um vetor de 10 posições contendo
o gabarito de respostas que podem ser a, b, c ou d. Seu programa deverá
comparar as respostas de cada candidato com o gabarito e emitir um vetor
Resultado, contendo a pontuação correspondente.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int main ()
{
int i,j;
char matriz[100][10];
char acertos[10];
int gab[10];
int nota;
for (i=0;i<10;i++)
{
printf ("\nResposta de cada aluno:\n\n");
printf ("\nQuestao",i,"Marque a-b-c-d = ");
scanf ("%c",&nota);
gab = nota;
}
for (i=0;i<100;i++){
acertos=0;
for (j=0;j<10;j++)
printf ("\nInforme resposta da",j,"[", i, " , ", j, " ]");
scanf ("%c",&nota);
matriz[j]=nota;
if (matriz[j] = gab){
acertos= acertos + 1;
}
}
for (i=0;i<10;i++){
printf("O aluno ", i, " teve ", acertos," acertos!");
}
getch();
return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Olá, AkireDuda, meu nome é João Gabriel e eu vou tentar te auxiliar com sua duvida. Vamos começar destacando alguns erros do seu codigo.
1:
- printf ("\nQuestao",i,"Marque a-b-c-d = ");
para concatenar valores de variaveis em C fazendo uso da função printf, é necessario o uso o "%" seguido por um especificador, como no caso a variavel 'i' é um inteiro, a sua linha de codigo deveria ser da seguinte forma.
-printf("\nQuestao %d:\nMarque a-b-c-d = ", i);
OBS: O mesmo erro de concatenação segue nas seguintes linhas:
-printf ("\nInforme resposta da",j,"[", i, " , ", j, " ]");
-printf("O aluno ", i, " teve ", acertos," acertos!");
2:
-int gab[10];
-int nota;
-scanf ("%c",&nota);
-gab = nota;
A nota de alguem é um valor entre 0 a 10 ou 0 a 100, você criou a nota como um inteiro, porem atribui ela utilizando do "%c", quando o usuario entrar com a letra das resposta, vai se atribuido a variavel o valor da letra na tabela ascii, ou seja a = 97, b=98, c=99, d=100, e nao é isso q você quer. Nao intendi pq você passou o valor para nota e depois para o vetor gab.
3:
-for (j=0;j<10;j++)
-printf ("\nInforme resposta da",j,"[", i, " , ", j, " ]");
-scanf ("%c",&nota);
Como você nao colocou "{}" apos o for, somente a proxima instrução executada, no caso ele roda 10 vezes o printf e somente uma o scanf, e nao é isso que você quer.
4:
-scanf ("%c", &nota);
-matriz[j]=nota;
Novamente você passa para nota e depois para matriz sem necessidade.
5:
-if (matriz[j] = gab)
Faltou um = aki, n sei se foi sem querer, mas vou explicar igual hehe
Quando você faz "if(matriz[j] = gab)" você pega o valor de gab coloca dentro de matriz[j] e pergunta, esse valor é igual a 0? Sim ou nao? E a pergunta q a gente quer é, o valor de matriz[j] é igual ao valor de gab? sim ou nao?
6:
-char acertos[2];
Muito cuidado com tipos de variaveis, no caso do seu programa é possivel manter da forma q esta, mas fica muito propenso a erro tratar um variavel que vai armazenar quantidade de acertos como char, afinal, você acerta 7 questoes, e nao A questoes.
Bom AkireDuda, seu codigo possui muitos outros erros, mas é claro que você nao é da area e nao tem pq nós discutirmos sobre numeros magicos ou boas praticas de programação, entao abaixo esta o codigo funcionando. Caso seja de seu interesse tirar duvidas ou trocar ideia sobre essa linguagem é só dar um toque q a gente conversa pela internet =D

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
 
int main ()
{
	int i,j;
	char matriz[100][10];
	int acertos[100];
	char gab[10];//alterado para char
	char nota;//alterado para char

	printf ("\nCriando o gabarito:");
	for (i=0;i<10;i++)
	{
		printf("\nQuestao %d:\nMarque a-b-c-d = ", i+1);
		scanf ("%c", &gab[i]);
		getchar();//para tirar do buffer o '\n'
	}

	for (i=0;i<100;i++)
	{
		acertos[i]=0;
		printf("Informa as respostas do aluno %d.\n", i+1);
		for (j=0;j<10;j++)
		{
			printf ("Questao %d:\n", j+1);
			scanf ("%c", &matriz[i][j]);
			getchar();//para tirar do buffer o '\n'
			if (matriz[i][j] == gab[i])
			{
				acertos[i] = acertos[i] + 1;
			}
		}
	}
	
	for (i=0;i<100;i++)
	{
		printf("O aluno %d teve %d acertos!\n", i, acertos[i]);
	}
	
	getchar();//Aguarda para encerrar o programa
	
	return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, essa já era uma das minhas ultimas tentativas, os outros estavam, como posso dizer, melhores rsrsrsrs. Eu estou no 3º período de engenharia da computação, tenho certa dificuldade e estou fazendo de tudo para supera-la, cada vez que aprendo me apaixono mais. Seria interessante tirar duvidas com você :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por pachecok
      Estou iniciando em programação e tenho um trabalho em C que devo:
       
      Construir um programa que leia uma matriz 7x7 de inteiros.
      Após a leitura, calcular o somatório apenas dos elementos abaixo destacados da matriz lida.
      Mostre, os elementos destacados e o somatório.
       
      A soma deve ser entre as posições da matriz refentes a imagem em anexo. 
      É esta a dificuldade que eu encontrei, não sei os passos para realizar esta soma em específico então provavelmente a minha tentativa abaixo foi bizarra. 
       
      Alguém poderia me ajudar? Agradeço desde já. 
       
      #include<stdio.h> #include<conio.h> #define linha 7 #define coluna 7 int main (void ) { int i, j, matriz[linha][coluna], result, soma; printf ("\nDigite valor para os elementos da matriz\n\n"); for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("\nElemento[%d][%d] = ", i, j); scanf ("%d", &matriz[ i ][ j ]); } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ printf ("%i", matriz[i][j]); } printf("\n"); } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ result=result+matriz[i][j]; } } for ( i=0; i<linha; i++ ){ for ( j=0; j<coluna; j++ ){ soma=soma+matriz[3][3]+matriz[4][2]+matriz[4][3]+matriz[4][4]+matriz[5][1]+matriz[5][2]+matriz[5][3]+matriz[5][4]+matriz[5][5]+matriz[6][0]+matriz[6][1]+matriz[6][2]+matriz[6][3]+matriz[6][4]+matriz[6][5]+matriz[6][6]; } } printf("\n\nA soma de todos valores da matriz: %d\n", result); printf("\n\nA soma dos valores solicitados: %d\n", soma); }  

    • Por BCG97
      segue a baixo a questão, a minha duvida é o seguinte, como fazer a soma dos valores recebidos... onde coloca-los para receber o valor certinho, como diz na questão que cada fileira tem um valor, isso eu não entendi ainda
       
      A faculdade X pensou em montar um projeto para ajudar os acadêmicos de Engenharia da Computação a levantar dinheiro para sua formatura, a faculdade agora montou uma armário 2 linhas e 13 colunas, ou seja dois andares de armários até 13 totalizando 26 armários disponíveis.

      Sua tarefa agora é desenvolver um controle para uso de moedas para utilizar os armários.

       
       

       
      O valor determinado para cada armário é:

      Armários da fileira debaixo custam R$ 0,50

      Armários da fileira superior R$ 1,00.

      A cada armário mais distante do canto inicial é adicionado R$ 0,10 no valor.


       
      Seu programa deverá ter as funcionalidades abaixo:

      1 –  Exibir todos os armários identificando disponíveis e ocupados.

      2 –  Exibir todos os armários e o valor recebido até então.

      3 –  Utilizar armário. Para utilizar o armário deverá informar seu número da linha e da coluna. Se estiver sendo utilizado deve informar: ARMARIO OCUPADO.

      4 –  Liberar armário. Para liberar o armário deverá informar seu número da linha e da coluna. Se estiver vago deve informar: ARMARIO JÁ ESTA VAGO.

      5 –  Realizar recebimento. (Nesta funcionalidade você terá que zerar os valores recebidos e contabilizar quanto foi lucrado).

      6 – Sair. (Só poderá sair se todos os armários estiverem desocupados, ou seja, deverá realizar o recebimento antes de sair).

    • Por BCG97
      Segue abaixo um problema podendo usar vetores ou matrizes, eu não estou conseguindo fazer ele direito, se puderem me ajudar agradeceria
       
       
       
      A faculdade X pensou em adotar armários para os alunos deixarem seus materiais, da mesma forma que as universidade Americanas. Com isso, ela pensou nos alunos de Engenharia da Computação para montar a automação deste sistema. Para testar o sistema terá que controlar 10 armários. Monte um menu de opções que será exibido num display de controle conforme o exemplo abaixo e implemente as rotinas para que cada opção do menu funcione corretamente:
       
      MENU
      1 – Mostrar a situação de todos os armários, exemplo: Armario 0: Ocupado, Armario 1: Ocupado, Armario 2: Livre...
      2 – Mostrar os armários livres, exemplo: Armario 2, Armario 4, Armario 8...
      3 – Utilizar Armário: Informar o número de um armário livre e marcá-lo como ocupado, caso o armário estiver ocupada avisar o usuário ARMARIO SENDO UTILIZADO.
      4 – Remover Armário: Informar o número de um armário ocupado e fazer a liberação do armário, caso o armário estiver livre avisar o usuário ARMARIO NAO ESTA SENDO UTILIZADO.
      5 – Resumo do Armário, exemplo: 3 Armários livres, 7 Armários ocupados
      0 - Sair
       
       
      Observações: O programa deve iniciar com todos os Armários livres e o menu deve ficar em loop infinito, ou seja, depois de escolher qualquer opção deve sempre voltar ao menu. O menu deve tratar opções inválidas.
    • Por halfar
      É possível criar uma div com elemento ID como matriz?
       
      Assim: 
      <div id[1] =nome1></div> <div id[2] =nome2></div> <div id[3] =nome3></div>  
       
    • Por chrislix
      Alguem poderia me ajudar?
      estou tentando multiplicar duas matrizes, A e B
      e salvar o resultado em C
      o resultado nao ta certo, to usando thread
      so queria uma opinião para saber se ta certo o que to fazendo, pq o que ta me intrigando eh que os valores da linha da matriz C nao altera
      #include<stdio.h> #include<stdlib.h> #include<pthread.h> pthread_t thread_1; pthread_t thread_2; pthread_t thread_3; int a[3][2] = {{1, 4}, {2, 5}, {3, 6}}; int b[2][3] = {{7, 8, 9}, {10, 11, 12}}; int c[3][3] = {{1, 2, 3}, {0, 0, 0}, {0, 0, 0}}; void* tarefa_1(void *p) { printf("\nThread1\n"); for (int col = 0; col < 3; col++) { // Multiplica a linha de A pela coluna de B. for (int i = 0; i < 2; i++) { c[1][col] += a[1][i] * b[i][col]; } printf("%i\t",c[1][col]); printf("\n"); } } void* tarefa_2(void *p) { printf("\nThread2\n"); for (int col = 0; col < 3; col++) { // Multiplica a linha de A pela coluna de B. for (int i = 0; i < 2; i++) { c[2][col] += a[2][i] * b[i][col]; } printf("%i\t",c[2][col]); printf("\n"); } } void* tarefa_3(void *p) { printf("\nThread3\n"); for (int col = 0; col < 3; col++) { // Multiplica a linha de A pela coluna de B. for (int i = 0; i < 2; i++) { c[3][col] += a[3][i] * b[i][col]; } printf("%i\t",c[3][col]); printf("\n"); } } int main() { printf("Inicio das Threads...\n"); // inicia as duas threads, passando como parametroa thread e a função que cada uma deve executar pthread_create(&thread_1, NULL, tarefa_1, NULL); pthread_create(&thread_2, NULL, tarefa_2, NULL); pthread_create(&thread_3, NULL, tarefa_3, NULL); // faz com que a thread principal espere a thread 1,2,3 acabarem; pthread_join(thread_1, NULL); pthread_join(thread_2, NULL); pthread_join(thread_3, NULL); printf("resultado da tabela 3\n"); for(int i = 0;i<3; i++){ for(int j= 0; j<3;j++){ printf("%i\t ",c[i][j]); } printf("\n"); } exit(0); }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.