Ir para conteúdo

Arquivado

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

caaaike

Matriz em C++

Recommended Posts

Escreva um programa que carrega uma matriz de M x N com M e N lidos pelo teclado com números aleatórios compreendidos entre 1 e 400. Considere o produto M x N<=300. Em seguida escreva um procedimento para carregar e imprimir o conteúdo da matriz.Em seguida implemente os seguintes procedimentos tendo como parâmetro a matriz carregada:

  1. Um procedimento para verificar e imprimir a quantidade de vezes que cada numero aparece na matriz; os números que não aprecem não devem ser impresso com quantidade zero

  2. Uma função que calcula a soma dos 2 menores números contidos na matriz;

  3. Uma função que calcula a diferença entre os dois maiores números contidos nos vetores (1o maior – 2o maior)

  4. Um metodo que imprima o numero que mais se aproxima da media dos elementos da matriz, informando sua posição na matriz

Bom, o professor deu a biblioteca e mandou fazer isso.

To com duvida, sei a ideia mais ou menos de como fazer, mas ja tentei algumas coisas e da erro.

#include <iostream>
#include <cstdlib>
#include <time.h>
#include "bibliotecaMatriz.h"


void vezes(int m[][tam],int l, int coluna,int menor, int maior);

int main(){
	srand(time(NULL));
	const int linhas = 1000;
	int m[linhas][tam], linha, coluna, menor, maior;
	cout<<"Quantas linhas tem a matriz: ";
	cin>>linha;
	cout<<"Quantas colunas tem sua matriz: ";
	cin>>coluna;
	cout<<"Qual o menor numero da matriz: ";
	cin>>menor;
	cout<<"Qual o maior numero da matriz: ";
	cin>>maior;
	
	carrega_com_repeticao(m,linha,coluna,menor,maior);
	vezes(m,linha,coluna,menor,maior);
}
void vezes(int m[][tam],int linha, int coluna,int menor, int maior){
	for (int k = menor; k<=maior; k++){
	   int conta = 0;
	   for (int i = 0; i<linha; i++)
	     for (int j = 0; j<coluna; j++)
	       if (m[i][j] == k)
	          conta++;
		 if (conta>2) 
		     cout<<"numero "<<k<<" aparece "<<conta<<" vezes\n"; 	
		
	}
	   
}

biblioteca,

#include<iostream>
using namespace std;
const int tam=50;
//prototipos:
void imprimematriz(int [][tam],int, int);
void ordenamatriz(int [][tam],int,int);
void carrega_com_repeticao(int [][tam],int,int,int,int);
void carrega_sem_repetir(int [][tam],int,int,int,int);
void pesquisa(int [][tam],int,int,int);
bool existe1(int [][tam],int,int,int,int,int);
//codigos dos prototipos
//imprime matriz[x][tam]
void imprimematriz(int f[][tam],int x, int y){
   for (int i=0;i<x;i++){
     if (i+1<10) //mostra o numero da linha alinhando pela direita   
        cout<<"   "<<i+1<<" - ";
     else
        if(i+1<100)
           cout<<"  "<<i+1<<" - ";
        else
           if(i+1<1000)
              cout<<" "<<i+1<<" - ";
           else
              cout<<i+1<<" - ";           
     for (int j=0;j<y;j++)
         if(f[i][j]<10)
            cout<<' '<<f[i][j]<<' ';
         else   
            cout<<f[i][j]<<" ";   
     cout<<'\n';
   }
}
//ordena linhas da matriz[lin][col]
void ordenamatriz(int x[][tam],int lin,int col){
   int aux;
   for(int k=0; k<lin;k++)   
      for (int i=0;i<col-1;i++)
         for (int j=i+1;j<col;j++)
             if (x[k][j]<x[k][i]){
                aux=x[k][i];
                x[k][i]=x[k][j];
                x[k][j]=aux;
             }
}         
//carrega a matriz[lin][col] com repetição na linha com valores de minimo ate maximo
void carrega_com_repeticao(int x[][tam],int lin,int col, int minimo,int maximo){
   int raiz=maximo-minimo+1;
   for (int i=0;i<lin;i++)   
      for (int j=0;j<col;j++)
         x[i][j]=rand()%raiz+minimo;//NUMEROS ENTRE minimo e maximo
     ordenamatriz(x,lin,col);
     imprimematriz(x,lin, col); 
}
//carrega a matriz sem repetir na linha com valores entre minimo e maximo
void carrega_sem_repetir(int v[][tam],int l, int c, int minimo, int maximo){
   int raiz=maximo-minimo+1;
   for(int i=0;i<l;i++){
     v[i][0]=rand()%raiz+minimo;
     for(int j=1;j<c; j++){
          v[i][j]=rand()%raiz+minimo;
          if (existe1(v,l,c,i,j,v[i][j]))
             j--;
     }
   }
   ordenamatriz(v,l,c);
   imprimematriz(v,l,c);
}
//pesquisa as linha da matriz[lin][col] que contem o numero num
void pesquisa(int x[][tam],int lin,int col, int num){
   for (int i=0;i<lin;i++)   
      for (int j=0;j<col;j++)
         if(x[i][j]==num)//mostra as linhas que contem o numero num
             cout<<num<<" esta na posicao "<<j+1<<" da linha "<<i+1<<"\n";
}
bool existe1(int x[][tam],int lin,int col,int linha, int coluna,int num){
      for (int k=0;k<coluna;k++)
         if(x[linha][k]==num)//linha i coluna j=num
             return 1;
   return 0; 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

mas ja tentei algumas coisas e da erro

 

O que acontece? Qual erro dá? O que o compilador diz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

O que acontece? Qual erro dá? O que o compilador diz?

consegui fazer umas coisa, como que faço pra descobrir os 2 menores numeros?

pra descobrir o menor..

 

 

int minimo(int m[][tam],int linha, int coluna){
int menor=m[0][0];
for(int i=0;i<linha;i++)
for(int j=0;j<coluna;j++){
if(menor>m[j])
menor = m[j];
}
return menor;
}

e o segundo menor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

declare a variável int m[linhas][tam]; depois de vc obter os valores das variáveis, linha coluna, algumas vezes ele trava por causa da locação de memoria. algumas vezes vc tentar alocar memoria sem passar o tamanho que precisa pode travar a execução do programa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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