Reaper Posted March 15, 2012 Report Share Posted March 15, 2012 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: 4Matriz gerada pelo programa: 25 12 47 2091 84 3 768 75 20 7881 25 43 36O 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 ? Quote Link to comment Share on other sites More sharing options...
0 General Shepherd Posted March 15, 2012 Report Share Posted March 15, 2012 Você terá que declarar a matriz dinamicamente, usando malloc().Esse código gera uma matriz dinâmica m x nfloat **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 Quote Link to comment Share on other sites More sharing options...
0 Reaper Posted March 16, 2012 Author Report Share Posted March 16, 2012 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. Quote Link to comment Share on other sites More sharing options...
Question
Reaper
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:
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
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.