Magux 0 Denunciar post Postado Maio 26, 2009 Sou estudante de matemática na minha primeira cadeira de algoritmo e programação, quase ficando maluco. Vão com calma pq tem matérias que eu ainda não conheço. (A próxima matéria é alguma coisa a ver com quick bubble, algo assim). Professor nos passou essa lista e muitos exercícios já resolvi mas tenho algumas dúvidas pontuais. Se puderem e tiverem a paciência para me ajudar, agradeço. Vou postar tudo que eu fiz, pq de repente se alguém está fazendo essa lista em C++ já fica a resposta. Segue a lista de exercícios: Lista de Exercícios – Matrizes Exercício 1 • Escrever um algoritmo para armazenar valores inteiros em uma matriz (5,6). A seguir, calcular a média dos valores pares contidos na matriz e escrever seu conteúdo. Exercício 2 • Escrever um algoritmo para ler uma matriz (7,4) contendo valores inteiros (supor que os valores são distintos). Após, encontrar o menor valor contido na matriz e sua posição. Exercício 3 • Escreva um algoritmo que le uma matriz M(5,5) e calcula as somas: a) da linha 4 de M. B) da coluna 2 de M. c) da diagonal principal. d) da diagonal secundária. e) de todos os elementos da matriz. Escreva estas somas e a matriz. Exercício 4 • Escrever um algoritmo que lê uma matriz M(5,5) e cria 2 vetores SL(5), SC(5) que contenham respectivamente as somas das linhas e das colunas de M. Escrever a matriz e os vetores criados. Exercício 5 • Escrever um algoritmo que lê duas matrizes N1(4,6) e N2(4,6) e cria: a) Uma matriz M1 que seja a soma de N1 e N2 B) Uma matriz M2 que seja a diferença de N1 com N2 Escrever as matrizes lidas e calculadas. Exercício 6 • Escrever um algoritmo que lê uma matriz M(6,6) e calcula as somas das partes hachuradas. Escrever a matriz M e as somas calculadas. Exercício 7 • Escreva um algoritmo que ordene os elementos de cada linha de uma matriz M[10,10]. Bonus Track • Na teoria de Sistemas define-se elemento minimax de uma matriz, o menor elemento da linha em que se encontra o maior elemento da matriz. Escrever um algoritmo que lê uma matriz A(10,10) e determina o elemento minimax desta matriz, escrevendo a matriz A e a posição do elemento minimax. EXERCíCIO 1: #include <stdio.h> #include <stdlib.h> #include <math.h> int main (void){ int M[5][6]; int i,j,x; float par; x=0; par=0; //Montando uma Matriz M insirindo valores, acumulando em "par" se o valor for par e com um contador x, coloquei a opção de núemros randômicos até 20 para teste: for(i=0;i<5;i++){ for(j=0;j<6;j++){ //M[i][j]= rand()%20; printf("Insira M[%d][%d]:",i,j); scanf("%d",&M[i][j]); if ("M[i][j]%2==0"){ par= (par+M[i][j]); x= (x+1); }}} //Calculando a média e imprimindo: par= (par/x); printf(" \n A media dos numeros pares e: %d \n\n",par); //Escrevendo o conteúdo da matriz: for(i=0;i<5;i++){ for(j=0;j<6;j++){ printf(" M[%d][%d]=[%d]\n ",i,j,M[i][j]); }} system("pause"); //Para quem usa o DevC++ return(0); } EXERCÍCIO 2 COMO FAÇO PARA TER CERTEZA QUE O VALOR INSERIDO SEJA ÚNICO???? #include <stdio.h> #include <stdlib.h> #include <math.h> int main (void){ int M[7][4]; int i,j,m,pi,pj; //Montando uma Matriz M insirindo valores, coloquei a opção de números randômicos até 20 para teste: for(i=0;i<7;i++){ for(j=0;j<4;j++){ //M[i][j]= rand()%20; printf("Insira M[%d][%d]:",i,j); scanf("%d",&M[i][j]); }} //Achando e escrevendo o menor e sua posição: m= M[0][0]; for(i=0;i<7;i++){ for(j=0;j<4;j++){ if (M[i][j]<m){ m= M[i][j]; pi= i; pj= j; }}} printf("O menor valor é M[%d][%d]=%d.",pi,pj,M[pi][pj]); system ("pause"); //Para DevC++ return(0); } EXERCÌCIO 3 #include <stdio.h> #include <stdlib.h> #include <math.h> int main (void){ int M[5][5]; int i,j,l4,c2,dp,ds,soma; l4= 0; //soma da linha4 c2= 0; //soma da coluna2 dp= 0; //soma da diag princ ds= 0; //soma da diag sec soma= 0; //soma total //Montando uma Matriz M insirindo valores, coloquei a opção de números randômicos até 20 para teste, e já relacioando as respectivas somas dentro do laço: for(i=0;i<4;i++){ for(j=0;j<4;j++){ //M[i][j]= rand()%20; printf("Insira M[%d][%d]:",i,j); scanf("%d",&M[i][j]); if (i==3){ //lembrando que em C++ o número da coluna-linha é um a menos pq começa no 0 ao invés do 1 l4= l4+M[i][j];} if (j==1){ c2= c2+M[i][j];} if (i==j){ dp= dp+M[i][j];} if (i+j==4){ ds= ds+M[i][j];} soma = soma+M[i][j]; }} //Imprimindo as somas: printf("\n A soma da linha4 e: %d",l4); printf("\n A soma da coluna 2 e: %d",c2); printf("\n A soma da diagonal principal e: %d",dp); printf("\n A soma da daigonal secundaria e: %d",ds); printf("\n A soma total e: %d \n",soma); //Mostrando a matriz: for(i=0;i<4;i++){ for(j=0;j<4;j++){ printf(" M[%d][%d]= %d \n",i,j,M[i][j]); }} system ("pause"); //Para DevC++ return(0); } EXERCÌCIO 4 #include <stdio.h> #include <stdlib.h> #include <math.h> int main (void){ int M[5][5]; int SL[5]; int SC[5]; int i,j,x; //Laço para zerar todos os campos dos vetores usados for(i=0;i<4;i++){ SL[i]= 0; SC[i]= 0; } //Montando uma Matriz M insirindo valores, coloquei a opção de números randômicos até 20 para teste: for(i=0;i<4;i++){ for(j=0;j<4;j++){ //M[i][j]= rand()%20; printf("Insira M[%d][%d]:",i,j); scanf("%d",&M[i][j]); SL[i]= SL[i]+M[i][j]; SC[j]= SC[j]+M[i][j]; }} //Mostrando a matriz: for(i=0;i<4;i++){ for(j=0;j<4;j++){ printf("M[%d][%d]= %d \n",i,j,M[i][j]); }} //Mostrando so Vetores: for(i=0;i<4;i++){ printf(" Somatorio da Linha %d= %d \n",i,SL[i]); printf(" Somatorio da Coluna %d= %d \n",i,SC[i]); } system ("pause"); //Para DevC++ return(0); } EXERCÍCIO 5 #include <stdio.h> #include <stdlib.h> #include <math.h> int main (void){ int N1[4][6]; int N2[4][6]; int M1[4][6]; int M2[4][6]; int i,j; //Montando uma Matriz N1 insirindo valores, coloquei a opção de números randômicos até 20 para teste: for(i=0;i<4;i++){ for(j=0;j<6;j++){ //N1[i][j]= rand()%20; printf("Insira N1[%d][%d]:",i,j); scanf("%d",&N1[i][j]); }} //Montando uma Matriz N2 insirindo valores, coloquei a opção de números randômicos até 20 para teste: for(i=0;i<4;i++){ for(j=0;j<6;j++){ printf("Insira N2[%d][%d]:",i,j); //N2[i][j]= rand()%20; scanf("%d",&N2[i][j]); }} //Somando as matrizes: for(i=0;i<4;i++){ for(j=0;j<6;j++){ M1[i][j]= N1[i][j]+N2[i][j]; }} //Diferença entre as matrizes: for(i=0;i<4;i++){ for(j=0;j<6;j++){ M2[i][j]= N1[i][j]-N2[i][j]; }} //Mostrando as matrizes N1: for(i=0;i<4;i++){ for(j=0;j<6;j++){ printf("\n N1[%d][%d]= %d",i,j,N1[i][j]); }} //Mostrando as matrizes N2: for(i=0;i<4;i++){ for(j=0;j<6;j++){ printf("\n N2[%d][%d]= %d",i,j,N2[i][j]); }} //Mostrando as matrizes M1: for(i=0;i<4;i++){ for(j=0;j<6;j++){ printf("\n M1[%d][%d]= %d",i,j,M1[i][j]); }} //Mostrando as matrizes M2: for(i=0;i<4;i++){ for(j=0;j<6;j++){ printf("\n M2[%d][%d]= %d",i,j,M2[i][j]); }} system ("pause"); //Para DevC++ return(0); } EXERCÌCIO 7 ESSE EU TRAVEI... #include <stdio.h> #include <stdlib.h> #include <math.h> int main (void){ int M[10][10]; int i,j,k,c,b,menor; //Montando uma Matriz M insirindo valores, coloquei a opção de números randômicos até 20 para teste: for(i=0;i<10;i++){ for(j=0;j<10;j++){ //rand()%20; printf("Insira M[%d][%d]:",i,j); scanf("%d",&M[i][j]); }} //Mostrando a matriz: for(i=0;i<10;i++){ for(j=0;j<10;j++){ printf("M[%d][%d]= %d \n",i,j,M[i][j]); }} //Montando uma cadeia de ciclos para ordenar por linha, sendo que ele vai achar o menor e de posição com o mais a esquerda que ainda não foi mexido: for (i=0;i<10;i++){ for (j=0;j<10;j++){ c= M[i][j]; menor= M[i][0]; for (k=j;k<10;k++){ if (M[i][k]<menor){ menor = M[i][k]; b= k;}} M[i][j]= menor; M[i][b]= c;}} //Mostrando a matriz: for(i=0;i<10;i++){ for(j=0;j<10;j++){ printf("M[%d][%d]= %d \n",i,j,M[i][j]); }} system ("pause"); return(0); } ALGUMA IDÈIA SOBRE OS OUTROS? ASSIM QUE EU CONSEGUIR ALGUM OUTRO EU POSTO AQUI! As idéias eu tirei de POST VISUALG só adaptei pra C++. Compartilhar este post Link para o post Compartilhar em outros sites
VictorCacciari 42 Denunciar post Postado Maio 26, 2009 Charles Arnoud Poste só o que você tem duvidas... No exercício 2, para saber se o valor ja foi inserido faça uma busca na matriz, por exemplo: #include <stdio.h> #include <stdlib.h> #include <math.h> int procura_na_matriz(int valor, int matriz[7][4]) { int i, j; for (i=0; i<7; i++) for (j=0; j<4; j++) if (matriz[i][j] == valor) return 1; return 0; } int main (void){ int M[7][4]; int i,j,m,pi,pj; //inicializando a matriz, com zeros for (i=0; i<7; i++) for (j=0; j<4; j++) M[i][j] = 0; //Montando uma Matriz M insirindo valores, coloquei a opção de números randômicos até 20 para teste: for(i=0;i<7;i++){ for(j=0;j<4;j++){ //M[i][j]= rand()%20; printf("Insira M[%d][%d]:",i,j); scanf("%d",&m); while (procura_na_matriz(m, M)) { printf("Insira novamente:"); scanf("%d", &m); } M[i][j] = m; }} //Achando e escrevendo o menor e sua posição: m= M[0][0]; for(i=0;i<7;i++){ for(j=0;j<4;j++){ if (M[i][j]<m){ m= M[i][j]; pi= i; pj= j; }}} printf("O menor valor é M[%d][%d]=%d.",pi,pj,M[pi][pj]); return 0; } Compartilhar este post Link para o post Compartilhar em outros sites
Magux 0 Denunciar post Postado Maio 26, 2009 A idéia de postar os que eu consegui é ajudar a outras pessoas a encontrar uma idéia sobre esses exercícios que são bem populares entre os professores de programação básica de algoritmo. Não gostaria de usar outro int, entraremos nessa matéria depois de ver quicksort e outras dessas existe uma maneira (mesmo burra) de fazer essa verificação dentro do programa principal? Compartilhar este post Link para o post Compartilhar em outros sites
Magux 0 Denunciar post Postado Junho 1, 2009 Só me explica pq não consigo inserir o nº 8 nos campos... Existe algum tipo de gerador aleatório que não gere valores repetidos ? #include <stdio.h> #include <stdlib.h> #include <math.h> int teste(int valor, int matriz[7][4]){ int i,j; for (i=0;i<7;i++) for (j=0;j<4;j++) if (matriz[i][j]==valor) return 1; return 0; } int main (void){ int M[7][4]; int i,j,m,pi,pj; //Montando uma Matriz M inserindo valores, sem opção para teste pois não fuciona com o programa for(i=0;i<7;i++){ for(j=0;j<4;j++){ printf("Insira M[%d][%d]:",i,j); scanf("%d",&m); while (teste(m, M)){ printf("Insira novamente:"); scanf("%d", &m);} M[i][j] = m; }} //Achando e escrevendo o menor e sua posição: m= M[0][0]; for(i=0;i<7;i++){ for(j=0;j<4;j++){ if (M[i][j]<m){ m= M[i][j]; pi= i; pj= j; }}} printf("O menor valor e M[%d][%d]=%d.",pi,pj,M[pi][pj]); system ("pause"); //Para DevC++ return(0); } Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites