Ir para conteúdo
rafael_iftm

Matrizes

Recommended Posts

Prezados,se alguém puder me ajudar neste seguinte problema...

 

Faça um programa que crie uma matriz de inteiros 5x5 e receba os valores para preenchê-la via teclado,
 não é permitido a entrada de números repetidos. Após receber todos os valores, o programa deve encontrar o maior
 e o menor número dentro da matriz e mostrar a localização de cada um deles (linha e coluna).
 

Meu código está incompleto, mas nesta primeira parte está dando erro,   obrigado.

 

int main()
{
    int matriz[5][5]; //declaracao das variaveis.
    int l=0,c=0,aux[5][5];
    for(l=0;l<5;l++) //inicializar a matriz com zero
        {
            for(c=0;c<5;c++)
            {
                matriz[5][5]=0;
                aux[5][5]=0;
            }
        }
        for(l=0;l<5;l++)  //receber e validar os valores
        {
            for(c=0;c<5;c++)
            {
                printf("Informe o valor do elemento ==> linha: %i , coluna: %i\n",l+1,c+1);
                scanf("%i",&matriz[l][c]);
                 aux[l][c]=matriz[l][c];
                 if(matriz[l][c]==aux[l][c])
                 {
                     printf("Numero repetido,digite outro:\n");
                     scanf("%i",&matriz[l][c]);
                 }
             }
        }
        for(l=0;l<5;l++)        //exibir a matriz
        {
            for(c=0;c<5;c++)
            {
                printf("\t%i",matriz[l][c]);
            }
            printf("\n");
        }
  return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde exatamente dá o erro?

Já experimentou trocar o %i por %d no scanf?

  • -1 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola @rafael_iftm, segue o código com algumas correções, só falta terminar a parte de achar o menor. Qualquer duvida manda msg aew.

 

#include <stdio.h>

int main()
{
    int matriz[5][5]; //declaracao das variaveis.
    int l=0,c=0,aux[5][5];
	
    for(l=0;l<5;l++) //inicializar a matriz com zero
	{
		for(c=0;c<5;c++)
		{
			// matriz[5][5]=0; <<<< 1- uma matriz de 5x5 vai de 0 a 4, o indice [5][5] esta fora da matriz
			// aux[5][5]=0; <<<< 2- tanto na matriz quando no aux, você so inicia o indicie[5][5] com zero  25 vezes ...
			
			matriz[l][c] = 0;
			aux[l][c] = 0;
			
		}
	}
	
    for(l=0;l<5;l++)  //receber e validar os valores
	{
		for(c=0;c<5;c++)
		{
			printf("Informe o valor do elemento ==> linha: %i , coluna: %i\n",l+1,c+1);
			scanf("%i", &matriz[l][c]);
			
			// aux[l][c]=matriz[l][c]; <<<< nao preciso do aux
			
			 // if(matriz[l][c]==aux[l][c]) <<<< Isso nao faz sentido, em cima você diz q aux é igual a matriz, e aki verifica se eles sao iguais? vai entrar toda vez nesse if
			 // {
				 // printf("Numero repetido,digite outro:\n");
				 // scanf("%i",&matriz[l][c]);
			 // }
			 
			 //VERIFICA SE O NUMERO JA EXISTE
			 register int i;
			 
			 for(i = 0; i < (l*5) + c; i++)
				if( *(*matriz + i) == matriz[l][c] )// <<<<< Tratando a matriz como um vetor e caminhando pela sua posicao na memoria
				{
					printf("Numero repetido, tente novamente.\n");
					c--;
				}
		 }
	}
	
	for(l=0;l<5;l++)        //exibir a matriz
	{
		for(c=0;c<5;c++)
		{
			printf("\t%i",matriz[l][c]);
		}
		printf("\n");
	}
	
	return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

rafael_iftm após o programa entrar nos dois laços que fazem a leitura dos elementos da matriz representados por linha e coluna ele faz uma comparação para ver se o elemento digitado e armazenado na matriz principal é igual ao elemento que está na matriz auxiliar e se for o programa vai dizer que o número está repetido e que é para o usuário digitar outro porém ele sempre irá dizer que o número digitado é repetido mesmo que ele não seja pois toda vez que ele lê um valor digitado tanto a matriz principal quanto a auxiliar recebem esse mesmo valor e após isso é feita a comparação para ver se o valor dos dois é igual o que resultará sempre em verdadeiro. Isso não é um erro de programação mas é um erro de lógica. Outro erro de lógica que tem nesse mesmo programa é que mesmo que o usuário digite números repetidos o programa nem sempre irá exibir o aviso e nem pedir para digitar de novo pois mesmo com a lógica errada ele só compara uma vez para ver se o valor é repetido e após isso pula para a leitura e armazenamento do valor da próxima posição da matriz sem verificar. Para consertar o programa devemos fazer uma rotina de verificação que compara o último valor digitado com todos os anteriores já armazenados na matriz e então ver se há algum igual. O programa do Nefisto está funcionando certinho e já inclui essa rotina de verificação porém como ele mesmo diz falta a rotina de verificação do menor valor da matriz e também do maior. Aqui vai um código que mostra como achar e mostrar o menor e o maior valor dessa matriz e suas respectivas posições:

int main(){
  int matriz[5][5],i,j,guarda_i,guarda_j,menor=32768,maior=0;
  /*Assumimos aqui que todos os valores digitados e sem repetidos
  ja estao guardados na variavel matriz para que eu nao precise 
  aqui refazer o programa todo*/
  for(i=0;i<5;i++)
    for(j=0;j<5;j++)
      if(matriz[i][j]<menor){
        menor=matriz[i][j];
        guarda_i=i;
        guarda_j=j;
      }
  printf("O menor valor e %d nas posicoes %d e %d",matriz[i][j],guarda_i,guarda_j);
  for(i=0;i<5;i++)
    for(j=0;j<5;j++)
      if(matriz[i][j]>maior){
        maior=matriz[i][j];
        guarda_i=i;
        guarda_j=j;
      }
  printf("\nO maior valor e %d nas posicoes %d e %d",matriz[i][j],guarda_i,guarda_j);
  system("pause");
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

  • Conteúdo Similar

    • Por Xinitrc
      Estou fazendo ainda em design uma calculadora de decimo terceiro salário em QT Creator com linguagem C com GTK.
       
      Tem 3 TextEdit
      Tem 3 Labels
      Tem 3 Buttons
       
      Botão Calcular
      Botão Apagar
      Botão Sair
       
      O botão calcular deve calcular da seguinte maneira
       
      TextEdit3=TextEdit1 * TextEdit2/12, que vai dar o decimo terceiro salário,a logica está certa,mas não está funcionando meu programa no QT Creator.
       
      Alguém pode me ajudar?
    • Por JoaoV-26
      olá,
       
      Eu preciso fazer uma matriz 7x7 que imprima caractere 'x' e 'o' porém o x precisar ser nas duas diagonais, fazer a matriz e imprimir o x em uma diagonal eu consegui porém não estou conseguindo de jeito nenhum imprimir na outra diagonal, a matriz precisa sair assim: 
       
      x o o o o o x
      o x o o o x o
      o o x o x o o 
      o o o x o o o
      o o x o x o o
      o x o o o x o
      x o o o o o x
       
      a minha está saindo assim (foto em anexo)
       
      Meu código:

       
      #include<stdio.h> int main(){          int i, j;     char str[2]="x", str1[2]="o";                for(i=1; i<=7; i++){         for(j=1;j<=7; j++)              if(i+j == 7+1){                      printf("%s", str);                      }else                      printf("%s", str1);                      printf("\n");          }      } Alguém pode me ajudar, como faço para outra diagonal sair 'x' também ?????

    • Por llucaahenri
      Bom dia!
      Sou iniciante nessa área de programação, estou aprendendo sobre vetores e matrizes e gostaria de saber como faço para calcular elementos de um vetor e de uma matriz, eu tentei fazer usando laço For, mas não consegui.
      Esse exercício que estou tentando fazer.  
      Leia um vetor de 12 posições e em seguida ler também dois valores X e Y quaisquer correspondentes a duas posições no vetor. Ao final seu programa deverá escrever a soma dos valores encontrados nas respectivas posições X e Y.
      Meu código!
       
      #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() {     setlocale(LC_ALL, "Portuguese");     int VetorX[12], VetorY[12];     int Result, X, Y, i, j;     for(i = 1; i < 13; i++){ // Ler os Valores;         printf("[%d] Digite um número do Vetor X. \n", i);         scanf("%d", &X);     }     for(i = 1; j < 13; j++){ // Ler os Valores;         printf("[%d] Digite um número do Vetor Y. \n", j);         scanf("%d", &Y);     }         for(i = 0; i < 13; i++){             Result =+ VetorX;             printf("O resultado é%d", Result);         }     return 0; }
       
    • Por thisis_paulo
      Olá pessoal, sou iniciante tanto aqui no fórum tanto na linguagem c++.
      Estou tentando resolver o seguinte algoritmo:
       
      Calcule as médias das notas escolares de um aluno (media 1º bimestre, media 2º bimestre, media final) sendo que:
      As notas das provas parciais 1 e 2 equivalem a 30% da nota total do bimestre 1 e 2;
      As notas das provas oficiais 1 e 2 equivalem a 70% da nota total do bimestre 1 e 2;
      A nota total do bimestre 1 equivale a 40% da nota final do semestre;
      A nota total do bimestre 2 equivale a 60% da nota final do semestre;
       
      Utilize structs para armazenar a notas e medias e referencie cada elemento por ponteiros no main.
       
      Segue abaixo, a minha tentativa.
      Não estou conseguindo guardar as notas pedidas no main no vetor de notas dentro da struct, estou usando cin para fazer isso, uma solução mais adequada para realizar este procedimento?
       
      - Biblioteca
      typedef struct notas { float parcial[2], *p1, *p2; float oficial[2], *of1, *of2; float exame, *ex; } NotasProvas; void NotaBim1 (NotasProvas &notas, float *p1, float *of1); void NotaBim2 (NotasProvas &notas, float *p2, float *of2); void NotaExame (NotasProvas &notas, float *ex); typedef struct medias { float mediaB1, mediaB2, *m1, *m2; float notaFinal, *nf; float notaTotal, *nt; } MediasNotas; void MediaBim1 (MediasNotas &medias, float *m1); void MediaBim2 (MediasNotas &medias, float *m2); void MediaFinal (MediasNotas &medias, float *m1, float *m2); void MediaTotal (MediasNotas &medias, float *nf, float *ex);  
      - Procedimentos 
      #include "notas.h" void NotaBim1 (NotasProvas &notas, float *p1, *of1) { *p1 = &NotasProvas.parcial[1]; *of1= &NotasProvas.oficial[1]; MediasNotas.mediaB1 = (p1 * 0.3) + (of1 * 0.7); } void NotaBim2 (NotasProvas &notas, float *p2, *of2) { *p2 = &NotasProvas.parcial[2]; *of2 = &NotasProvas.oficial[2]; MediasNotas.mediaB2 = (p2 * 0.3) + (of2 * 0.7); } void MediaFinal (MediasNotas &medias, float *m1, *m2) { *m1 = &MediasNotas.mediaB1; *m2 = &MediasNotas.mediaB2; MediasNotas.notaFinal = (m1 * 0.4) + (m2 * 0.6); } void MediaTotal (MediasNotas &medias, float *nf, *ex) { *nf = &MediasNotas.notaFinal; *ex = &NotasProvas.exame; MediasNotas.notaTotal = (nf + ex) / 2; } - Função Main
      #include <iostream> #include "notas.h" using namespace std; int main() { cout << "\t\t CALCULANDO NOTAS " << endl; cout << endl; cout << "Qual a sua nota da Prova Parcial 01? " << endl; cin >> NotasProvas.p1; cout << "Qual a sua notas da Prova Oficial 01? " << endl; cin >> NotasProvas.of1; cout << "Nota do 1º bimestre: " << MediasNotas.m1 << endl; cout << "\t\t Segundo Bimestre" << endl; cout << endl; cout << "Qual a sua nota na Prova Parcial 02? " << endl; cin >> NotasProvas.p2; cout << "Qual a sua nota na Prova Oficial 02? " << endl; cin >> NotasProvas.of2; cout << "Nota do 2º bimestre: " << MediasNotas.m2 << endl; cout << "Media Final: " << MediasNotas.nf << endl; system("PAUSE"); return 0; } Desde já, agradeço pelas ajudas!
       
       
       
       
       
×

Informação importante

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