Jump to content
Fórum Script Brasil
  • 0

Problema com matrizes


Reaper

Question

Pessoal tenho o seguinte trabalho para fazer:

O seu objetivo será desenvolver um algoritmo que simule o funcionamento de um programa que extrairá dados

estatísticos de uma matriz gerada aleatoriamente.

Inicialmente, o programa solicita ao usuário que informe a dimensão da matriz. O programa então deverá gerar uma

matriz com a dimensão informada e preenchida com valores aleatórios entre 1 e 99.

Exemplo:

Dimensão da matriz: 4

Matriz gerada pelo programa:

25 12 47 20

91 84 3 7

68 75 20 78

81 25 43 36

O programa deve exibir a matriz gerada na tela depois de criada. Em seguida, o programa deve solicitar ao usuário

qual dado estatístico ele deseja saber. As opções que o programa deve fornecer são:

 Par e Impar: Nesta opção, o programa retorna a quantidade de números pares e de números impares existentes

na matriz. No exemplo, são 7 pares e 9 impares.

 Maior número: Nesta opção, o programa retorna o maior número existente na matriz. No exemplo, o número

retornado é 91.

 Menor número: Nesta opção, o programa retorna o menor número existente na matriz. No exemplo, o número

retornado é 3.

 Número que mais se repete: Nesta opção, o programa retorna o número que mais se repete dentro da matriz,

além da quantidade de vezes que ele se repete. No exemplo, o número retornado é 20 e a quantidade de vezes

é 2.

 Média: Nesta opção, o programa retorna a média aritmética dos números existente na matriz. No exemplo, o

valor retornado é aproximadamente 44,68.

 Números primos: Nesta opção, o programa retorna a quantidade de números primos existente na matriz. No

exemplo, o valor retornado é 4.

Ao fim do processamento de uma opção escolhida pelo usuário, o programa deve retornar ao menu de opções. O

programa deve possuir no menu a opção de encerrar, para que o usuário encerre a execução do programa.

Com exceção da primeira opção, todas as demais opções do programa devem ser desenvolvidas como função. A

primeira função deve ser desenvolvida como procedimento. Além disso, cada opção deve ter o seu fluxograma criado

e adicionado ao trabalho.

Eu já fiz o seguinte:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int opcao, c1, c2, c3, c4;
int i, j, num;
int matriz[i][j];

void MaiorNumero(int matriz[i][j]){
     int a;
     a = matriz[0][0];
     for(i = 0; i<num; i++)
       for(j = 0; j<num; j++){
          if (a < matriz[i][j])
             a = matriz[i][j];
       }
       printf("\nO maior numero e %d\n",a);
}
        
void MenorNumero(int matriz[i][j]){
     int a;
     a = matriz[0][0];
     for(i = 0; i<num; i++)
       for(j = 0; j<num; j++){
          if (a > matriz[i][j])
             a = matriz[i][j];
       }
       printf("\nO menor numero e %d\n",a);
     }
     
void NumeroRepete(){
     }
     
void Media(int matriz[i][j]){
     int total;
     float media; 
     
     for(i = 0; i<num; i++)
       for(j = 0; j<num; j++){
           total = total + matriz[i][j];
       }
     media = total/(i*j);
     printf("\nA media e %d\n", media);
}
      
void NumerosPrimos(int matriz[i][j]){
     
     for(i = 0; i<num; i++)
       for(j = 0; j<num; j++)
         for(int k = 0; k<matriz[i][j]; k++){
                 if (matriz[i][j] % k == 0)
                    c3++;
         }
                 if(c3 == 2)
                   c4++;
          printf("o numero de primos e %d", c4);
     }  

int main() {
    
    srand(time(NULL));
    
    printf("Bem-vindo ao programa estatistico de matrizes\n");
    printf("Digite a dimensao da matriz\n");
    scanf("%d", &num);
    
    for(i = 0; i<num; i++)
      for(j = 0; j<num; j++)
        matriz[i][j] = 0;
        
    for(i = 0; i<num; i++)
      for(j = 0; j<num; j++)
         matriz[i][j] = rand()%100;
         
     printf("A matriz gerada e :");    
         
     for(i = 0; i<num; i++)
      printf("\n");
      for(j = 0; j<num; j++)
        printf("%d", matriz[i][j]);  
    
    opcao = 1;
    
    while(opcao != 0){
       printf("1- Par ou impar\n");
       printf("2- Maior numero\n");
       printf("3- Menor numero\n");
       printf("4- Numero que mais se repete\n");
       printf("5- Media\n");
       printf("6- Numeros primos\n");
       printf("0- Sair\n");
       scanf("%d", &opcao);
    
    switch(opcao){
                  case 1:
                       for(i = 0; i<num; i++)
                        for(j = 0; j<num; j++){
                              if (matriz[i][j]%2 == 0)
                                c1++;
                              else 
                                c2++;
                        }
                       printf("Temos %d numeros pares\n", c1);
                       printf("Temos %d numeros impares\n", c2);
                       break;
                  case 2:
                       MaiorNumero(matriz[num][num]);
                       break;
                  case 3:
                       MenorNumero(matriz[num][num]);
                       break;
                  case 4:
                       NumeroRepete(matriz[num][num]);
                       break;
                  case 5:
                       Media(matriz[num][num]);
                       break;
                  case 6:
                       NumerosPrimos(matriz[num][num]);
                       break;
                  case 0:
                       return 0;
                  default: 
                       printf("Numero invalido. Digite novamente\n");
                       scanf("%d", &opcao);
                       break;
                  }                   
    }
    system("pause");   
    return 0; 
}

Como faço para declarar uma matriz com dimensões desconhecidas ?

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Você terá que declarar a matriz dinamicamente, usando malloc().

Esse código gera uma matriz dinâmica m x n

float **Alocar_matriz_real (int m, int n)
{
  float **v;  /* ponteiro para a matriz */
  int   i;    /* variavel auxiliar      */
  if (m < 1 || n < 1) { /* verifica parametros recebidos */
     printf ("** Erro: Parametro invalido **\n");
     return (NULL);
     }
  /* aloca as linhas da matriz */
  v = (float **) calloc (m, sizeof(float *));
  if (v == NULL) {
     printf ("** Erro: Memoria Insuficiente **");
     return (NULL);
     }
  /* aloca as colunas da matriz */
  for ( i = 0; i < m; i++ ) {
      v[i] = (float*) calloc (n, sizeof(float));
      if (v[i] == NULL) {
         printf ("** Erro: Memoria Insuficiente **");
         return (NULL);
         }
      }
  return (v); /* retorna o ponteiro para a matriz */
}
Se quiser aumentar o tamanho da matriz posteriormente você deve usar o realloc. Não se esqueça de liberar a matriz ao termino do programa:
float **Liberar_matriz_real (int m, int n, float **v)
{
  int  i;  /* variavel auxiliar */
  if (v == NULL) return (NULL);
  if (m < 1 || n < 1) {  /* verifica parametros recebidos */
     printf ("** Erro: Parametro invalido **\n");
     return (v);
     }
  for (i=0; i<m; i++) free (v[i]); /* libera as linhas da matriz */
  free (v);      /* libera a matriz */
  return (NULL); /* retorna um ponteiro nulo */
}

Os código podem parecer complicados no inicio, procure algum livro que explique mais detalhadamente, assim você irá entender melhor ;D

Link to comment
Share on other sites

  • 0

Valeu General Shepherd. Aproveitando o tópico como faço para fazer estas duas funções:

Número que mais se repete: Nesta opção, o programa retorna o número que mais se repete dentro da matriz,

além da quantidade de vezes que ele se repete. No exemplo, o número retornado é 20 e a quantidade de vezes

é 2.

Números primos: Nesta opção, o programa retorna a quantidade de números primos existente na matriz. No

exemplo, o valor retornado é 4.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...