Universidade Federal d Vale d Sã Francisc Curs de Engenharia da Prduçã / Elétrica Parte 09 Prf. Jrge Cavalcanti jrge.cavalcanti@univasf.edu.br www.univasf.edu.br/~jrge.cavalcanti www.twitter.cm/jrgecav 1 Vetres Estrutura de Dads Hmgênea e Estática Unidimensinal Exempl : Prédi cm um apartament pr andar Cnjunt habitacinal cm apenas uma rua Tds s elements pertencentes a mesm tip de dad; 2 1
Vetres Índices (iniciam em 0, até n ); Índices utilizads para Recuperar/Inserir valres. Índice 0 1 2 3 4 5 6 7 8 9 n 10 20 30 40 50 60 70 80 90 99 Frma geral para se declarar um vetr: tip_da_variável nme_da_variável [tamanh]; 3 Vetres Exempl: flat teste [10]. Tds s valres sã d tip flat 0 1 2 3 4 5 6 7 8 9 teste Em C a numeraçã ds índices cmeça sempre em zer. Ist significa que, n exempl acima, s dads serã indexads de 0 a 9. Para acessá-ls vams escrever: teste [0]... teste [9] 4 2
Vetres Mas ninguém impede (prgramadr) de escrever: teste[30] teste[103] teste[-2] O C nã verifica se índice que vcê usu está dentr ds limites válids. Este é um cuidad que vcê deve tmar. Se prgramadr nã tiver atençã cm s limites de validade para s índices ele crre risc de ter variáveis sbrescritas u de ver cmputadr travar. Inúmers bugs pdem surgir. 5 Vetres Exercíci 1: Cnstrua um prgrama que declare um vetr de inteirs cm 10 elements e inicialize cm númers frnecids pel usuári, através da entrada padrã. main() { int vetr[10], indice; fr (indice=0; indice<10; indice++) { printf("\nvetr[%d]: ",indice); scanf("%d",&vetr[indice]); 6 3
Exercíci 2: Cnstrua um prgrama que declare e receba um vetr de inteirs cm 10 elements cm númers frnecids pel usuári, através da entrada padrã e depis exiba s índices e seus valres armazenads. int main () { int vetrinteirs[10]; fr(int x=0; x<10; x++){ printf("digite um Inteir: \n"); scanf("%d",&vetrinteirs[x]); if(x==9){ printf("-- Valres Digitads -- \n"); fr(int y=0; y<10; y++){ printf("indice: %d -> Valr: %d \n", y, vetrinteirs[y]); getchar(); return(0); 7 Vetres Um vetr pde ser inicializad na declaraçã, exempl: int vetr[10]={0,1,2,3,4,5,6,7,8,9; E ainda pde-se deixar em abert númer de elements, que será preenchid pel númers de elements na inicializaçã, que crre n mment da declaraçã. Ou seja: int vetr[]={0,1,2,3,4,5,6,7,8,9; E nã: int vetr[]; 8 4
Vetres Valres das psições pdem ser mdificads n prgrama: int main() { int sal[]={0,1,2,3,4; sal[0]=100; sal[1]=300; sal[3]=900; printf ("%d\n",sal[0]); printf ("%d\n",sal[1]); printf ("%d\n",sal[2]); printf ("%d\n",sal[3]); printf ("%d\n",sal[4]); getchar(); return (0); 9 Vetres Multidimensinais Estrutura de Dads Hmgênea Bidimensinal Exempl : Prédi cm mais de um apartament pr andar Cnjunt habitacinal cm várias ruas 10 5
Declarand uma matriz tip_da_variável nme_da_variável [d1][d2]...[dn]; Exempl: Declarar uma estrutura cm nme de salari, cm dez elements inteirs dispsts numa matriz cm cinc linhas e duas clunas. int salari[5][2]; 11 Exempl: main(){ int sal[5][2],x,y; sal[0][0]=100; sal[0][1]=690; sal[1][0]=900; sal[1][1]=250; sal[2][0]=200; sal[2][1]=180; sal[3][0]=300; sal[3][1]=60; sal[4][0]=500; sal[4][1]=30; fr(x=0;x<5;x++){ fr(int y=0;y<2;y++){ printf ("%d\n", sal[x][y]); getchar(); return(0); 12 6
Exempl: O prgrama abaix cria e exibe uma matriz cm dimensões e valres definidas pel usuári. int main() { // definiçã d tamanh da matriz int nl, nc; printf ("\nentre cm numer de linhas da matriz = "); scanf ("%d",&nl); printf ("\nentre cm numer de clunas da matriz = "); scanf ("%d",&nc); // entrada de dads da matriz int matriz[nl][nc], i, j; fr (i=0;i<nl;i++) fr (j=0;j<nc;j++) { printf ("\nentre cm element[%d][%d]=",i+1,j+1); scanf ("%d",&matriz[i][j]); 13 Cntinuaçã Exempl: // impressã da matriz na tela fr (i=0;i<nl;i++) { printf("\n "); // barra vertical fr (j=0;j<nc;j++) printf (" %d ",matriz[i][j]); printf(" "); getchar(); return (0); 14 7
Assim cm s vetres unidimensinais s vetres multidimensinais também pdem ser inicializads na declaraçã. Exempl: flat matriz [3][4]={1,2,3,4,5,6,7,8,9,10,11,12; int matriz [ ][2]={1,2,3,4,5,6,7,8,9,10,11,12; Nã use: flat matriz [ ][ ]={1,2,3,4,5,6,7,8,9,10,11,12; O Exempl a seguir usa exempl de matriz dimensinada e nã-dimensinada. 15 #include<stdi.h> int main() { int mat1[2][2]={4,5,-2,1; int mat2[][2]={4,5,-2,1; /*Matriz nã-dimensinada*/ int x,y; printf("imprimind a matriz mat1 cuj tamanh fi especificad:\n"); fr(x=0;x<2;x++) { fr(y=0;y<2;y++) { printf("mat1[%d][%d]=%d",x+1,y+ 1,mat1[x][y]); printf("\n"); /*fim d fr*/ /*fim d fr*/ printf("\n"); printf("imprimind a matriz mat2 cuj tamanh na fi especificad:\n"); fr(x=0;x<2;x++) { fr(y=0;y<2;y++) { printf("mat2[%d][%d]= %d",x+1,y+1,mat2[x][y]); printf("\n"); /*fim d fr*/ /*fim d fr*/ getchar(); return(0); /*fim d prgrama*/ 16 8
17 Exercíci 01 - Faça um prgrama que exibe cnteúd de um vetr tamanh 10 de frma invertida. Exercíci 02 - Faça um prgrama que leia um vetr de 10 psições e crie um segund vetr substituind s valres negativs pr 1. Exercíci 03 - Faça um prgrama que leia uma matriz mat 3 x 4 de inteirs, substitua seus elements negativs pr 0 e imprima a matriz mat riginal e a mdificada. 18 9
Exercíci 01 - Faça um prgrama que exibe cnteúd de um vetr tamanh 10 de frma invertida. #include <cni.h> int main () { int vet1[10]; fr (int x=0; x<10;x++) { printf ("Indice: %d - Digite um inteir:", x); scanf ("%d", &vet1[x]); if (x==9){ printf("\n \n -- Valres digitads --\n \n Vetr 2(Invertid)\n \n"); fr (int y=9; y>=0; y--){ printf ("Indice: %d - Valr %d \n", y, vet1[y]); getch(); return(0); 19 Exercíci 02 - Faça um prgrama que leia um vetr de 10 psições e crie um segund vetr substituind s valres negativs pr 1. #include <cni.h> int main () { int vet[10]; int i=0; d { printf ("Digite valr %d d vetr: ", i); scanf ("%d", &vet[i]); i++; while (i<=9); printf ("\n"); fr (i=0; i<10; i++){ if (vet[i]<0) vet[i]=1; printf(" %d ", vet[i]); getch(); return(0); 20 10
Exercíci 03 - Faça um prgrama que leia uma matriz mat 3 x 4 de inteirs, substitua seus elements negativs pr 0 e imprima a matriz mat riginal e a mdificada. #include <cni.h> main() { int matriz[3][4], i, j; fr (i=0;i<3;i++) { fr (j=0;j<4;j++) { printf ("\nentre cm element[%d][%d]=",i+1,j+1); scanf ("%d",&matriz[i][j]); printf ("\n Matriz Principal \n"); fr (i=0;i<3;i++) { fr (j=0;j<4;j++) { printf ("\n Valr: %d",matriz[i][j]); printf ("\n \n Matriz Mdificada \n"); fr (i=0;i<3;i++) { if (matriz [i][j]<0) { matriz[i][j]=0; printf ("\n Valr: %d",matriz[i][j]); getch(); return (0); 21 11