Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introduc¸a˜o Revisa˜o Introduc¸ao Estrutura de Dados 6 de fevereiro de 2014 Estrutura de Dados 1 Introduc¸a˜o Revisa˜o To´picos 1 Introduc¸a˜o 2 Revisa˜o Estrutura de Dados 2 Introduc¸a˜o Revisa˜o Atenc¸a˜o Muita Atenc¸a˜o Os slides na˜o devem ser usados como u´nica fonte para os estudos. Pa´gina: http://www.uel.br/pessoal/bacarin/ (Ensino) Estes slides sa˜o disponibilizados como cortesia e na˜o como material de consulta. Eles na˜o conteˆm todo o conteu´do apresentado durante a aula. O material de consulta e o conteu´do a ser estudado sa˜o as refereˆncias bibliogra´ficas apresentadas no programa da disciplina e em artigos indicados pelo professor durante a aula. Estrutura de Dados 3 Introduc¸a˜o Revisa˜o ATENC¸A˜O SEGREDO! O professor na˜o faz ma´gica! Estrutura de Dados 4 Introduc¸a˜o Revisa˜o O que e´ esperado do aluno? PONTUALIDADE: 5 minutos antes da aula As aulas esta˜o planejadas com uma sequeˆncia que supostamente ajudara˜o a construc¸a˜o do conhecimento A vida profissional de voceˆs ja´ comec¸ou INTENSA PARTICIPAC¸A˜O NA AULA As aulas esta˜o planejadas de forma que voceˆs passem por um sequeˆncia de experieˆncias que (supostamente) propiciara˜o a construc¸a˜o do conhecimento NUNCA: navegar na Internet durante a aula por motivos alheios a disciplina (NA˜O ler email, acessar Facebook, jornais, jogos, sites,...) Estrutura de Dados 5 Introduc¸a˜o Revisa˜o O que e´ esperado do aluno? ESTUDO ORGANIZADO E DILIGENTE A aula organiza o “esqueleto” da teoria Sa˜o necessa´rias horas de estudo (texto acadeˆmico) Aula dada, aula estudada Estrutura de Dados 6 Introduc¸a˜o Revisa˜o O que e´ esperado do aluno? TRABALHAREMOS EM EQUIPE (com seriedade) ATENC¸A˜O: Qualquer dificuldade, procurar-me com total liberdade para conversarmos. Na˜o deixem que uma pedrinha se transforme em uma grande bola de neve! Estrutura de Dados 7 Introduc¸a˜o Revisa˜o De volta a 2013 R E V I S A˜ O Estrutura de Dados 8 Introduc¸a˜o Revisa˜o Varia´veis #include <stdio.h> void main (){ int a; int i; a = 0; for (i=0;i<4;i++){ a = a + i; printf(“a=%d”,a); } } Estrutura de Dados 9 Introduc¸a˜o Revisa˜o Varia´veis #include <stdio.h> void main (){ int a; int i; a = 0; for (i=0;i<4;i++){ a = a + i; printf(“a=%d”,a); } } a=0 a=1 a=3 a=6 Estrutura de Dados 9 Introduc¸a˜o Revisa˜o Apontadores void main (){ int a; int i; int *p; a = 0; p = &a; for (i=0;i<4;i++){ p = p + i; printf(“a=%d p=%d n”,a,p);} } Estrutura de Dados 10 Introduc¸a˜o Revisa˜o Apontadores void main (){ int a; int i; int *p; a = 0; p = &a; for (i=0;i<4;i++){ p = p + i; printf(“a=%d p=%d n”,a,p);} } a=0 p=-1075241724 a=0 p=-1075241720 a=0 p=-1075241712 a=0 p=-1075241700 Estrutura de Dados 10 Introduc¸a˜o Revisa˜o Apontadores void main (){ int a; int i; int *p; a = 0; p = &a; for (i=0;i<4;i++){ *p = *p + i; printf(“a=%d p=%d n”,a,p); } } Estrutura de Dados 11 Introduc¸a˜o Revisa˜o Apontadores void main (){ int a; int i; int *p; a = 0; p = &a; for (i=0;i<4;i++){ *p = *p + i; printf(“a=%d p=%d n”,a,p); } } a=0 p=-1078483164 a=1 p=-1078483164 a=3 p=-1078483164 a=6 p=-1078483164 Estrutura de Dados 11 Introduc¸a˜o Revisa˜o Apontadores void main (){ int i; int *p; for (i=0;i<4;i++){ p = malloc(sizeof(int)); *p = i; printf(“i=%d p=%d *p=%d ”,i,p,*p);} } Estrutura de Dados 12 Introduc¸a˜o Revisa˜o Apontadores void main (){ int i; int *p; for (i=0;i<4;i++){ p = malloc(sizeof(int)); *p = i; printf(“i=%d p=%d *p=%d ”,i,p,*p);} } i=0 p=141381640 *p=0 i=1 p=141381656 *p=1 i=2 p=141381672 *p=2 i=3 p=141381688 *p=3 Atenc¸a˜o: O que acontece com a memo´ria alocada? Estrutura de Dados 12 Introduc¸a˜o Revisa˜o Apontadores void main (){ int i; int *p1,**p2,***p3; i = 33; p1 = &i; p2 = &p1; p3 = &p2; printf(“i=%d p1=%d p2=%d p3=%d”,i,p1,p2,p3); printf(“*p1=%d *p2=%d *p3=%d”,*p1,*p2,*p3); printf(“**p2=%d **p3=%d”,**p2,**p3); printf(“***p3=%d”,***p3); } Estrutura de Dados 13 Introduc¸a˜o Revisa˜o Apontadores void main (){ int i; int *p1,**p2,***p3; i = 33; p1 = &i; p2 = &p1; p3 = &p2; printf(“i=%d p1=%d p2=%d p3=%d”,i,p1,p2,p3); printf(“*p1=%d *p2=%d *p3=%d”,*p1,*p2,*p3); printf(“**p2=%d **p3=%d”,**p2,**p3); printf(“***p3=%d”,***p3); } i=33 p1=-1076106848 p2=-1076106844 p3=-1076106840 *p1=33 *p2=-1076106848 *p3=-1076106844 **p2=33 **p3=-1076106848 ***p3=33 Estrutura de Dados 13 Introduc¸a˜o Revisa˜o Relembrando... Estrutura de Dados 14 Introduc¸a˜o Revisa˜o Relembrando Estrutura de Dados 15 Introduc¸a˜o Revisa˜o Func¸o˜es void f(int x){ x = x + 1; printf(“x=%d”,x); } void main (){ int i; i = 10; f(5); f(i); f(i+1); f(&i); } Estrutura de Dados 16 Introduc¸a˜o Revisa˜o Func¸o˜es void f(int x){ x = x + 1; printf(“x=%d”,x); } void main (){ int i; i = 10; f(5); f(i); f(i+1); f(&i); } x=6 x=11 x=12 x=-1075473683 Estrutura de Dados 16 Introduc¸a˜o Revisa˜o Passagem de Paraˆmetros Por Valor X Por Refereˆncia Qual a diferenc¸a? Como usar em C? Estrutura de Dados 17 Introduc¸a˜o Revisa˜o Vetores void imprima dados(int agc, int conta, int sld){ printf(“agencia = %d, conta = %d, saldo = %d”,agc,conta,sld); } void imprima(int i, int agc[], int conta[], int sld[]){ printf(“ag = %d, cta=%d, sldo=%d”,agc[i],conta[i],sld[i]); } void main (){ int ag[100], cc[100], saldo[100]; ag[0] = 100; cc[0] = 12345; saldo[0] = 100000; /* ... */ imprima dados(ag[10],cc[10],saldo[10]); imprima(10,ag,cc,saldo); } Estrutura de Dados 18 Introduc¸a˜o Revisa˜o Vetores void imprima dados(int agc, int conta, int sld){ printf(“agencia = %d, conta = %d, saldo = %d”,agc,conta,sld); } void imprima(int i, int agc[], int conta[], int sld[]){ printf(“ag = %d, cta=%d, sldo=%d”,agc[i],conta[i],sld[i]); } void main (){ int ag[100], cc[100], saldo[100]; ag[0] = 100; cc[0] = 12345; saldo[0] = 100000; /* ... */ imprima dados(ag[10],cc[10],saldo[10]); imprima(10,ag,cc,saldo); } Se ordenarmos algum dos vetores, o que acontece? Estrutura de Dados 18 Introduc¸a˜o Revisa˜o Strings void main (){ char *s1; char s2[5]; char *s3=“abcde”; int j; int i = strlen(s3); printf(“compr s3= %d”,i); for (j=0;j<i;j++){ s2[j]=s3[j];} printf(“s2 = %s”,s2); s1 = malloc(i*sizeof(char)+1); strcpy(s1,s3); printf(“s1 = %s compr s1 = %d”,s1,strlen(s1)); } Estrutura de Dados 19 Introduc¸a˜o Revisa˜o Strings void main (){ char *s1; char s2[5]; char *s3=“abcde”; int j; int i = strlen(s3); printf(“compr s3= %d”,i); for (j=0;j<i;j++){ s2[j]=s3[j];} printf(“s2 = %s”,s2); s1 = malloc(i*sizeof(char)+1); strcpy(s1,s3); printf(“s1 = %s compr s1 = %d”,s1,strlen(s1)); } O for esta’ correto? Pode funcionar? Sempre? Se s3=“abcdefgh”? Por que o +1 e´ importante? Estrutura de Dados 19 Introduc¸a˜o Revisa˜o struct StCC{ int ag; int cc; int sld; }; void imprima dados(struct StCC c){ printf(“ag=%d, cc=%d, sldo=%d”,c.ag,c.cc,c.sld); } void imprima(int i, struct StCC c[ ]){ printf(“ag=%d, conta=%d, saldo=%d”,c[i].ag,c[i].cc,c[i].sld); } void main (){ struct StCC contas[100]; ctas[0].ag = 100; ctas[0].cc = 1234; ctas[0].sld = 1000; /* Outras inicializac¸o˜es de ctas... */ imprima dados(ctas[10]); imprima(10,ctas); } Estrutura de Dados 20 Introduc¸a˜o Revisa˜o struct StCC{ int ag; int cc; int sld; }; void imprima dados(struct StCC c){ printf(“ag=%d, cc=%d, sldo=%d”,c.ag,c.cc,c.sld); } void imprima(int i, struct StCC c[ ]){ printf(“ag=%d, conta=%d, saldo=%d”,c[i].ag,c[i].cc,c[i].sld); } voidmain (){ struct StCC contas[100]; ctas[0].ag = 100; ctas[0].cc = 1234; ctas[0].sld = 1000; /* Outras inicializac¸o˜es de ctas... */ imprima dados(ctas[10]); imprima(10,ctas); } Se ordenarmos o vetor, o que acontece? Estrutura de Dados 20 Introduc¸a˜o Revisa˜o struct String{int len; char *s;}; struct String new string(char *s){ struct String res; int i; res.len = strlen(s); res.s = malloc(res.len); for(i=0;i<res.len;i++){res.s[i] = s[i];} return res; } void print(struct String *str){ int i; for(i=0;i<str→len;i++){printf(“%c”,str→s[i]);} } void main (){ struct String str1; str1 = new string(“abacaxi”); print(&str1); } Estrutura de Dados 21 Introduc¸a˜o Revisa˜o struct String{int len; char *s;}; struct String new string(char *s){ struct String res; int i; res.len = strlen(s); res.s = malloc(res.len); for(i=0;i<res.len;i++){res.s[i] = s[i];} return res; } void print(struct String *str){ int i; for(i=0;i<str→len;i++){printf(“%c”,str→s[i]);} } void main (){ struct String str1; str1 = new string(“abacaxi”); print(&str1); } struct String *concat string(struct String *str1,struct String *str2); Estrutura de Dados 21 Introduc¸a˜o Revisa˜o Exerc´ıcio Suponha que um jogo e´ composto por va´rios cena´rios (fases). O jogador sempre esta´ localizado dentro de um cena´rio. Quando o jogador termina aquela fase, ele pode mover-se para o cena´rio Superior, Inferior, em Frente ou Atra´s e assim, sucessivamente. Quando o jogador entra num cena´rio, ele recebe uma certa quantidade de tiros, de vidas. Cada cena´rio conte´m um determinado nu´mero de atacantes (inimigos), armas de ataque e de defesa que ele pode obter. Cada cena´rio tem um nome. Fac¸a um programa que permita a construc¸a˜o e a navegac¸a˜o pelos cena´rios. Em cada cena´rio, mostre suas informac¸o˜es. Estrutura de Dados 22 Introdução Revisão
Compartilhar