Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 ArranjosArranjosArranjosArranjos •• 1 di ã•• 1 dimensão •• várias dimensõesvárias dimensões 2 //Notas de um aluno Ex: Ler e armazenar as 5 notas de um aluno. //Notas de um aluno #include <stdio.h> #define LIMITE 5 int main ( )( ) { float notas[LIMITE]; // arranjo para as notas int indice; //variável de controle da repeticao ; p ... //obtem as 5 notas do aluno for (indice = 0; indice < LIMITE ; indice++)( ; ; ) scanf (“%f”, ¬as [indice]); ... return 0;; } 0 1 2 3 4 7.5 8.2 9.1 6.5 8.7Notas E D l d t ??Ex: Dez alunos de uma turmaLer e armazenar as 5 notas de cada aluno. ?? 3 ArranjosArranjosArranjosArranjos •• 1 di ã•• 1 dimensão •• várias dimensõesvárias dimensões 4Arranjo 2 dimensões Arranjo 2 dimensões ( Matriz)( Matriz) Ex: Dez alunos de uma turma Ler e armazenar as 5 notas de cada aluno.L m u . alunos 0 1 2 3 4 5 6 7 8 9NotasNotas float notas [10] [5]; 0 1 2 3 4 5 6 7 8 9 0 NotasNotas n o t a s 1 nota [7] [3] 2 3 8.5 4 5Arranjo 2 dimensões Arranjo 2 dimensões jj Linguagem CLinguagem C DeclaraçãoDeclaraçãoçç < tipo > <identificador> [ numero elementos 1a dimensão ] [ num elementos 2a dimensão] float notas [5] [10]; int x [10] [25]; Ex: Ex: int x [10] [25]; 6Arranjo 2 dimensões Arranjo 2 dimensões jj Linguagem CLinguagem C UtilizaçãoUtilizaçãoçç < nome do arranjo > [ < índice1adim>] [<índice2adim >] int main ( ) { fl t t [5] [10] Ex: Ex: float nota [5] [10]; scanf( “%f”, ¬a [2] [3]); t [1] [2] 7 5 nota [2] [1] = nota [1] [1] + 2 ; nota [1] [2] = 7.5 ; if (Nota [0] [1] > 6.0) printf (“Aprovado”); } ... Arranjo 2 dimensões Linguagem CLinguagem C Inicialização automática de um arranjo na Inicialização automática de um arranjo na declaração: vetores de vetores Exemplos: int x[2][3] = { {1,2,-1} , {2,0,3} }; char y[2][2] = { {‘a’,’h’} , {‘o’,’9’} }; char nomes[2][20]={“Jose” , ”Maria”}; 8 Ex: Ler e armazenar as 5 notas de cada um dos alunos de uma turma (10 alunos). Calcular e informar a média da 1a nota Q t s l s t m 1a t s i st médi ? //Processa notas de uma turma #include <stdio.h> #define NALUNOS 10 #define NNOTAS 5 int main ( ) Quantos alunos tem a 1a nota superior a esta média ? int main ( ) { float notas [ NALUNOS] [ NNOTAS] ; // matriz para as notas int a, n; // indices para as 2 dimensoes int cont; // contador de alunos for (a = 0; a< NALUNOS; a++) // para cada aluno for (n = 0; n < NNOTAS; n++) // obtem as 5 notas do aluno scanf (“%f” ¬as[ a] [ n]); float soma, media; // soma e media de notas ; scanf ( %f , ¬as[ a] [ n]); // Calculo da media da primeira nota soma = 0; for (a = 0; a< NALUNOS ; a++) soma = soma + notas [a] [0];soma = soma + notas [a] [0]; media = soma / NALUNOS; printf(“Media da primeira nota: %6.2f”, media); // Conta quantos alunos tem 1a nota > media da primeira nota cont = 0;cont = 0; for (a = 0; a < NALUNOS; a++) if (notas [a] [ 0] > media) cont++; printf(“Numero de alunos : %d” cont) return 0; } printf( Numero de alunos ...: %d , cont) 9Ex: Matriz inteira m (10, 3), já preenchida.Imprimir em forma de matriz! 0 1 2mm 0 1 ... for (linha = 0; linha < 10; linha++) { for (coluna = 0; coluna < 3; coluna++) 2 3 for (coluna 0; coluna < 3; coluna++) printf( “%10d”, m[linha] [coluna]); printf(“\n\n”); } 3 4 } ... Imprimir terceira coluna 5 6 ... for (linha = 0; linha < 10; linha++) printf(“%10d”, m[linha] [2]); i f(“\ \ ”) 7 8 printf(“\n\n”); ... Somar 2 em cada elemento da linha 7 8 9 Somar 2 em cada elemento da linha 7 ... for (coluna = 0; coluna < 3; coluna++) m [7] [coluna] = m [7] [coluna] + 2; ... 10Ex: Duas turmas10 alunos em cada turma 5 notas para cada aluno5 notas para cada aluno Ler e armazenar as notas de cada aluno. float nt [2] [10] [5]; alunos float nt [2] [10] [5]; nt [0][8][0] 1 0n o t a s ntnt 0 0n 9.2 ntnt 0 1 2 3 4 5 6 7 8 9 1 22 3 4 11Arranjo 3 dimensões Arranjo 3 dimensões –– Linguagem CLinguagem C DeclaraçãoDeclaração < tipo > <identificador> [ <num. elem. da 1ª dim. >] [< num. elem. da 2ª dim. >] [< num. elem. da 3ª dim. >] çç float nt [2] [10] [5];Ex: Ex: 1a dimensão 3a dimensão [ ] [ ] [ ]; 2a dimensão 12Arranjo 3 dimensões Arranjo 3 dimensões –– Linguagem CLinguagem C UtilizaçãoUtilizaçãoçç - um índice para cada dimensão; - respeitando a ORDEM da declaraçãorespeitando a ORDEM da declaração. notasalunosturmas float nt [2] [10] [5]; Ex: Ex: [ ] [ ] [ ]; referência t [t ] [ l ] [ t ] referência nt [turma] [aluno] [nota] 13Ex: 10 lojas 5 setores por lojap j 30 produtos por setor 12 meses O arranjo armazena quantidade de itens de cada O arranjo armazena quantidade de itens de cada produto vendido em cada mês, por setor e por loja. int quant_vend [11] [6] [31] [13]; loja setor produto mês #define LOJA 11#define LOJA 11 #define SETOR 6 #define PRODUTO 31 # define MÊS 13 /*li t tid d did d d t 17/*listar quantidade vendida do produto 17 em janeiro, em todos os setores da loja 6*/ for (set = 1; set<SETOR; set++) i tf( “%4d” t d [6] [ t] [17] [1] )printf( “%4d”,quant_vend [6] [set] [17] [1] ); ... 14Arranjo de “n” dimensõesArranjo de “n” dimensõesjj UtilizaçãoUtilizaçãoçç - um índice para cada dimensão - respeitando a ORDEM da declaraçãorespeitando a ORDEM da declaração turmasalunosnotas escolas float nt [ 5] [10] [3] [2 ];Ex: Ex: referência t [ t ] [ l ] [t ] [ l ] referência nt [nota] [aluno] [turma] [escola] 15 Arranjo Bidimensional Arranjo Bidimensional ––Arranjo Bidimensional Arranjo Bidimensional Operações mais comunsOperações mais comuns Dada uma matriz inteira m (TLINHA, TCOLUNA), preenchê la por leitura e imprimir:preenchê-la por leitura e imprimir: a) o maior elemento de cada linha da matriz; b) a média dos elementos de cada coluna; c) o produto de todos os elementos diferentes de ) p u m f zero; d) quantos elementos são negativos;d) quantos elementos são negativos; e) posição ocupada (linha-coluna) por um elemento cujo valor será lido pelo programacujo valor será lido pelo programa. 16a) o maior elemento de cada ) coluna da matriz: for (coluna = 0; coluna <TCOLUNA; coluna++) {{ maior = matriz[0] [coluna]; for (linha = 1; linha < TLINHA; linha++) for (linha = 1; linha < TLINHA; linha++) if (maior < matriz [linha] [coluna]) i i [li h ] [ l ]maior = matriz [linha] [coluna]; printf (“Maior da coluna %d = %d”, coluna, maior); } 17b) a média dos elementos de cada li hlinha: for (linha = 0 ; linha < TLINHA ; linha++) { somacoluna = 0;somacoluna 0; for (coluna = 0; coluna < TCOLUNA; coluna++) l t i [li h ] [ l ]somacoluna += matriz [linha] [coluna]; media = (float) somacoluna /TCOLUNA;* printf(“Media linha %d = %f”, linha, media); } } * somacoluna e tcoluna sendo inteiros, para obter-se media como float fez-se um casting e somacoluna foi considerada float na expressão, como consequência o resultado da divisão também resultou float. 18c) produto de todos os elementos ) p diferentes de zero: produto = 1;p for (linha = 0; linha < TLINHA ; linha++) for (coluna = 0; coluna < TCOLUNA; coluna++)for (coluna = 0; coluna < TCOLUNA; coluna++) if (matriz [linha] [coluna]) l lproduto = produto * matriz[linha][coluna] ; printf (“Produto = %d”, produto );p ( p ) 19d) quantos elementos são ) q negativos: i 0negativos = 0; for (linha = 0; linha <TLINHA;linha++) for (coluna = 0; coluna < TCOLUNA; coluna++) if (matriz [linha] [coluna] < 0)if (matriz [linha] [coluna] < 0) negativos++; i tf (“N d ti %d” ti )printf (“Numero de negativos = %d”, negativos); 20e) posição ocupada (linha-coluna) por p p p um elemento cujo valor será lido: scanf (“%d”, &valor);f ( , ); for (linha = 0; linha < TLINHA; linha++) for (coluna = 0; coluna < TCOLUNA; coluna++)for (coluna = 0; coluna < TCOLUNA; coluna++) if (matriz [linha] [coluna] == valor) printf (“Valor na linha: %d e coluna: %d”, linha, coluna); Exercício: Leia uma matriz quadrada (de inteiros) de ordem 10 e calcule a sua transposta. Imprima as d iduas matrizes. /* Le uma matriz inteira 10 x 10 e calcula sua transposta Entradas: matriz 10 x 10 S id i 10 10 ( d d ) */Saida: matriz 10 x 10 (transposta da entrada) */ # define TAMMAT 10 int main() {{ int m[TAMMAT][TAMMAT], t[TAMMAT][TAMMAT]; int linha, coluna; // Leitura matriz f (li h 0 li h TAMMAT li h ){for (linha = 0; linha < TAMMAT; linha++){ printf(“Entre os elementos da linha %d:\n”, linha+1); for (coluna = 0; coluna < TAMMAT; coluna++) scanf(“%d”, &m[linha][coluna]);scanf( %d , &m[linha][coluna]); } // gera a transposta for (linha = 0; linha < TAMMAT; linha++) f ( l 0 l TAMMAT l )for (coluna = 0; coluna < TAMMAT; coluna++) t[linha][coluna] = m[coluna][linha]; // Imprime matriz original // Imprime matriz transposta// Imprime matriz transposta getchar(); return 0; } 22Ex:•Armazenar os números e as notas de cada aluno de 1 turma. •Calcular média de cada aluno – armazenar, e média da turma em Calcular média de cada aluno armazenar, e média da turma em cada prova. •Informar o número do aluno de maior nota em cada prova. //Programa notas e medias #include <stdio.h> #d fi NRA UNOS 30#define NRALUNOS 30 #define NRNOTAS 3 int main ( ) {{ float nota[NRALUNOS] [NRNOTAS]; int n , a; // indices para percorrer as duas dimensoes int numero[NRALUNOS]; // numero dos alunosint numero[NRALUNOS]; // numero dos alunos float media [NRALUNOS] ; // media de cada aluno float media_provas[NRNOTAS]; // medias das provas float pos maior media;float pos_maior_media; ... 23Calcular e armazenar média de cada aluno e média da turma em cada prova. //Programa notas e medias #i l d tdi h#include <stdio.h> #define NRALUNOS 3 #define NRNOTAS 3 int main ( ) {{ float nota[NRALUNOS] [NRNOTAS]; int n , a; // indices para percorrer as duas dimensoes int numero[NRALUNOS]; // numero dos alunos fl t di [NRALUNOS] // di d d lfloat media [NRALUNOS] ; // media de cada aluno float media_provas[NRNOTAS]; // medias das provas int pos_maior_nota; ... f ( 0 NRALUNOS ) // l l d di d d lfor (a = 0; a< NRALUNOS; a++) //calculo da media de cada aluno { media [a] = 0; for (n = 0; n< NRNOTAS ; n++) di [ ] di [ ] t [ ] [ ]media [a] = media [a] + nota [a] [n]; media [a] = media [a] / NRNOTAS; } for (n= 0; n< NRNOTAS ; n++) // calculo da media da turma / prova {{ media_provas [ n ] = 0; for (a = 0; a < NRALUNOS; a++) media_provas [n] = media_provas[n] + nota[ a] [n]; di [ ] di [ ] / NRALUNOSmedia_provas [n] = media_provas [n] / NRALUNOS; } ... 24 Número do aluno com a maior nota em cada prova. //Programa notas e medias #include <stdio h>#include <stdio.h> #define NRALUNOS 3 #define NRNOTAS 3 int main ( ) {{ float nota[NRALUNOS] [NRNOTAS]; int n , a; // indices para percorrer as duas dimensoes int numero[NRALUNOS]; // numero dos alunos float media [NRALUNOS] ; // media de cada alunofloat media [NRALUNOS] ; // media de cada aluno float media_provas[NRNOTAS]; // medias das provas int pos_maior_nota; ... printf("\nNumero do aluno com a maior nota em cada prova:\n");printf( \nNumero do aluno com a maior nota em cada prova:\n ); for (n = 0; n < NRNOTAS; n++) { pos_maior_nota = 0; for (a = 1; a < NRALUNOS ; a++)for (a = 1; a < NRALUNOS ; a++) if (nota [ a ] [n] > nota [ pos_maior_nota] [n]) { printf("\n%d %d\n", pos_maior_nota, a); pos maior nota = a;pos_maior_nota = a; } printf( "\nProva %d : aluno: %d: " , n+1 , numero[pos_maior_nota]); } printf ("\nFinal de programa !\n");printf ( \nFinal de programa !\n ); return 0; } 25Ex: Armazenar os nomes e as notas de cada aluno de 1 turma. Dados do aluno 1: Nome: Ana Terra Nota 1: 7,5Nota 1: 7,5 Nota 2: 9,2 Nota 3: 8,4 Dados do aluno 2: Nome: Rodrigo Cambará Nota 1: 3,7 Nota 2: 5,2 Nota 3: 6,5 Dados do aluno 3: Nome: Bibiana Terra Cambará Nota 1: 8,3 N t 2 9 7Nota 2: 9,7 Nota 3: 4,7 26 #define NRALUNOS 30 Ex: Armazenar os nomes e as notas de cada aluno de 1 turma. #define NRALUNOS 30 #define NRNOTAS 3 int main ( ) { float nota[NRALUNOS] [NRNOTAS]; int n , a; // indices para percorrer as duas dimensoes char nome[NRALUNOS][25]; // nomes dos alunos num char < 25 int numero[NRALUNOS]; // numero dos alunos[ ]; float media [NRALUNOS] ; // media de cada aluno float media_provas[NRNOTAS]; // medias das provas int pos_maior_nota; f ( 0 < NRALUNOS ++) // d lfor (a = 0; a < NRALUNOS; a++) // para cada aluno { printf ( "\nDados do aluno %d: " , a + 1); scanf ( "%d", &numero [ a ] ); ( , [ ] ); gets(nome[NRALUNOS]); // Le nome do aluno printf ("\n Nome: "); puts (nome[NRALUNOS]); // Mostra nome do aluno for (n = 0 n < NRNOTAS n++) // para cada notafor (n = 0; n < NRNOTAS ; n++) // para cada nota { printf ( "\n Nota %d: ", n + 1); scanf ( "%f", ¬a [ a][ n ] ) ; // nota do aluno( , [ ][ ] ) ; } printf("\n\n"); } .... 27Exercícios Preencher por leitura uma matriz M (5,5). éEm seguida, calcular e imprimir a média dos elementos da diagonal principal: m[0,0] m[1 1]m[1,1] m[2,2] m[3,3] m[4,4] linha: 0 a 4linha: 0 a 4 coluna: 0 a 4 linha == coluna!!! 28//Calcula média da diagonal principal de 1 matriz quadrada #include <stdlib.h> #i l d tdi h Preencher por leitura uma matriz m (5,5) e escrever na tela: #include <stdio.h> #include <string.h> #define MAX 5 int main( )n m n( ) { float m[MAX] [MAX]; float soma, media; //somatório e média int contaelem; // para cálculo da médiaint contaelem; // para cálculo da média int lin, col, ind; // índices //leitura dos valores da matriz m: for (lin = 0; lin < MAX; lin++)for (lin = 0; lin < MAX; lin++) for (col = 0; col < MAX; col++) { printf ("\nInforme o valor [%d] [%d]: " , lin, col ); scanf ("%f" &m[lin][col]);scanf ("%f", &m[lin][col]); } //escrita da matriz m printf("\n\nMatriz lida: \n");printf( \n\nMatriz lida: \n ); for (lin = 0; lin < MAX; lin++) { for (col = 0; col < MAX; col++) i tf ("%6 2f " [li ][ l] )printf ("%6.2f ",m[lin][col] ); printf("\n"); }...... 29Somatório da diagonal principal e impressão da média: ....... // inicializa contador e acumulador soma = 0; soma = 0; contaelem = 0; //percorrendo a diagonal principal: só precisa 1 índice!!! for (ind =0; ind < MAX ; ind++) {{ soma = soma + m[ind][ind]; //soma diagonal contaelem++; }} media = soma / contaelem; printf("\nMedia: %6.2f \n", media); system("pause");system( pause ); return 0; } 30 EXTRASEXTRAS Exercícios extra classeExercícios extra classe 31Ex: Rede de 10 lojas, 40 produtos, armazenar a quantidade de itens de cada produto vendidos nos últimos 12 meses Códigos dos produtos armazenados em arranjo 12 meses. Códigos dos produtos armazenados em arranjo separado. Algoritmo LojasAlgoritmo Lojas 1. Preencher por leitura todos os dados (códigos dos produtos e matriz de vendidos). 2 Informar quantas unidades de cada produto foram vendidas em uma2. Informar quantas unidades de cada produto foram vendidas em uma determinada loja (fornecida) no último mês. 3. Informar quantas unidadesde um determinado produto (informado ódi ) f did d l j últi 6seu código) foram vendidas em cada loja nos últimos 6 meses. 4. Informar qual a loja que vendeu a maior quantidade de um determinado produto (fornecido seu código) em um determinado mês (fornecido). 5. Informar os códigos de todos os produtos dos quais não foi vendida nenhuma unidade nos últimos 2 meses. 6. Entrar com os dados de vendas de um novo mês, que será o último. Com isso, todos os dados relativos aos meses anteriores ‘avançam’ uma posição, e os dados do primeiro mês (o mais antigo) sãouma posição, e os dados do primeiro mês (o mais antigo) são perdidos 7. ... (determine novas operações sobre estes dados) 32 Ex: Rede de 10 lojas, 40 produtos, armazenar a quantidade de itens de cada produto vendido nos últimos 12 meses. Códigos dos produtos armazenados em arranjo separado. h l d d d ( ód d d j p #include <stdio h> 1. Preencher por leitura todos os dados (códigos dos produtos e matriz de vendidos) #include <stdio.h> int main ( ) { int codprod [41];int codprod [41]; int vendido [11] [41] [13]; //loja/prod/mes int ele, p, m; // indices para as 3 dimensoes int lojalida; // para armazenar numero relativo a lojaint lojalida; // para armazenar numero relativo a loja int codlido; // para armazenar codigo de produto lido ... for (ele = 1; ele < 11; ele++)for (p = 1; p < 41; p++)( ; ; ) for (p = 1; p < 41; p++) { scanf(“%d”, &codprod [p]); (p ; p ; p ) { scanf(“%d”, &codprod [p]); for (ele = 1; ele < 11; ele++)( , p [p]); for (m = 1; m<13; m++) scanf(“%d”, &vendido[ele] [p] [m]); } ( ) for (m = 1; m<13; m++) scanf(“%d”, &vendido[ele] [p] [m]); } } ...... 33 2. Informar quantas unidades de cada produto foram vendidas em uma determinada loja (fornecida) no último mês 3. Informar quantas unidades de um determinado produto (informado seu #include <stdio.h> int main ( ) f q p ( f código) foram vendidas em cada loja nos últimos 6 meses. { int codprod [41]; int vendido [11] [41] [13]; //loja/prod/mes int ele, p, m; // indices para as 3 dimensoesint ele, p, m; // indices para as 3 dimensoes int lojalida; // para armazenar numero relativo a loja int codlido; // para armazenar codigo de produto lido int quant, buscap; // contador e variável auxiliar ... scanf( “%d”, &lojalida ); // 2 - Obtem loja a ser analisada for (p=1; p<41; p++) printf (“Produto %d - loja %6d”, codprod[p], vendido[lojalida] [p] [12]); scanf( “%d”, &codlido ); // 3 - obtem o produto a ser analisado e busca o indice p for (buscap =1; buscap < 41; buscap++) // nao preve que codlido seja inexistente if (codprod[p] == codlido) p = buscap;p = buscap; for (ele = 1; ele <11; ele++) // para cada loja { quant = 0; // inicializa o contador para cada loja for (m= 7; m < 13 ; m++)for (m 7; m < 13 ; m ) quant = quant + vendido[ele] [p] [m]; printf( “Loja %d – vendidos %5d”, ele, quant) } } // fim de main 34Exercícios Preencher por leitura uma matriz M (5,5). éEm seguida, calcular e imprimir a média dos elementos das áreas assinaladas: 35Calcular e imprimir a média dos elementos da Figura 1: m[0,0] m[0,1] m[0,2] m[1,0] m[1,1] m[1,2] m[2,0] m[2,1] m[2,2] Li h 2 4 (i di 1 3)Linha: 2 a 4 (indices 1 a 3) Coluna: 2 a 4 (indices 1 à 3) //primeira figura soma1 = 0; contaelem = 0; for (lin = 1; lin < 4; lin++) for (col = 1; col < 4; col++) { soma1 = soma1 + m[lin][col]; contaelem++; } media1 = soma1 / contaelem; printf("\nMedia da figura 1: %6.2f (%d elementos considerados) \n", media1, contaelem );) ... 36Exercício 1. Uma matriz esparsa é uma matriz que tem aproximadamente 2/3 de seus elementos iguais a zero. Fazer um programa que lê (linha à linha) uma matriz esparsa me(MAXL,MAXC) contendo valores inteiros e formam m p m ( , ) f m uma matriz condensada mc, de apenas três colunas, contendo os elementos não nulos de M, de forma que: • a primeira coluna contém os valores não nulo de me;a primeira coluna contém os valores não nulo de me; • a segunda coluna contém a linha de me onde foi encontrado o valor armazenado na coluna 1; • a terceira coluna contém a coluna de me onde foi encontrado o• a terceira coluna contém a coluna de me onde foi encontrado o valor armazenado na coluna 1. Imprimir as duas matrizes, APÓS o preenchimento da matriz d d !condensada! - Determinar o número de linhas de mc faz parte do problema. - Testar o programa com os seguintes dados de entrada: 0 0 -1 0 2 -3 0 0 4 0 0 -5 0 0 0 0 0 0 6 0 0 -7 0 0 8 (linha 1) (linha 2) (linha 3) (linha 4) (linha 5) 37 //le uma matriz esparsa e gera uma matriz condensada # l d dl b h Lista de arranjos de N dimensões: p g #include <stdlib.h> #include <stdio.h> #include <string.h> #define MAXL 3 // número de linhasLista de arranjos de N dimensões:#define MAXL 3 // número de linhas #define MAXC 3 // número de colunas int main( ) {{ int lin, col, linha_cond = 0; // indices das matrizes int esparsa[MAXL][MAXC]; int condensada[(MAXL * MAXC) / 3 + 1] [3]; // linhas condensada: +-1/3[( ) ] [ ] //leitura dos dados for (lin = 0; lin < MAXL; lin++) for (col = 0; col < MAXC; col++) {{ printf("Digite o elemento [%d] [%d]: ", lin, col); scanf("%d", &esparsa[lin] [col]); }} ... 38 Lista de arranjos de N dimensões: ... // escrita da matriz esparsaLista de arranjos de N dimensões:// escrita da matriz esparsa printf("\nMatriz esparsa lida:\n"); for (lin = 0; lin < MAXL; lin++) {{ for (col = 0; col < MAXC; col++) printf("%5d", esparsa[lin] [col]); // imprime matriz alinhada por colunap p p p printf("\n"); } ...... 39ExercícioExercício// geracao da matriz condensada for (lin = 0; lin < MAXL; lin++) Lista de arranjos de N dimensões: ( ; ; ) for (col = 0; col < MAXC; col++) if (esparsa[lin] [col]) // se conteúdo diferente de zero { d d [li h d] [0] [li ] [ l]Lista de arranjos de N dimensões:condensada[linha_cond] [0] = esparsa[lin] [col]; condensada[linha_cond] [1] = lin; condensada[linha_cond] [2] = col; linha cond++; /* já deixa pronto para a próxima linha a serlinha_cond++; /* já deixa pronto para a próxima linha a ser preenchida e também informa número de linhas preenchidas */ } // escrita da matriz condensada, que tem linha cond linhas preenchidas// escrita da matriz condensada, que tem linha_cond linhas preenchidas printf("\nMatriz condensada:\n"); for (lin = 0; lin < linha_cond; lin++) printf("\n %6d %6d %6d", condensada[lin] [0] ,p ( , [ ] [ ] , condensada[lin] [1] , condensada[lin] [2]); printf ("\n\nFinal de programa !\n"); t (" ")system("pause"); return 0; } 40Exercício 2 Palíndromos são sequências de caracteres que não mudam se lidos da 2. Palíndromos são sequências de caracteres que não mudam, se lidos da esquerda para a direita ou vice-versa (2002, ANA, ACAIACA, RADAR, AMOR é ROMA, eva asse essa ave, ame o poema). Observe s d isti b s t s l t s st s b s ã que, se podem existir brancos entre os elementos, estes brancos não podem ser considerados para fins de comparação. Faça um programa que: ) l a) leia uma string; b) exclua os brancos intermediários; c) verifique se a variável string sem brancos é um palíndromo. ) q g p Algoritmo palindromos (não refinado)g p 1. inicio 2. ler linha_lida; 3. linha recebe linha lida sem os brancos // preserva entrada de dados. n n _ m n // p 3. se linha = inverso(linha) então escreva (linha_lida ,’ é um palindromo’); 4 fim4. fim. 41// Palíndroma, depois de eliminar brancos: #include <stdlib.h> #include <stdio.h> #include <string.h> #include <ctype.h> #d fi i li h 80#define size_linha 80 int main( ) { h li h lid [i li h +1] // t úd lidchar linhalida[size_linha +1], // conteúdo lido aux_linha_lida[size_linha + 2]; // para leitura com fgets char linha[81], linhainv[81]; // conteúdo convertido + invertido int i i lida i conv;int i, i_lida, i_conv; system("color f1"); do // lê, consistindo e evitando preenchimento indevido da memória: {{ ...... } while (.....); auxlinhalida[strlen(auxlinhalida) – 1] = ‘\0’; //elimina ‘\n’auxlinhalida[strlen(auxlinhalida) 1] \0 ; //elimina \n strcpy(linhalida, auxlinhalida); // monta linha, excluindo brancos digitados: .................. 42// monta linha, excluindo brancos digitados: i_conv = 0; // início da linha a ser montada, sem os brancos for (i_lida =0; i_lida < strlen(linhalida); i_lida ++) if (linhalida[i_lida] != ' ') // só copia se não for branco { li h [i ] l (li h lid [i lid ]) // i i ú llinha[i_conv] = tolower(linhalida[i_lida]); // copia como minúscula i_conv++; // se copia, atualiza o índice } li h [i ] '\0' // i l i fi li d d t i blinha[i_conv]='\0'; // inclui finalizador de string na sem brancos // opção 1: copia invertido e depois compara strings: for (i=0; i < strlen(linha); i++) // inverte conteúdo sem brancosfor (i=0; i < strlen(linha); i++) // inverte conteúdo sem brancos linhainv[i] = linha[strlen(linha)-i-1]; linhainv[i] ='\0'; // inclui finalizador de string na invertida if (strcmp(linha,linhainv) == 0) printf("\n%s eh uma palindroma!",linhalida); // imprime como digitado elseelse printf("\n%s nao eh uma palindroma!",linhalida); system("pause"); return 0;return 0; } 43// monta linha, excluindo brancos digitados: ...... //// opção 2: comparando posições : eh_pal=1; // até prova em contrário, considera como palíndromo i_inic = 0; i fim= strlen(linha) 1;i_fim= strlen(linha) - 1; // repete enquanto i_inic < i_fim e eh_pal = 1: para no meio! while (i_inic < i_fim && eh_pal== 1) // compara extremos da linha sem brancos, até chegar no meio// compara extremos da linha sem brancos, até chegar no meio if (linha [i_inic] != linha[i_fim]) eh_pal = 0; // não é palíndromo: já pode parar de comparar else { i_inic++; i_fim--; }} if (eh_pal== 1) printf("\n%s eh uma palindroma!", linhalida); // imprime como digitadodigitado else printf("\n%s nao eh uma palindroma!", linhalida); system("pause");y ( p ) return 0; }
Compartilhar