Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com matrizes


Reaper

Pergunta

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 para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...