Você está na página 1de 54
Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO INTRODUCGAO i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com ESTRUTURAS DE DADOS 2 EMENTA: Vetorese Matrizes, Strings, Ponteiros, Fun¢Ses, Macros, Estruturas (stuct}, Tabelas. OBJETIVOS: Capacitar oaluno a desenvolver programas usando funrdes e ponteiros. Menipular estruturas de dados: vetores e matrizes, estruturas e tabelas. Manipular strings. Habilitar 0 aluno a manipular variaveis & estruturas de dados através de ponteiros. Aplicar todos os conceitos na Linguagem C. METODOLOGIADE ENSINO: Nas aulas teéricasos conceites sero expostos por meio de utlizacdo de lousa, datashow, sendo disponibilizado paraos alunos 0 material de apoio utlizado. Seréo propostas atividades individuais ou em grupo para melhor fixagao dos conceitos. As aulas praticas serdo no laboratério de informatica utizando como ferramenta de apoio a linguagem de programa¢a0C. Todasas aulas praticas serdo duas das quatro aulas no periodo. ‘SISTEMADE AVALIAGAO: O critério de avaliaggo devera ser composto por 03 notas oficiais(AV1, AV2 eAV3), ficando a critério do professora formade avaliacao (avaliaco individual, em grupo, trabalho, etc) e a data de aplicago, Para a composi¢éoda média sero consideradas as duas maioresnotas entre AV1, AV2e Av3, somadase divididas por 2, considerando-se eprovado 0 aluno que obtiver média final maior ou igual a 6,0 (seis). MédiaFinal=( ( Av1 + Av2 + AV3) -Menornotaentreas trés avaliagées) / 2 BIBLIOGRAFIA 3 Bibliografia basica: Schild, Herbert. C completo e total, So Paulo : Pearson: Mekron Books, 2006, 1987 MIZRAHI, Victorine Viviane. Treinamento em linguagem C, Sao Paulo : Pearson, 2008. KERNIGHAN, Brian W. RITCHIE, DennisM. C: A Linguagemde Programacao— Padrio ANS|, Sao Paulo Campus, 2008. Bibliografiacomplementar: Ziviani, Nivio. Projetode algoritmos com implementacdes em Pascal e C, So Paulo : Thomson, 2005, c2004. MANZANO, José Augusto. Estudo Dirigido de Linguagem C, So Paulo : Erica, 2008. ‘Sebastiao, J. R. & Mignon, Alexandre S. Apostila AVA: Algoritmose Logica de Programacao, Sao Paulo, Uninove, 2010, Pereira, Vania C.S. Algoritmose logica de programago: 100 exercicios resolvides em pseudocédigo e linguagem C. Isbn: 978-85-912397-0-2. Sdo Paulo, 2011 ARAUJO, Jario. Dorinandoa Linguagem C, Sao Paulo : Ciéncia Moderna, 2004. RE Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO Revisao: Estruturas de Repetigao Estruturas de Repetices 5 + Sdonecessarias quando se tem que repetir uma determinada instrugdo, que represente um comportamento pedro, varias vezes. + Comestas estruturas, escreve-sea instruc uma nica vez, ¢ ela pode ser executada varias vezes. + Repetices podem ser controladas por: + Condigéo; + Contador. + Quando o controle é por contador, a interrupgao é prevista no instante em que ¢ iniciada a execuco da estrutura de controle de repeti¢ées. + Quando o controle é por condigo, deverahaver uma expresséo légica, e a interrup¢ao sera controlada por meio do resultado desta expressao. + Eimprescindivel que haja uma instrug&o dentro do bloco deinstucdes que permita a alteragao do valor légico da condic&o i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com Estrutura de Repeticao Enquanto 6 + Ema estrutura de repetico comcondi¢o que permite executar uma ou mais instrugdesum determinado niimero de vezes. + Obloco sera executado enquanto o resultado da for verdadero. Se ja da primeira vez 0 resultado for falso, os comandos no so executados nem uma vez, portanto, a quantidade de repeti¢Ses 6 indeterminada nesta estrutura + Offluxo neste comando é o seguinte: a primeira vez que se chega ao comando de repetic20, é feito o teste da , que determina se deve ou ndo entrar no bloco. Se entrar, a0 final do blocovolta-se para a primeira linha do blocoe entéotesta-se novamente a . + Enfim: permite executar diversas vezes um trecho do algoritmo, porém, sempre verificando antes de cada execusdose ¢ “permitido’ executar 0 techo Pseudocédigo inquagem de Programac: enquanto faga while ( < expressio légica> ) ; fim_enquanto Lembre-se que em uma o resultado deve ser verdadeiro ou falso. Estrutura de Repeticao Enquanto - Exemplo 7 Caleular a média aritmética de 3 notas de? alunos. Pseudocédiao Linquagem de Programacéo Programa Media_30 # include var cont: inteiro # include 1n1,n2.n3,media: real int main ( ){ inicio int cont = 0; cont 0 floatn1, n2, n3, media; enquantocont<3 faga while ( cont <3) { lela n1.n2,n3 printf ("Digite as trésnotas: \n" ) media (ni +n2+n3)/3 scant(“%f%f %f", &n1, &n2, &n3 ) ; cont < cont 1 media= (nt +n2+n3)/3; escrevamedia cont ++; fim_enquanto printf ( "\ninA média ¢ igual a %0.2finin", media ) fim } ‘system (“pause”) retum 0 } i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com Estrutura de Repeticao Repita 8 + Esta estrutura permite que uma sequéncia de comandos sejam executada até que uma determinada condigdo seja satisfeita, + Ofluxo neste comando é 0 seguinte : a primeira vez que se chega ao comando de repeticéo, entra-se no bloco. + Ao final do bloco testa-se a condi¢éoe volta para a primeira linha do bloco se a condicdo for falsa + Obloco sera executado sempre que o resultado da forfalso, no momentoem que se tomar verdadeiroa aco subsequente ao comando’'até que’ sera executada + Esse tipo de repeticao garante que o comando seja executado pelo menos uma vez antes que a repetico termine. Linquagem de Programacéo Pseudocddigo dot repita }whille < expressaologica> 5 até_que < expresso égica> Lembre-se que em uma o resultado deve ser verdadeiro ou falso. Estrutura de Repetica&o Repita - Exemplo 9 Caleular a média aritmética de 3 notas de? alunos. Pseudocédiao Linquagem de Programacéo Programa Media_30 # include var cont: inteiro # include 1n1,n2.n3,media: real inicio int main ( ){ cont 1 int cont= 1; repita floatn1, n2, n3, media; lela (n1,n2, n3 ) dot media (ni +n2+n3)/3 printf (“Digite tr8s notasin” ); cont < cont 1 scant( "%f%F %f", &n1, &n2, 83 ) ; ‘escreva (media) media= (nt +n2+n3)/3; até_quecont> 3 printf ("A média 6 igual 2 %0.2firin", media) fim cont ++ } while (cont system ("pause") ; return 0 i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com Estrutura de Repeticao Para - Faca 10 + Ema estrutura de repetico comcontador que permite executar uma ou mais insirucdes um determinado niimero de vezes. Para controlar o nimero derepeti¢des, empregamosuma variavel do tipo numérico inteiro. + Aoencontrar a instrugo Para é atribuida & variével o valor de inicio declarado. Apartir dala sequénciade comandos é executada repetidamente, até que a varidvel atinja o valor de fim.A cada vez quea sequéncia de comandosé executada, a variavel é incrementada automatcamente. + Esta estrutura 26 pode serutiizada em repetigées controladas porum contador. Isto 6, aquelas repetigéee que sabemos onimero de vezes que aconteceré quando iniciamos sua execuao Pseudocddigo para < variével-de-controle > de < inicio> até faga < instrupSos> fim_para Linquagem de Proaramacéo for ( < varidvel-decontrole > ; < condi¢ao > ; < incremento> ) 5 Caleular a média aritmética de 3 notas de 30 alunos. Pseudocddigo Programe Media_30 var cont: inteiro n1,n2,n3,media: real inicio Para cont de | até3faca lela (n1,n2,n3) media < (n1+n2+n3)/ 3 escreva( media) fim_para fim. pode serconvertida em PARAou REPITA Estrutura de Repeticao Para — Faca - Exemplo Linquagem de Programacao # include # include int main ( ) { int cont; float n1, n2, n3, media; for (cont = 1; cont <=3; cont++ ){ printf ("Digite trés notasin’ ) ; scanf( "SF %F %F, Bint, 8n2, BAB) ; media= (nt +n2+n3)/3; printf ("A média e igual a %0.2finin", media) } system "pause") ; return O ; Tee Comparacao entre as estruturas de Repeticao Toda estrutura PARAe REPITApode ser convertida em ENQUANTO, mas nem toda estrutura ENQUANTO- 11 12 ; tided: . stance; Estrutura Condicao Quantidade Condigao de Existéncia de Execugées Enquanto / Inicio Indeterminada Verdadeira While Repita/ / - Falsa (pseudocddigo)/ be ahite Fim Minimot = Verdadeira (linguagem C) Para / For Implicita (fim = inicio+ 1) <= fim no inicio AE Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO Revisao: Variaveis e Constantes i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com Variaveis e Constantes em C 14 + EmC, comona maioria das linguagens, as varidveis e constantesdevem ser declaradas no inicio do programa. Estas varidveis podemser de um dos tioos validos para a linguagem. A sintaxe da declaracao de veriaveis ¢: ; + Para declarar uma constante utilize a diretiva de compilacdo #define. Sintaxe: define + Para faciltar @ leitura de um programaé recomendavel usar uma pratica tradicional usando letras mindsculas para identiicadores de variavels e maidsculas para identificadores deconstantes, preferencialmente utiizando palavras em portugués. + Atibutos (carecteristicas)de uma variavel: Identificador, Tipo, Valor associado Identificador (nome da variével) + Tipo de dado que sera armazenadh (inteiro, real, caractere ou légico) + Valor associado (valor armazenado na célula de memérie) Enderero Fisico Identificador Tipo de dado Valor Associado 3000: 8712 nome caractere “odo” 2000: 12C numero inteiro 12345 3000: 0004 letra caractere ““" 3000: €223 medida real 0,35 2000: 11DA Fesposta Vgico verdadeiro Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO Operadores Especiais em C QA ee ee a ee Operadores de incremento e decremento 16 + Por meio de operadores matematicosespeciais a linguagem C oferece atalhos para o programador. + Qs operadores deincrementoe decremento sao variantes dos operadores de adicdo e subtracdo. + Estes operadoresincrementam (++) ou decrementam (--) emuma unidade 0 valor armazenado em uma veriavel. x#+ corresponde a x=x+1 x--correspondea x=x—1 + Qs operadores podem ser pré-fixados ou pés-fixados conformetabela a seguir Operador Fungao ++ | Incrementa a varidvel em 1 € depois retorna o seu valor ++ | Retoma o valor da variavel e depois incrementa seu valor em 1 -- | Decrementa a variavel em 1 depois retoma 0 seu valor -- | Retoma o valor da variavel e depois a decrementa em 1 Os operadoresde incrementoe decremento so unérios pois que atuam somente sobre umavariavel Emr cece Exemplos de aplicago dos operadores #include #include int main () { inta=3,b=7,c=7, int x, y; att; Hasat+1=>as4 b-; b-1 xecH ix=¢ | =>x=7 ysttd; Id=o+1=>d=2 printf ("a = %din",a ) printf ("b = %din", b ) printf ("x = %dit%din", x, € ): printf ("d= %dit%d\n",d, y ) getch(); retum 0; alguns operadores aritméticos como de atribuigo. variével ¢ ostéo aprosentadosna tabela a seguir. RMI ee ee Operadores aritméticos de atribuicao + Alinguagem C além do operador simplesde atribui¢ao ( =), possui operadores que so combinacSesde Operadores de incremento e decremento cactl => c=8 =>y=2 SSE ee + Estes operadores realizam uma operacocomuma veriavel e atribuem o resultado para estamesma Operador Nome Correspondente | Exemplo Atribuigao e adi¢ao a=a+b at=b Atribuigao e subtrago a=a-b Atribuigao e multiplicagao azatb Atribuiga0 e divisdo a=a/b a/=b %= _| Atribuigdo e médulo a=a%b a%=b 17 18 1. #include 2. #include 3. int main ( ){ 4 intx 5. ys tex 6 yaxtt 7, yrxetye; 8 yet Hy 9 yss tex; 10.0 yx 11 yas tty tox 12. printf ("ebd %d", x y ) 13. geteh(); 14. retum0; 15.3 1. Quais os valores impressos apés a execucdo da linha 12 do programaabaixo? CI Operadores aritméticos de atribuicao 19 Exemplos de aplicacdo dos operadores #include #include int main (){ inta =50,b=50; at=b; Na=a+b...=>a=50+50...= printf("Atribuicao com Adicao.......: %din", a); b=30; a=b Ha —b.....=> a= 100-30. >a=70 printf("Atriouicao com Subtracao.....: %din", a); b=15, a= db a=e" uaz 70° 15..2>8= 1050 prntf(Atriouicao com Muliplicacao: %édin’, a); b=50; alt Ha /b.....=> a = 1050/50.....5>a = 21 printf("Atriouicao com Divisao...... %din", a); b=6; a %= b; Haza%b....2> 8 =21%6....=>3 printf("Moduloou Resto. %d" a); getch() return 0; Exercicios - OPERADORES 20 Exercicios - OPERADORES 2. Observe oprogramaa seguir eresponda: Quais os valores impressos pelalinha 67 Quais os valores impressos pelalinha 10? Que modificagdes séo necessérias na expresso dalinha 5 para que a linha 6 imprima os mesmos valores da linha 10? 1. #include 2. #include 3. int main ( ){ 4 intx=2, 6. xext2+y; 6 printf ("%d %d",x, y) 5 7. 8. : 9. xe 2ty; 10 printf ("%ed %d "1 getch |); 12. retum 0; 13.) RE Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO Matriz e Vetor 21 Listas Lineares 23 + Uma das formas mais comumente usadas para se manter dados agrupados 6a lista. Existem varios exemplosde lstas lineares, tais como: File de clientesem um banco: existe o primsiroda fila, 0 ditimo da fila © os clientes fazem com que exisia uma “ordem'" de atendimento; Fichério: existe um numero finito de fichas que esté agrupado segundo uma “ordem” preestabelecida, de tal forma que conseguimos identificara terceira ficha, a décima ficha, ete + Uma lista linear 6 um conjunto de informacdes de qualquer tipo, organzadas sequencialmente. + Aorganizagdo sequencialestebelece uma relagao de ordem, decorrendo dai @ possibilidade de identificar qualquer elemento da liste: 0 primeiroou 0 ultimo ou qual elemento precede ou sucede qualquer outro. + Uma lista linear é uma coleco L: [a1 a2..... an], onden > 0, cuja propriedade estrutural baseia-se apenas na posicdo relativa dos elementos, que esto dispostos linearmente. + Uma lista linear suporta diversas operacdes, tais como: insereéo, remoco, acesso, contagem, concatena¢do (juntar duas listas), etc Hp << Hy < Hy < Ky < KS < Conjunto Lista Linear i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com Listas Lineares 24 Exemplos: + listas de elementos com informagdes de um tinico tipo: listas de inteiros listas de reais listas de caracteres, etc. + listas comagrupamento de informacdes de varios tipos; cada conjunto de informacées constitui um registro @ cada informacao constitui um campo: listas de cadastros de clientes de um banco; para cada cliente existe o seu cpf,nome, endereco, saidoe saldo médio, Neste caso, o registrocontémS campos, Matrizes e Vetores 25 + Conjunto de variéveis, cada uma comum valor associado, como se fossem varidveis simples, mas todas ‘compartilham o mesmo nome (identificador). + [ndices sdoutilizados para referenciar os elementos deste conjunto. + Podem armazenar mais de um valor na veriével ao mesmo tempo. + Todosos valores do conjunto de variaveis devem ser do mesmo tipo. + Para utiizarmos uma matriz ou vetor, devemos fazera declaracao estabelecendoo tipo de seus elementos e o seu nimero maximo de elementos + Avariével é dividida em varias células, denominadas posi¢ées, cada uma identificada por indices numéricos do tipo inteiro positive. + Todasas posi¢despertencema mesma variavel + Cada posipdotemacessoindividual e independente. i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com Matrizes 26 + Um conjunto de variéveis commais de uma dimensao. + Omais utiizado € 0 bidimensional (aquele que possuiduas dimensdes), + Asdimensdesde uma matriz so dadas pelo ntimero de linhas © colunas da matriz + Sinénimos: Conjunto multidimensional Vetor multidimensional Array multidimensional + Referimo-nosa cada posi¢&o da matriz usando seu nome seguido do indice de sua linha e o indice de sua coluna, sendoque os indices devem estar delimitados pelos caracteres “['e "]. nome_mat 4 Exemplo:nome_mat [linha] [coluna] _No casoda matriz acima, ha 3 linhas e 4 colunas. Dizemos que nome_mat é uma matriz comdimensao 3x4. RE Matrizes 27 + Avariago dos indices da matriz devem ficar dentro dos limites da dimenso que os indices representam. A. cordem dos indices interfere no resultado da operaro, porisso CUIDADO! nome_mat 0 1 2 3 0 Referindo-se a nome_mat [0][2] 1 2 Referindo-se anome_mat [2][0] Exemplos de atribuigées a matrizes mata [0][0 mat_a [0][1 mata [1][0]=mat_a [0][0]+mat_e [0][1] mata [1][1]=mata [1][0]* 4 N20 elo a RE Exemplo de preenchimento de Matriz 28 Ha uma forma prética para se trabalhar com matrizes. Ifor (linha = 0; inhe <3; linna ++ ){ \ for (coluna =0; coluna <4; coluna ++) { mat_a [linha ][ coluna]= linha +coluna Declaracao de Matrizes [ qtd_linhas ] [qtd_colunas] ; Exemplos float mat_a [10] [6] int mat_b[5][5] Um vetor de strings (caracteres) na linguagem de programagao C possui caracteristicas préprias que sero vistas mais adianto._ 23 29 ' ‘ oo 1+ [ace Tene Ie a 1 3 eae ' 4 cara cen ' 1 = L Exemplo de utilizagao de matriz ‘Saja uma matriz quacrada 3x3, calcular a soma dos elementos da diagonal principal 1. #include 2. #include 3. #defneN s ATENCAO! NA LINGUAGEM C 4. int main (9 8 INDICES DE UMA MATRIZ 8. intmatriz [N][N] VAO DE ZERO(0) A N-1 6. intlinha, colina, soma ee 7. printf ("Soma Diagonal\n" ) 8. soma=0; 9, for ( linha = 0; linha [ qtd_de_elementos ] Exemplos int idade_chete[ 5] float salario_emp|250] ; AE Exemplo de utilizagao de vetor 33 Programa que ée calcula amédia de 5 notas de um aluno 1. #include 2. #include 3. int main (){ 4. floatnota [5], soma, media 5. inti 6. soma =0; 7. printf ( “Digite os valores das cinco notas: \n" ) ; 8. for (1=0;1<5;1++) 9. scant(%t", anota [1]; -o 4 2 3 4 40. for(i=O;i<5;i++) nota [7.0 | 5,0 | 8.0] 30 | 90 | 1. soma= soma nota [i . 12 somal. soma | 22 | media | 6,4 | 43. print? (“Média das notas: %.1f", me 14. system (“pause”) 15. retum O 16. } Tee Exemplo de utilizagao de vetor 34 ‘Sejam dois vetores, cada um contendo 5 valores numéricos reais, armazenar em um terceiro vetor a média aritmética entre 0s valores dos dois primeiros, calcular a média dos valores do terceiro vetor, apresentar cada valor do terceiro vetor comparando coma média eral 1. #nclude 2. #nclude 3. int main (){ 4, float vetort [] = { 33,21,48,13,3}, vetor2 [] = {8,4,16,28,12}, medarit| 5], soma, medgeral; 5. inti; 6. soma=0; 7. for (1 =O; 1<5;144){ 8. medarit[i] = ( vetort[i]+ vetor2[i])/2; 9. ‘soma=soma+ medarit[i] ; 10, } 11. medgeral= soma! 12, printf ("Media geral = %0.1finln", medgeral) ; 13. for(i=O;i< i++) 4. printf ( “Posi¢ao[%d] - Média Aritmética = 18, system ("pause"); 16. retumO 0.1f-", 1, medarit{|]) 5 AE Exercicios: MATRIZES e VETORES 35 1. Dadoo programaa seguir, o que estaré impresso aofinal da execucéo? 1. #include 2. #include 3. int main ( ){ 4. intm4[2][4]={{1,2,3, 4}, (5, 6,7, 8}},m2[4][ 2} 5. intxy; 6. for(x=0; x <4:x++) { 7. for( y =O; y <2; y++) { 8 mtx} [y]=m1[y ]1x] 9 printt ("%6d ", M20 x]Ly1); 10. } “4 printf("\n") 1204 13. getchi) 14, return 0; 15.) 2. Facaum programa querecebadados do tipo inteiro suficientes para preencher uma matrizcom dimenséo 2x 5, calculee mostre a quantidade de numeros impares. Tee Exercicios: MATRIZES e VETORES 36 3. Considerandoum vetor capaz de armazenar5 elementosinteiros, mostre: a) como deciarar este vetoremum algoritmo b) comozerar todos os elementos do vetor ¢) come exibir os elementos dovetor em ordemcrescente de indice ) como exibir os elementos dovetor em ordem decrescente de indice 4, © queacontecese usarmosa seguinte codificacao? char dados[ 3]; dados [-1]= dados [9] CI Exercicios: MATRIZES e VETORES 37 6. Dadoo programaabaixo, quais 0s valoresimpressos apés o final da execucéo domesmo? 1. #include 2. #include 3. int main (){ 4, intvet[ 9] = (12,6, 9, §, 14, 8, 33, 54, 35}; 5. int 3 6 printf etl x]) 7. printf "inin%d" vet [x +1] ) 8. printt( “inin%d"vet [x *2]) 9. printt("nin%d",vet [x+y] ); 10. printf "wnin%d"vet [x*y +2] ) 44. printf ( "inin%d",vet [vet [x—1] +1]); 12. printf ( "inin%ad",vet [vet [x+1]]); 13 inin%ad" vet [ vat [x +1] -(y+1)]) 14, ind vet [vet Ly +1 ]-vet 2+y 11): 15, dinin" vet [vet [x*y +1] %vetl yx ]]) 16. _system( "pause”) ; return O RE Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO Manipulagao de strings em Cc Strings em C 39 + Alinguagem C no possuie tipo de dado string como em muitas outras linguagens de programago. Strings em C sao tratados como vetores. + Atéo momentoa entrada de dades dotipo caractere (string) foi efetuada por meiodo comando scanf, entretanto este comando ié somente até 0 primeiro espaco, ou seja, até a primeira palavra + Uma string em C na forma de um vetor armazenaré em cada posi¢io um caractere, sende que sempre haverd uma posicSo.a mais que ira contero terminador nulo, representado por'\0’. Atencdo ao fato que \0 no representa o numero zero (0), mas sim um caractere nulo, determinando o final da string + Adeciaracaode uma string é: char < identificedor> [ tamanho ] ; (Qbs.: Ctamanho devera prever também um caractere @ mais correspondente 20 ‘10 Exemplo: char var_str [6]; indice 0 1 2 3 4 5 6 7 valor | a m e r i « a | w + Comoa linquagem C nao manipula diretamente strings, temos uma série de funcGes pré-existentes para diversas tarefas. i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com FuncGes para manipulacao de strings em C 40 Funcdogets() ; Lé os caracteres digitados no teclado, armazena no vetor e coloca o terminador nulo no final da string. Sintaxe:gets ( < identificador> ) ; Exemplo: 4. include 2. #include < stdlibh> 3. int main (){ 4, char palavra [50] 5. printf "Digite uma palavra qualquer: ") ; 6 gets (palavra); 7. 6. 9. 1 printf (“\ninPelavra digitada: %s\nin\n’, pelavra ) ; system ("pause") ; return O Funcées para manipulacao de strings em C 41 Fungdoputs() ; Esereve o contetido da string na unidade padrao de saida e colocaum ‘in’ no final. Sintaxe: puts ( ) ; ‘Afungdo puts) pode escrever apenas strings de caracteres, ndo podendo escrever niimeros ou fazer conversdesde formato. Se quisermos utilizar caracteres de controle na fun¢o puts, devendo utilizar separademente da veriével sting Exemplo: 1, include 2. #include 3. int main ( ){ 4. char palavra [50]; 5. printf( "Digiteuma palavra qualquer: ") : 6. gets (palavra ) 7. puts ("\nlnPaiavra digitada:\n’ ) 8. puts (palavra) ; 9. puts ("\ninin” ) 10. system(‘pause") 11. retum0; Tee Funcées para manipulacao de strings em C 42 Funcdostrepy( Copia 0 contetido de uma string para outra string, Para utilizar esta funcdo acrescente ao seu programaa biibioteca string h Sintaxe: strcpy (< string_destino>, < string_origem> ) ; Alinguagem de programag&oC no permite atribuig&o de valores para uma varidvel do tipo caractere com ‘ooperador*=". Paratal operacdo existe a funcdo strepy. Exemplo: 1. #include 2. #include #include ° int main ( ){ char palavrat [ 30], palavra2 [ 30], palavea3 [ 30] ; printf( "Digite uma palavra qualquer:"); cets( palavret ) strepy ( palavra2, palavrat ) ; 9. strepy( palawa3, "Palavra digitada: ") ; 10. printf( “nin%s%s.\n\n\n", palavre3, palavra2 ); 14. system ("pause") ; 12. return 0; 13.) @Nome Fungdostremp() ; string.h Exemplo: 1. #include < stdio.n > #include < stdlibh > #include < stingh > en int main (){ char palavrat [ 30, pelavra2 [30]; intresutt; printf ("Digite a primeira palavra:") gets ( palavrat ); printf ("\nDigite a segundapalavra: " ) 0. gets( palavra2 ) ; 1. result= stremp( palavrat, palavra2 ); a aoeer %2Hm@E Sintaxe: stremp ( < string1 >, < string2 > ) ; Se as strings forem iguais a funcao retorna zero. 12 13, 14 15. 16. 17. 18, 19 20. a Funcées para manipulacao de strings em C 43 Compara o contetide de duas strings. Para utilizar esta funcdo acrescente 2o seu programaa biibioteca Sea string for maior que a string2 a fungo retorna o inteiro 1 (um) positivo. Sea string! for menor que a string2 @ funcéoretorna o inteiro ~1 (um) negativo, Tee Func6es para manipulagao de strings em C 44 if (result == 0) printf (“WninAs palavras so iguais. \n\nin" ); else if (result > 0) printf ("n\n primeira éa maior \n\nin” else printf (“in\nA segunda é a maior \n\nin" ); system ("pause"); return 0 AE Funcées para manipulacao de strings em C 45 Fungdostrien() ; Retorna o comprimento de uma string, Para utilizar esta fungao acrescente ao seu programa a blibioteca string.h Sintaxe: strlen ( < string > O valor retornade pela funcao é a quantidade de caracteres da string, nao levando em consideracaoo caractere nulo, portanto 0 tamanho do vetor ser sempreo valor devolvido acrescido de uma unidade inteira i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com FuncGes para manipulacao de strings em C 46 Exemplo: 1. #include #include < stalibh> #include < stingh > on Int main (){ char sting! [] = { "Universidade Nove de Julho" } char sting2[ 50] printf ("Conteudo da variavel stringt = %s.in", string ) printf ("Numero de caracteres da variével string1 = %d.\n", strien ( string’ )) 9. _printf("Tamanho do vetor da variavel string’ = %d.\ninin", strlen ( string’ ) + 1) 10. printf ("Digite uma string qualquer:") ; 11. gets( string2); 12. printf ("Numero de caracteres da variavel string2 = %d\n", strlen ( string2 )) 13, system ("pause") 14. return 0; 15.3 erNOaEe Funcées para manipulacao de strings em C 47 Fungdostrcat() ; Une duas strings. Para utilizar esta funciio acrescente 20 seu programaa biibioteca string h Sintaxe: streat ( < string_destino>, < string origem>) ; ‘A fungdo streat concetena (junta) ao final da < string_destino> 0 contetido da < string_origem>.O contetido da string de origemnao sera alterado. Tee FuncGes para manipulacao de strings em C 48 Exemplo: 4. #include #include < stdlib.h > #include < string.h > int main ( ){ char nome [ 30 ], sobrenome| 30], mensagem | 30] printf ( "Digite 0 primeiro nome: gets (nome ) stat( nome,""); 9. printf "Digite o sobrenome:") ; 10. _gets(sobrenome) ; 11. stteat( nome, sobrenome ); 12. stepy( mensagem, "Nome complet 13. strcat( mensagem, nome) es 14. printf "\nl9%-\n\nin", mensagem) 45. system( "pause") ; 16. returnO 17.43 CI Vetor de Strings. 49 + Sting 6 um vetor de caractores. o 1 2 3 4 5 6 Dl[e|r]ile|]e*|o + Destaforma um vetor de strings poderia ser representado da seguinte meneira o 1 2 3 0123456/012345 6012345 60123456 Dle[njils el\wlEla|slo|nlw] |Flajuls|tloliwlainia lio + Ovetor acima nada mais é do que uma matriz bidimensional de ceracteres. + Devemosentéo declarar um vetorde strings comouma matriz sendoa primeira dimensdoa quantidade de strings e a segunda dimensdoa quantidade de caracteresde cada string. o 1 2 3 4 5 6 of D n{ijlsfe|w 1,eE;dad/sfojfni|w 2}Fifalufls[tlo]w 3) al n]al|w + Declaracdo de um vetor de stings: < tipo-de-dado > < identificador > [ < qtd_strings> ][ ]; Emre meri Tee Exemplo de Vetor de Strings 50 1. #include #include #defne QTD4 #defne LETRAS7 RON 5. int main (){ 6. charnomes[ QTD] [ LETRAS] ; 7. inti; 8. for(i=0;i< QTD; i ++){ 9 system ("cls") 10. printf ( "Digite 0 %do. nome:", i+ 1); 11, flush (stdin) ; 12, gets(nomes[i]); 13. } 14, system("cls"); 15. printf ("Nomes digitados: "); 16. for(i=0;1 *< identificador >; Declara uma variavel do tipo penteiro. (void*) matioc(tamanho embytes); um tipo de dados ocupa. Exemplo: int *ptr, ptr=( int *) malloc ( sizeof( int) ) ; free (ponteiro) Exempio free (ptr); Exemplo 1. #include 2. #include 3. int main (){ 4 int’, y; 5. x=(int* )malloc (sizeof int) ); 6. y= (int * ) malloc (sizeof int) ); 7 %=27; 8. 9. printf ("Valor: Sed - %d\nin’, *x,, *y) 11. printf("Valor: Sod -%d\nin’, *x, "y); yex 14. printf "Valor: Sod %d\nin", *x, *y) 18. free(x) 16. system("pause") 17. return 0; Ponteiros — Comandos basicos Libera as células de meméria alocadas dinamicamente. 55 Pode haver um porteiro (ou apontador) para qualquer tipo de varidvel Aloca dinamicamente, durante a execuc&odo programa, células dememeéria. Esta func&o devolve um ponteiro void que deve ser ser convertido para o tipo desejado. © tamanho em bytes pode ser determinado.utilizando a func&o sizeof() que retoma o tamanh em bytes que Para manipulagdo de valores utilizando ponteiros temos dois operadores: Ooperador * devolveo valor contidono enderecoapontado pela variavel ponteiro; Ooperador & devolveo enderegodememériaalocado de ume variavel Tee 56 #include #include int main ( ){ im*x,*y; inka, b; a=27; b=43; x=8a; y=&b printf ( "Valor: %d- %d nin", “x, *y ); x printf "Valor: %d- %d nin", ,*y ); ‘x= 27 yex printf ( “Valor: %d- %d \nin", “x, *y); system ( pause"); return 0 ; AE Exemplo 57 4. include 2. tinclude 3. #include 4. int main (){ 5. char*x,*y; 6 x =(char*) malloc ( 12* sizeof( char )) 7. y=(char*) malloc ( 12* sizeof( char )) 8 strepy/ x, "Estruturas’ 9. strepy/ y, "de Dados” ) 10. printf ("%s %sinin’, x,y); 11. strepy(y.x) 12, printf("%s %sinin’, x, y) ; 13. strepy/ y, "de Dados"); 14, printf ("%s %sinin’, x, y ): 15 xey; 16. printf("%s %sinin’. x.y): 17. free(x); 18. system("pause") 19. return 0; Tee Exercicios PONTEIROS 58 1. Oqueserdimpressoapés aexecucéodo programa abaixo? 11. *pt=7 12. — strepy( x1,"teste") ; # include 13. *p2=15; 2. #include 14. strepy( x2, aula") 3. #include 15. p3=11 16. strepy( x3, "prova”) ; 4. int main ( ){ 17. pl=p2; 5. int *p1, *p2, p3; 18. p2=&p3 6. char *x1, *x2, x3[7]; 19. strepy ( x2, x3) 7. p1=(int *) malloc ( sizeof ( int ) ); 20. — strepy( x1, x3); 8. p2=(int *) malloc ( sizeof ( int ) ); 21. printf("%d \n", *pt) ; 9. x1= (char * ) malloc (7 * sizeof( char ) ) ; 22. printf ("%d \n", *p2) 10. x2= (char * ) malloc (7 * sizeof (char ) ) 23. printf("%d \n", p3) 24. printf("%s\n", x1); 25. printf( "s\n", x2); 26. printf( "s\n", x3); 27. system ("pause 28. return AE Exercicios PONTEIROS 59 2. Codifique um programa que contenha uma variavelponteiro que aponte paraum vetor de 5 elementos dotipo intelro, insira dados neste vetore mostre osmesmos. 3. Codifique um programa que contenha um vetorde 5 elementos dotipo ponteiro paraum char, insira dados neste vetor e mostre os mesmos. RE Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO SUB-ROTINAS Sub-rotinas 61 Muitos problemas grandes e de solucéo complexe geram programas complexes, e podemserdivididos em problemas menores com légica mais simples e de compreenséo mais facil, tomando a tarefa de desenvolvimento e manuten¢go menos desgastertes. Em vez de escrever um algoritmo grande, podemos dividir o mesmo em varios algoritmos menores, ‘Chamamos estas divisdes de sub-rotinas, sendo que cada um é na verdade um programa, que por sua vez podem ser divididos em outros tantos quantos forem necessatios. Esses sub-rotinas podemter variaveis préprias ou utilizar as varidveis declaradas no programa principal. De acordo como contexto em que esta inserido uma variavel pode ser considerada uma variavel local ou uma variavel global Algoritmo Principal RMI ee ee Sub-rotinas ‘sub-rotina A Ep a C__) f sub-rotina A T sub-rotina B Fo co mr neers ! ' | vara, b 1 1 Lopoeanens3 pean nn-ns 1 1Sub-rotina A 1 Sub-rotina B 1 | ! Ivar e,d ! tare, f " me Lc " \ : SSE ee hud Fim Retoma Retorna VANTAGENS 1. _ Diferentes partesdo algoritmo podem serindependentesde forma que possam ser escritas e testadas separadamente 2. Trechos do algoritme podem ser escritos de forma a serem reutilizados em diferentes partes do aigoritmo. 3. _Algoritmos complexos podem ser elaboradosa partir de unidades menores jé prontas e testadas. 4. _ Garante maior legibilidade. 62 subrotna A sub-rotina B ec ee ee ae ee Tipos de Sub-rotinas 64 + Existem, na maioria das linguagens de programaco, doistipos de sub-rotinas: as que nao devolvem valor e as que devolvem valor. + Na linguagem de programa¢&o C sub-otina é chamada de fungdo. Fungo que ndodevolve valor + Conjunto de comandos aos quais foi dado um nome espectiico, + Neste caso, separa-se um bloco de comandos como intuito de realizar alguma operacdo. Fungo que devolve valor + Conjunto de comandos aos quais foi dado um nome especiico, + Neste caso, separa-se um bloc de comandos como intuito de realizar alguma operagaoe retomar um valor. Funcées em C 65 + Amaioria das linguagens de programa¢o possuem algumas funcSes pré-definidas,feciitando.o trabalho dos programadores. + Alinguagem C é uma linguagem procedural, ou seja, ¢ baseada em fungdes (procedimentos). Todo programa escritona linguagem C deve terno minimoa fung&o main (). + Uma determinada fungéio pode ser chamada a qualquer hora durante a execucéo de um programea partir de outras fun¢es.ou por si mesma + Sintaxe de uma fungao em C < tipo de dado> ( < parémetros> ) { i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com Funcdo que nao devolve valor 66 + Oobjetivode se declarar uma fun¢ao é associé-laa um identificador para que a mesma possa serativada por um comando em uma outra fungdo. void < identificador da fungdo > ( < parametros > ) { declaragao dos objetos locais da fungao + Achamada ou ativagao de uma fung&o que ndo devolve valor é feita referenciando-seo seu nome, seguido de abre e fecha parénieses, no local do programe, onde e mesma deve ser ativada. + Aoterminar a execugéo dos comandos da funcdo, a sequéncia do programa retomna sempre ainstucdo ‘Seguinte que provocoua sua chamada. Exemplo de Funcao que nao devolve valor 67 1. #include 2. #include 3. char nome[30] | 4 void elogio () { 15, prinif( "Ola%s", nome ); ' 6. printf ( "inBonitonome!\n\n") 17.) L---------------! 8. int main ( )( 9. printf( “Qual o seunome?" ) 10. gets(nome); 11. elogio(); 12. system ("pause") 13. retum 0 14.3 Exemplo de Funcao que nao devolve valor 68 Célculo da soma de dois nimeros utiizando 0 conceito de fungo que ndo devolve valor. 1. #include 14. void inicio ( ){ 2. #include 15. tela(); 16. printf "Entre com 10, numero 3. floats, y: 17. scant( "Yet", & ) 18. printf ("Entre com2o. numero= 4. voidadicao(){ 19. scanf( "%f", &y ) 5. floatsoma; 20. printf 6 soma=x+y; 21. adicao(); 7. printf (“resultado = %.2F", soma) ; 22. printf ("\nin\n’) a} 23, system ("pause") ; 24.) 9. voidtola () { 10. systom("cls"); 25. int main (){ 11. printf ("Soma de dois numeros reais\inin" ) 26. 12. printf ("Utilzando Sub-rotinas \nin\n” ) 7. 13.) 28.) Funcdo que devolvevalor 69 + Distingue-se da fungfe que néo devolve valor pela caracteristica de retornar um valor. + O objetivo de se declerar uma fun¢ao que devolve valor 6 associé-la a um identificador para que a mesma possaserativada em ume expresséoemuma outa funcdo. < tipo de dado > < identificador da fungao > (< parametros > ) { declaracdo dos objetos locais da fungao return < variavel / valor / expressao > Funcées deste tipo devem ser chamadas dentro de expressées: Exemplo: x = fungéo( ); Tee Exemplo de Fungao que devolve valor 70 1. #include 2. #include 3. floata,b,< va. float prod (){ ' 15 returna* bi le, 1 tet 7. int main ( ){ & a=2, 9 10; 10. c=prod(); 11. printf *96fnin".c ) ; 12, system( "pause"; 143. return 0; 14.) Exemplo de Funcao que devolve valor 71 Caleuio da soma de dois nimeros utiizando © conceito de fungo que devolve valor. 1. #include 14. void inicio () { 2. #include 15. tela(); 16. _ printf (“Entre com 10, numero = 3. floaty, y 17. scanf( "%f", 8x) 18. _printf( "Entre com 20. numero ="); 4. float adicao(){ 19. scanf( "%f",8y) 5. floatsoma 20. printf “resutado= %.2fin\n\n", adlieao( ) ) 6 soma=x+y; 21. system ("pause") 7. return soma 22.) 8) 9. voidtela (){ 10. system("cls"); 25. retum 0: 11. printf ("Soma de dois numeros reaisin\n" ) 26.) 12, printf ("Utiizando Sub-rotinas \ninin" ) 13.) Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO PASSAGEM DE PARAMETROS Passagem de Parametros 73 + Uma definico genérica para parametros seria “qualquer variavel que possa ser usadaporuma fungae fornecida pela fungao que a chamou” + Oparametro pode serreal ou formal Parametroreal—variaveis, expressdes ou valores usados na chamada da funcdo. Parametroformal-identificadores usados no cabegalho da fungo + Existem dois tipos de passagem de pardmetros utlizados nas linguagens de programac&o: Passagem por Valor PassagemporReferéncia CSET SST ae ee ay le Passagem de parametro por Valor 74 + Na passagemporvalor, o que é passado para a funcdo é o valor da variavel usada como parémetro real + A fungdo copia o valor do parémetro real para a variével declarada como parametro formal. + Qualquer alteragao no contetido de um parémetro formal, dentro de uma fungéo, ndo serérefletidono perametro real + Parametro formal é considerado uma variével local, deixando de exist ao término da fun¢éo. 111, printf ("%ofintn’,e ); ' 12. system ( "pause" 113. retum 0; t 14.) In 7" Sinctide cao 12. #include i) \ 1 1 13. float prod float x, float y ) { I M4 retum x * y I Posig6es de memoria 1 15} ' ' i) ' 1 16. int main ()¢ ! 17. floata, b, 1 ' ' 18 a2; ! 19 110; 1 110. c=prod( a,b); ' ' \ 1 1 ' Exemplo de Passagem de Parametro por Valor 75 1. #include 2. #include 3. int x; 4. void porvalor (int a ) 5. int main (){ 6 x=10 7. porvalor (x) 8. printf ("x = %dinin’, x) 9 1 4 ‘system ("pause") 0. return 0; 1 12. void porvalor( int a ) { 13.08 14, printf("x=%d = a=%dlnin", x, a); 15.) RE Exemplo de Passagem de Parametro por Valor 76 1. #include 2. #include 3. int 4. void dobro (int n ); 8. int main () 6. x=7 7. dobro( x); 8. printf ("x = %dinin’, x); 9 1 1 system ("pause") }0. return 0; 1 12, void dobro( int n) { 13.0 ne 14. printf ("x= %d n= Sdinin", xn) Exemplo de Passagem de Parametro por Valor 77 1. #include 3 2. #include 3. int pot (int base, int expoente) ; 4. void entrada ( ); 5. int main (){ 4. for( k= 1k 12. #include float prod float *x, float *y ) ( return “x * *y; 7053 ; int main () { floata, bc: a=2; b= 110. c=prod( &a, &b); printf ("96fin\n",c ) system ("pause") retum 0 ; Exemplo de Passagem de Parametro por Referéncia 4. #include 2. #include 3. intx; 4. void por_ref(int “a ) ; 5. int main (){ 6 x=10 7. porref(&X); 8. printf ("x = %dinin’, x); 9. system (“pause”) 10. retum 0; 1} 12. void por_ref(int *a) { 13, tas5 14. printf("x=%d a= Minin", x, ta) 18.3 Posigées de Meméria 4052 4053 Tee 79 Exemplo de Passagem de Parametro por Referéncia 1. #include 2. #include 3. int x; void dobro (int *n ) int main (){ 5. 6. 7. dobro( &«) 8. printf ("x = %dinin’, x) 9. 1 1 system ( "pause") 0. return 0; 1 12, void dobro ( int “1m ){ 13,0 ‘n=2*"n 414. printf ("x= %d 15.3 Yodinin", x, *n) ; Posigdes de meméria 4052 4053 x n 4052 80 AE Exemplo de Passagem de Parametro por Referéncia 81 4. #include 2. #include 3. void cale(float a, float b, char oper, float *resp ) { 4. ‘switch ( oper) ( 5 case'+': *resp=a +b: break 6 case": *resp= a -b ; break; 7. case": ‘resp =a‘ b; break 19. if((x>0) &&(y>0)){ 8 case’: *resp= a/b ; break 20 cale( x, y,"#", &result ) 9} 24 printf (" Adicao: %.1fin", result ) 10.3 22. calc(X, y,"-", &result ) 23. printf (" Subtracao: %.1fn", result ) 14. int main () { 17. cale (x, yy""", Sresult ); 12, floatx, y, result= 0 18. printf (" Multiplicacao: %.1fin’, result); 13. system("cls"); 19, cale( x,y, ‘7, Sresult ); 14. printf ("Primeiro numero: ") ; 20 printf (" Divisao: %. fin’, result) 15. scanf("%f', & ) 21} 16. _printf("Segund numero: "); 22. printf (“ininin" ) 17. scanf("%f", &y ) 23. system("pause") ; 18. printf ("\ninin" ); 24. retum 0 25.} Tee Exercicios FUNCOES 82 1. O que seré exibidona tela apés a execucdodo programaabaixo? 1. #include 2. #include 3. #include 16. void f_03( char e2){ 4. void f_01(intn); 17. printt("%e" 62); 5. void #_02(chare1 ) 18.) 6. void £_03(chare2); 19. void f_04 (int n) { 7. int main ( ){ 20. intlin, col 8. intt=3; 24. for( in =45 in <=; lin ++) { 8 £01(t); 22. for(col= 1; col <=n; col++) 10. system ("pause") ; 23, if (in +01) %2 ==0) 11. retum 0 24 £02(%' ); 12.) 25. else Digite o programa fezendoes 26. £03 (4); 43. void £_02(charet){ | seguintes substiuigSes: 27. printf ("\n") 44. “cope 28. 3} 18) Lina 14. printf( “%e", 218) ; 28. print( rian"): Lina 17_printf( "%6e", 176); 30.) CI Exercicios FUNCOES 83 2. O que serd exibidona tela apés a execucdodo programaabaixo? 1. #include 2. #include # include 2 void p (int , int y, int 2) { exty+ 2 printf("n %d %d %d \nin", x, y,*2); system("pause"), erxnoaE 9. int main ( ){ 10. inta=8,b= 14. p(a,b, &e); 12, p(7.atb+e, 8a) 13. p(a*b,a %b, &c); 1 14. getch(); 15, retum 0; 16.} Tee Exercicios FUNCOES 84 3. Escreva funcao quetroqueo contetido de2 varidveisinteiras passadas como parametro por referencia. 4, Criaruma fungéo para recebero ano corrente e o anode nascimento deuma pessoa. Em seguida retornaraidadeda pessoa. 5. Facaum programa quesimule uma Calculadora, utilizando para cada operacdobasicauma funcao. Crie no programa principalum menu de opgdes conforme o lay-out abaixo: Calculadora Digite 0 primeiro nimero > __ Digite 0 segundo niimero— _ Escolha: 1. Adig&o 2. Subtragéo 3. Multiplicago 4. Dwvis80 Opcio— _ 6. Dadoo numero dotelefone de uma residéncia, o numerode pulsos registrados para chamadas locais e o valor total de todas as chamadas interurbanas, fazer um programaem C que controle a conta telefonicade 50 residéncias contendoas seguintes fungées: a) Para entrada dos dados (variaveis locais); b) Para clculo do valor total da conta telefénica. Sabendo-se que o valor total da conta telefénica= |. numero de pulsos locais x 0.127 + valor total de interurbanos; Exercicios FUNCOES 7. O que serd exibidona tela apés a execucaodo programaabaixo? 1 2 3 " 13, 14, 45, 16. 17. 18, #include # include void b(int a, int aa){ int 2a; printf("%d Sd Yd\n", a, aa, aaa); a=10; aa = 10 aaa = 10; Print{("%d %d Yodin", a, aa, aaa); void c(int *aga, int “aa){ int a; printf("%hd Sd Ydin", a, Yaa, *aaa): a= 10; ‘aaa = 10; printf("%d %d %dln", a, *aa, *aaa); } 85 19. int main (){ 20. 24 22 23. 24, 25. 26. 27. 28.} int a=1, aa =2, aaa =3: printf("%od %d %din", a, aa, aaa): blea, a); printf("%d %d_ %din" c(8aa, &aaa) printf("%od Y%d %d system("pause’); return 0 , a2, a2a); 22, aza): Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO STRUCTS Ei ea PC STRUCTS 87 + Emalgoritmos utilizamos doistipos de estuturas de dados: + estruturas homogéneas: podem conter colesSes de dados de mesmotipo. + estruturas heterogéneas: podem contercolecesde dados de tipos diferentes entre si + Estruturas/Registro é ume colegio de dados de tipos diferentes. + Estruturas/Registros so conjuntos de informacdes|ogicamente relacionadas. Na linguagem de programacao C, registros séo chamados de structs. + Utlizamos structs em varios casos, por exemplo: + informagSespessoais sobre umcliente de um banco. + dados sobre produtos comerciaizados em umaloja + informagées sobre veiculos produzidos em uma montadora + dados sobre inscritos em um concurso. + folha de chmada de uma turma. i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com STRUCTS 88 + Asinformagdesde um structs so denominadas campos e podemserde diferentes tipos + Para se criar uma estrutura heterogénea, cria-se um novo tipo de dado (struct). A partir disto, pode-se declarar variaveis como sendo deste novo tipe criado e utilizar dentro do algortme. Sintaxe: struct { ; ; ; + Adeciaracaode um structacima epenas define um registro e seus respectivos campos, para menipulagéo de dados é preciso declarar uma variavel por meio da sintaxe: struct ; STRUCTS 89 + Podemoscriara seguinte estrutura para armazenar informagdes pertinentas a uma pessoa: Pessoa struct regPessoa( Nome: caractere [20] char nome [20]; int idade ; Idade:inteiro jar Sexo, float peso h struct regPessoa aluno ; ‘Sexo: caractere| 1] Peso: real Entrada, saida e atribuicgao de dados em structs + Referenciamosindividualmente cada campo de um struct, indicando o nome da variavel struct seguido de um ponto eo nomedo campo. + Considerando a declarac&oacima, poderiamoster as seguintes referéncias a um campo: Entradade dados: gets ( alunc.nome ) scanf (“%6d" aluno.idade ) ; Atribuigéo: strepy ( aluno.nome, "José da Silva" ) ; aluno.peso= 75.1; Saida de dados: printf ( "%s", aluno.nome ) printf ( “%f", aluno. peso QA ee ee a ee STRUCTS 90 + Epossivelcriar um struct em que um ou mais de seus campos também sejamstructs, desde que tais structs tenham sido previamente definidos, Por exemplo: struct regData{ int dia, mes, ano ; struct regPessoa{ char nome [30]; strucut regData nascimento ; struct regPessoa amigo; + Para etribuir valores aos campos do struct amigo, podemos escrever: strepy ( amigo.nome, "Gerson Silva" ) 27; amigo.nascimento di amigo.nascimento.mes: amigo.nascimento.ano= 1970 Emr cece "ABELAS 91 + Tabela é um vator cujos elementos s&o structs sendo representada com os elementos dispostosem |linhas 0s campos emcolunas + Comoexemplo, vamos criar uma variavel para ermazenar uma agenda contendo informagdes sobre varios amigos: # define MAX 10 struct regPessoa{ nome dian _mes.n_ano_n oer rome [$0]; 0 | Gerson Siva 27 07 =| 1970 int 5 int dia_n, mes_n, ano_n Roberto Soares | 15 11 | 1971 + struct regPessoa agenda[ MAX]; n= Maria da Silva 09 05 1966 9 | Pedro Pereira 04 os | (1973 + Para atribuir valores, por exemplo, a0 segundoelemento do vetor agenda, escrevemos: strepy(agendaf]. nome, "Roberto Soares" ) agenda{1} dia_n= 15; agendaft]nes_n= 11; agenda{1].ano_n= 1971; Tee Exercicios STRUCT 92 1. Considereum bilhete de passagem de dnibus mostrado abaixo para definir a estrutura de dados necesséria. Numero da Passagem Nome Empresa Cidade de Origem Cidade de Destino Data do Embarque Horario do Embarque Assento Distancia em Km Valor AE Exercicios STRUCT 93 2. Uma companhia de turismo para fazerreservas de passagens entra com os dados cadastrais de cadapassageiro conforme abalxo: Nome: Idade Més da viagem: Prego Base +O sistema ofereceo valor a ser pago de acerdocomas regras: + se aidade for meior ou igual a 65, ou menor que 10, haveré 20% de desconto sobre preco base. + se omésda viagem for de baixa temporada (marco, abril, meio, junho, setembroou outubro) ha um desconto de mais 30% sobreo preco + Escrever um programa que Ié os dadose imprime onome do passageiro 0 preco base e o precofinal a ‘ser pago. Tee Exemplo de ordenac&o de tabelas 94 1.#include 2#tinclude 14.int main () { 3#include 45. reg vetor [MAX]; 4.#include 16. inti, ope; 17. for (i= 0;1< MAX; i++) { 5i#define MAX 5 18. system ("cls"); 49. printf( "Aluno numero %d:\n", i +1) : 6. typedef struct { 20. flush ( stdin) ; 7. charnome [10]; 21. printf "Nome: ") ; 8. floatnota ; 22. gets ( vetor [i ].nome ); 9. int faltas ; 23. printf ( "Nota: " ); 10. } regs 24. scant ( "%f", &vetor [i nota ); 25. printf ( "Faltas:") ; 11.void ord_nota ( reg v [ MAX ], int atd ) ; 26. scanf("%d", &vetor[ i] fattas ) ; 12.void ord_faltas (reg v[MAX ]. intatd):; 27} 13. void ord_nome ( reg v [ MAX ], int gtd ) ; AE 28. dot 47. for (1 = 0}1 < MAX; i++) { 29, system ("cls"); 48. printt (“%s -", vetor[l J.nome ) ; 30. printf (“Escolhauma opcaoinin” ); 49. printt (* %.2t-", vetor[1}.nota) ; 31 printf ("7. Ordena Notain” ); 50. Printr( "din", vetor [1 ]-faltas ) ; 32 printf ( “2. Ordena Faltasin’ ); 51. } 33 printf “3. Ordena Nometn’ ); 52. getch(); 34 printf "4. Sairinin’ ) ; 53. } while ( ope != 4); 36 scanf ("%d", 8ope) ; 54. getch(); 36. if (ope == 4) return 0; 55. retum 0; 37. switch ( ope ) { 56. } 38. case : ord nota ( vetor, MAX); 39. break; 40. case 2: ord faltas( vetor, MAX) ; at. break; 42. case3 : ord nome ( vetor, MAX) ; 43. break; 44. } 45 system ("cls"); 46. printf ("Dados ordenadosn”); 57. void ord_nota( reg v [MAX ], int gtd ) { 77. } 96 58. inti,j; 78.} 59. regk; 60. for(i=1;i v[j +1 ].nota) { 81. regk; 63. kevtjli 82. for(i=t;i< qtd ;it+) 64, VUE VEi+1]; 83. for (j=0;)0) { 66. } 85. kevtili 67.} 86. vEjl=v lit]; 87. VEj+1] =k; 68. void ord_faltas ( reg v [ MAX ], int gtd) { 88. ) 69. inti,j; 89.} 70. regk; 71, for(i=1;i v{ j+1 | faltas) { 74, kevtils 75. vEj]=vbit); 76. vEjtt]=k; Ciéncia da Computacao — Sistemas de Informagao PRATICAS DE PROGRAMAGAO ARQUIVOS ec ee ee ae ee ARQUIVOS 98 + Um arquivo é semelhantea um vetor, exceto por alguns motives’ + ovetor fica armazenado na meméria RAM; 0 arquivo fica armazenado em disco, + oVvetor deve ter um tamanho fixo, definido em sua declaracéo; 0 tamanho do arquivo pode variar durante a execugdodo programa + Os vetores s40 manipulados através de um indice de controle, enquanto os arquivos $40 manipulados por um ponteirode registro. + Asestruturas de dados tipo arquivo so apropriadas para organizer: + grande quantidade de dados + informagdes processadas por diversas aplicagdes + informagSes que requistam armazenamento permanente Vantagem de utilizar um arquivo: Os dados no sao perdidos entre uma execucaoe outra do programa. Desvantagem de utilizar um arquivo: O acessoa discoé muito mais lento do que o acessoa memiéria PC ARQUIVOS 99 TIPOS DE ARQUIVO TIPO TEXTO + Esto capacitados a armezenar palavras, frases e também dadosnuméricos. Os numeros, entretanto, serdo armazenados como um caractere do tipo alfanumérico. Ao serem lidos de um arquivo epassados para a memécia, os dados numéricos s8o convertidos para o seu formato original. ‘TIPO BINARIO. + Usa o sistema binario para armazanar tanto as informacdesnumeéricas, quanto as informacées literais, através do cédigo ASC, compostos por uma sequencia de bytes. + Arquivos textos séo legiveis devido a forma que os dados foram gravados, mas consumem mais espaco pera armazenamento © para acessar uma informa;aoé necessério percorrer sequencialmente 0 arquivo tornando a busca lenta. + Arquivos binarios no sao legiveis uma vez que os dados so gravados do mesmo modoque estéona maméria e consomem menosespacode meméria para o armazenamento. O acessoa uma informagao em um arquivo bindrio 6 pode serdireto tornando a busca mais répida, i Vania Cristina de Souza Pereira—2015_2 ~ Praticas de Programaco— CC/SI- www.profvaniacristina.com EXEMPLO DE MANIPULACAO DE ARQUIVO BINARIO 100 1. #include 10. int main ( ){ 2. #include 11. tpRegistroreg; 3. #include 12. FILE*arq; 13. arq= fopen( “alunos.dat","a+b") ; 4. typedef struct ( 14. if( arq==NULL) 8. charnome[ 51] ; 15. arq=fopen( “alunos.dat","wb") ; 6. charraltt}; 46 if( arq==NULL){ 7. float nota ; 47, prinif( "MO arquivo néo pode ser riadoln\n") 8. int falta ; 18. system( "pause") 9. }tpRegistro; 19. exit(1); 20.) FILE tipo de dado pera una veriivel portewe para um arquivo fopen —fun¢o para abrir um arquivo devereceberos parémetros nome do arquivo e o modo de abertura EXEMPLO DE MANIPULACAO DE ARQUIVO BINARIO 101 24. dof 22, system("els") 23. printf("Para encerrar digits "no campo Nome\nin" ) 24, printf ("Nome....:"); 25. flush stdin ) 26. gets(reg.nome) ; 27. if stremp( reg.nome,’.") I= 0) { 28. printf "Raw. :")s 29. flush (stdin); 30. gets(reg.ra); 31 printf (Nota... ") write 32. seanf(-%r, ®.nota) ; Fungo que grava os dadosom um . arquivo do tipo binari. 33. printf ("Faltas..:"); = Deve receber quatro parametros 34. seanf("9%d", Brog falta) ; + variavel que contém os 35. _if (fwrite ( Beg, sizeof (tpLista), 1,arq dados a seremgravados; 36. break; + namero de bytes dosdados 37} a serem gravados: 38. } while ( strcmp (reg.nome,".") + ndimero de vezes que a gravacdo sera executade; © + nome doarquivo onde os dados sero gravados. Tene eT EXEMPLO DE MANIPULACAO DE ARQUIVO BINARIO 102 39. system ("cls") 40. rewind (arq) ; 41, while (1){ 42. fread ®, sizeof( tpLista), 1, arq) ; 43. if (feof (arq)) 44. break ; 46. printt (“Ra %s\n", reg.ra) ; recoloca leitor de posi¢ono inicio do 46. printf (“Nome..: s\n’, regnome) arquivo 47. printf (Nota: %.1fn",reginota ); fread 16 osdados de um arquivo do tipo 48. printf ("Faltas: %d\n\n’, reg falta ) bindrio. Deve receberd perémetros: 4.) = variével que receberéos dados lidos; 50. felose(arq); = nimero de bytes dos dados que 51 serdo lidos; 52. retun0; . . = ndmero de vezes que a leitura sera 53.) executada; & - nome do arquivo onde os dados ‘esto gravados. feof _ informa se o final do arquivo fol atingido ou nao, retornando 0 ou 1 para F ou V felose —_fechaum arquivo aberto coma fungéo fopen Qa ee ee ae ed TABELA COM MODOSDE ABERTURA DE ARQUIVOS 103 MoDO | SIGNIFICADO Abre um arquivo texto para leitura. © arquivo deve exist antes de ser aberio, ‘Abrir um arquivo texto para gravago. Se o arquivo no existir, ele sera criado. Se ja existir, 0 contetido anterior sera destruido. ‘Abrir um arquivo texto para grava¢o. Os dados sero adicionadosno fim do arquivo (“append”), <6 ele jd existir, ou um novo arquivo serd criado, no caso de arquivo néo existente anteriormente. "rb" | Abre um arquivo bindrio para leitura. Igual 20 modo"r" anterior, 86 que o arquivo é binario. "wb" | Cria um arquivo binario para escrita, como no modo "w" anterior, sé que o arquivo & binario. "ab" | Actescentadados binarios no fim do arquivo, comono modo "a" anterior, sé que 0 arquivo ¢ binério. "re" | Abre um arquivo texto para leitura e gravacdo. O arquivo deve existir e pode ser modificado. va | CFi8 um arquivo texto para leitura e gravagao, Se o arquivo existir, o conteldo anterior sera destruldo, Sendo existr, sera criado nae” _|[Abreum arquivo texto para gravagdo e letra, Os dados serBoadicionadosno fim do arquivo se ele ja existi, ou um novo arquivo sera eriado, no caso de arquivo no existente anteriormente. “rb” | Abre um arquivo binério para leitura © escrita. O mesme que"r+" acima, 66 que o arquivo é binério. "wtb" | Cria um arquivo bindrio para leitura e escrita. O mesmo que "w+" acima, s6 que o arquivo é binario. warp» | Acrescente dados ou cria uma arquivo binério paraleitura e escrita. O mesmo que“a+" acima, s6 que co arquivo ébinario EXEMPLO DE MANIPULACAO DE ARQUIVO TEXTO 104 1. #include 2. #include 3. #include 4, #include 5. int main (){ 6 FILE “arg 7. char nome [30] 8. _intidade, cont= 0; 9. float attura: 10. arq = fopen("dados.txt", "a+" 41. if(arq== NULL) { 12, 13, 14, 18} printf "InErro na criagao do arquivo dados.txt") ; getch(); exit (1); EXEMPLO DE MANIPULACAO DE ARQUIVO TEXTO 16. 47, 18. 19, 20. 2. 22. 23. 24. 26. 26. 2r. 28. 29. for(53){ system ("cls") printf ("Nome |. para finalizar ):"): flush ( stdin ); gets (nome ) ; if (stremp ( nome,” break ; printf ("Idade:" ) scanf ("%i",Bidade ); printf ( "Altura: "); scant (“%f',Salture ); 0) fprintt ( arg,” %8 %l %.21 In", nome, Idade, altura) ; } folose( arq) ; Eee 105 EXEMPLO DE MANIPULACAO DE ARQUIVO TEXTO 106 30. printf "WnAberturae leitura doarquivo gravado\n" ); 31. arq = fopen("dados.txt","r") ; 32. if(arq==NULL){ 33, printf ("\nErro na abertura do arquivo dados.det") ; 34, getch() 35, ext (1); 36. } 37. while( ! feof( arq) ){ 38. fscanf( arg," %8%i Yof \n", nome, &idade, &altura) ; 30, printf ("\n Nome = %s idade = %i Altura = %.2f', nome, idade, altura ); 40. +tcont; a} 42, felose(erq); 43. printf ( “inlnArquive com %d registros, Fechando 0 arquive.\n", cont ); 44, getch(); 45. return 46.) Tee Exercicios ARQUIVOS 107 1. Facaum programa queinsira emostre os dados a seguirutilizando um arquivobinério. Nome Salario Admissao Luiz Carlos 1250,00 03/11/2008 Marcio Jose 887,00 11/09/2013 Tania Maria 270,00 1204/2001 Jose Luiz 951,00 30/03/2011 Almir Carlos 1543,00 23/01/2003 Renata Cristina 119,00 (08/05/2007 2. Fagaum programa queinsira emostre os dados a seguirutilizando um arquivotexto. Nome Salario Admissao Luiz Carlos 1250,00 03/11/2005 Marcio Jose 887,00 11/09/2013 Tania Maria 270,00 12/04/2001 Jose Luiz 951,00 30/03/2011 Almir Carlos 1543,00 23/01/2003 Renata Cristina 1189,00 (05/05/2007 AE

Você também pode gostar