Home

Prof. Luiz Gustavo Turatti (PED-A)

image

Contents

1. A fun o fseek retorna zero se houve sucesso ou um valor nao zero se houve falha no posicionamento do localizador de posi ao do arquivo Utilitario de vizualizacao de disco usando fseek Visualiza setores de 128 de bytes do disco e apresenta em ASCII e hexadecimal digite 1 para sair do programa finclude lt stdio h gt finclude lt ctype h gt finclude lt stdlib h gt fdefine TAMANHO 128 char buf TAMANHO void display main int argc char argv 105 UNICAMP Universidade Estadual de Campinas Instituto de Computa o FILE fp long int setor numlido if argc 2 puts Uso tmp nome do arquivo exit 1 if fp fopen argv 1 rb NULL puts Nao posso abrir arquivo exit 1 for printf Informe o setor 1 p terminar scanf 1d amp setor if setor lt 0 break if fseek fp setor TAMANHO SEEK_SET puts Erro de busca exit 1 if numlido fread buf 1 TAMANHO fp TAMANHO puts EOF encontrado display numlido return 0 void display long int numlido long int i j for i 0 i lt numlido 16 i controla a indexa ao de linhas 0 a 8 128 16 8 for j 0 j lt l6 j printf 2X buf 1 16 5 imprime 16 col em hexa printf separa mostrador hexa do ascii for j 0 j lt 16 j imprime 16 col em ascii s
2. for c 0 c lt ncol3 c printf 2d m3 1 cl printf An return 0 12 1 Lineariza o de Matrizes Matrizes tamb m podem ser representadas na forma unidimensional isto muito comum em processamento de imagens por exemplo Considere a matriz da figura 1 Podemos armazenar seus elementos da esquerda para a direita e de cima para baixo iniciando em 0 0 at NLin 1 NCol 1 em um vetor de NLin X NCol vari veis Para saber o ndice i do elemento do vetor correspondente a vari vel m l c da matriz faremos i 1 NCol c O processo inverso dado por c 1 NCol e l i NCol A figura 2 ilustra a lineariza o de uma matriz m 3 2 em um vetor v 6 m 0 0 m 0 1 0 1 m 1 0 m 1 1 2 3 m 2 0 m 2 1 4 onannt vli i c I ncol ncol 2 c i ncol 2 l i ncol vli m l c m l c Figura 2 Matriz m 3 2 linearizada em vetor v 6 onde v i m l c 57 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 12 2 Exerc cios Laborat rio 6 Consulte os livros de lgebra linear e 12 2 1 Escreva um programa para calcular a transposta de uma matriz 12 2 2 Escreva um programa para calcular o determinante de uma matriz 12 2 3 Escreva um programa para inverter uma matriz 58 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 13 Cadeia de Caracteres Strings e Convers es Uma cadeia de caracteres str
3. Colocar em ordem crescente por Insercao for j 1 j lt 10 j Insere a nota da posicao j na posicao correta da sequencia ja ordenada da posicao 0 ate j 1 i j while i gt 0 amp amp nota i lt nota i 1 troca as notas das posicoes i e i 1 nota i nota i nota i 1 nota i 1l nota i nota i l nota i nota i nota i l a Imprime as notas ordenadas for i 0 i lt 10 i printf 2f notal il printf n return O Observe que no pior caso o n mero de compara es e trocas n n 1 2 onde n o 2 2 2 P tamanho do vetor Portanto o algoritmo tamb m O n apesar do n mero maior de trocas 11 3 Ordena o por permuta o A id ia b sica simular o processo de eboli o de uma bolha de ar dentro d gua buble sort A cada passo a maior nota que representa a bolha deve subir at a superf cie Ou seja trocas s o executadas do in cio para o final do vetor at que a maior nota fique na ltima posi o ainda n o usada tinclude lt stdio h gt int main float nota 10 int ipj 53 UNICAMP Universidade Estadual de Campinas Instituto de Computa o printf Entre com 10 notas for 1 0 i lt l0 i scanf f amp nota i Colocar em ordem crescente por Permutacao for j 9 j gt 0 j Seleciona a maior nota entre cada par de notas consecutivas faz a troca se necessario
4. exit 1 o c digo a seguir l a matriz inteira em um nico passo if fread exemplo sizeof exemplo 1 fp 1 puts Erro ao ler arquivo exit 1 for i 0 i lt 10 i for j 0 j lt 10 j printf 3 1f exemplo il 51 printf An fclose fp return O 104 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 20 7 Acesso rand mico a arquivos A fun o fseek indica o localizador de posi o do arquivo Prot tipo tinclude lt stdio h gt main int fseek FILE fp long numbytes int origem Onde e fp um ponteiro para o arquivo retornado por uma chamada fopen e numbytes long int o n mero de bytes a partir da origem at a posi o corrente e origem uma das seguintes macros definidas em stdio h Origem Nome da Macro Valor num rico come o do arquivo SEEK SET 0 posi ao corrente SEEK_CUR 1 fim do arquivo SEEK_END Portanto para procurar numbytes do come o do arquivo origem deve ser SEEK_SET Para procurar da posi o corrente em diante origem SEEK_CUR Para procurar numbytes do final do arquivo de tr s para diante origem SEEK_END O seguinte trecho de c digo l o 235 byte do arquivo chamado test FILE fp char ch if fp fopen teste rb NULL puts Nao posso abrir arquivo exit 1 fseek fp 234 SEEK SET ch getc fp l um caractere na posi ao 235
5. Desenvolvimento de novos m todos de trabalho Constru o de aplica es autom ticas Melhoria de m todos e aplica es existentes 1 2 2 Defini o de computador aparelho concebido para desempenhar c lculos e opera es l gicas com facilidade rapidez e confiabilidade segundo instru es programas nele introduzidas constitu do de um modo geral por unidade s de entrada unidade de processamento central C P U unidade de armazenamento principal permanente mem ria tempor ria e unidade s de sa da 1 2 3 Hist rico dos computadores Rela o hist rica da m quina de calcular ao computador pessoal 3500 A C baco Egito Dispositivo manual de c lculo 2600 A C baco China posteriormente chamado de Suan Pan Depois apareceu no Jap o e foi chamado de Soroban At o s culo XVII era o mais r pido m todo de calcular 1500 D C Calculadora mec nica de Leonardo da Vinci 1614 Logaritmos John Napier Ossos de Napier 1621 R gua de c lculo Willian Oughtred 1642 M quina aritm tica Blaise Pascal Pascalina 1672 Calculadora universal Gottfried Wilhelm Von Leibniz 1822 M quina das diferen as de Charles Babbage somente projetada 1833 M quina anal tica Charles Babbage e Ada Augusta Byron 1895 M quina de Herman Hollerith UNICAMP Universidade Estadual de Campinas Instituto de Computa o 1900 M quina de Turing Alan M Turing Teo
6. O operador de incremento serve para aumentar enquanto o de decremento serve para reduzir o valor conte do de uma vari vel em uma unidade Sua aplica o demonstrada a seguir 32 UNICAMP Universidade Estadual de Campinas Instituto de Computa o include lt stdio h gt int main int a 10 b 0 Mostra printf A SdinB Sdin a b A 10 B 0 b a a printf A SdinB Sdin a b A 10 B 100 b a a printf A SdinB S din a b A 11 B 100 b a a printf A SdinB din a b A 12 B 144 b a ta printf A SdinB din a b A 11 B 144 b a a printf A SdinB Sdin a b A 10 B 100 return O Podemos ainda utilizar algumas formas contra das de opera es Comando Exemplo Corresponde a a b a a t b a b a a _ b K a b asas nps a b a a LB amp a b a a 3 b 7 2 Operadores Relacionais Sempre retornam valores l gicos verdadeiro ou falso Para estabelecer prioridades no que diz respeito a qual opera o executar primeiro utilize os par nteses Os operadores relacionais s o include lt stdio h gt int main Descri o Operador Igual a int verdadeiro falso Diferente de l verdadeiro 15 lt 20 falso 15 20 Maior que printf Verdadeiro d n verdadeiro Menor que lt printf Falso din falso Maior ou igua
7. f amp notal i Colocar em ordem crescente por Selecao for j 9 j gt 1 j Seleciona a maior nota entre j notas e troca a com a da posicao j jm j for i 0 i lt j i if nota i gt nota jm jm i troca if j jm nota j nota j nota jm nota jm nota j nota jm nota j nota j nota jm Imprime as notas ordenadas for i 0 i lt 10 i printf 2f notal il printf An return O Observe que no pior caso teremos n n 1 2 compara es entre notas e n 1 trocas onde n o tamanho do vetor Dizemos ent o que o algoritmo executa em tempo proporcional ao quadrado do n mero de elementos e adotamos a nota o O n O processo de ordena o tamb m n o usa nenhum vetor auxiliar portanto dizemos que a ordena o in place Esta observa o se aplica aos outros m todos abaixo 52 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 11 2 Ordena o por inser o A ordena o por inser o insertion sort se assemelha ao processo usado para ordenar cartas de um baralho A cada passo n s ordenamos parte da segii ncia e a id ia para o passo seguinte inserir a pr xima nota na posi o correta da segii ncia j ordenada no passo anterior tinclude lt stdio h gt int main float nota 10 TNT printf Entre com 10 notas for i 0 i lt 10 i scanf f amp notal i
8. preto d O ltimo colocado est atr s da Lola e Senna est atr s de um carro branco f Se invertessem a ordem a equipe Tasman ficaria em primeiro 11 UNICAMP Universidade Estadual de Campinas Instituto de Computa o g O carro da equipe Brabham vermelho h O carro do 5 colocado preto 1 Richie o piloto da equipe Lotus j O dono do carro verde Luyendyk k A equipe de Minardi est entre as equipes Lotus e March D Patrese Rosset Luyendyk e Eddie n o conseguiram ficar em 1 lugar Ordem Piloto Equipe Cor do carro 1 Do 3 4 5 6 2 1 4 Instru es Na linguagem comum entende se por instru es um conjunto de regras ou normas definidas para a realiza o ou emprego de algo Em inform tica por m instru o a informa o que indica a um computador uma a o elementar a executar Conv m ressaltar que uma ordem isolada n o permite realizar o processo completo para isso necess rio um conjunto de instru es colocadas em ordem segiiencial l gica Por exemplo se quisermos fazer uma Omelete de batatas precisaremos colocar em pr tica uma s rie de instru es descascar as batatas bater os ovos fritar as batatas etc evidente que estas instru es devem ser executadas em uma ordem adequada como n o descascar as batatas depois de frit las por exemplo Dessa maneira uma instru o tomada em se
9. 3 0 a nota 1 10 0 a nota 2 7 0 printf 6d s 5 2f 5 2f 5 2f n a RA a nome a nota 0 a notalll a nota 2 return O Observe que cada campo do registro uma vari vel de qualquer tipo v lido incluindo um outro registro vetor matriz etc finclude lt stdio h gt typedef struct ponto float x float y Ponto typedef struct reta Ponto pl Ponto p2 Reta Pontos consecutivos sao interligados por segmento de reta typedef struct curva Ponto pt 100 int npts 83 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Curva int main Reta r Curva C int i Ler os pontos da reta scanf f S sr pl x amp r pl y scanf Sf SE amp r p2 x amp r p2 y Ler os pontos da curva scanf d amp c npts for i 0 i lt c npts i scanf sf f amp c pt i c amp c pt i y Complete o programa para que ele verifique se xiste interseccao entre a curva e a reta return 0 Vetores de registros podem ser usados para armazenar base de dados ou parte da base em mem ria O programa abaixo ilustra o armazenamento de uma mini base com 5 nomes e 5 telefones include lt stdio h gt include lt string h gt typedef struct _agenda char nome 50 int telefone Agenda int main Agenda amigo 5 char nome aux 50 int i comp printf Entre com os nomes An for i 0 i
10. Vetores Nas aulas anteriores vimos que uma vari vel simples est associada a uma posi o de mem ria e qualquer refer ncia a ela significa um acesso ao conte do de um peda o de mem ria cujo tamanho depende de seu tipo Veremos agora mais um dos tipos simples de estrutura de dados denominada vetor O vetor permite associar um identificador a um conjunto de vari veis simples de um mesmo tipo cuja sintaxe apropriada ser apresentada a seguir int main tipo identificador quantidade de vari veis Um vetor um conjunto de posi es consecutivas de mem ria identificadas por um mesmo nome individualizadas por ndices e cujo conte do do mesmo tipo Consideremos a leitura de 10 notas de alunos e ap s o c lculo da m dia geral da classe verificar e mostrar as notas acima da m dia Precisamos armazenar cada nota em uma vari vel para realizar tal opera o e assim utilizando um vetor podemos ter o conjunto de 10 notas associado a um nico identificador Imagine a situa o mencionada para dezenas de alunos A cria o de uma vari vel para a nota de cada aluno se tornaria algo complicado de programar Com um vetor para as 10 notas teremos float nota 10 A refer ncia ao conte do da n sima vari vel indicada pela nota o nota n 1 onde n uma express o inteira ou uma vari vel inteira Em outras palavras o ndice do vetor ser de zero 0 a quantidade 1 Programa Melhores notas in
11. du33 e c d quociente dividendo divisor c 1 divis o inteira e o c d resto dividendo divisor c 2 resto da divis o inteira return 0 6 4 Manuseio de Caracteres Lembrando que o tipo char puro ou seja sem o uso de vetores permite a leitura e escrita de apenas um nico caractere podemos converter uma entrada em min sculo para mai sculo com o programa abaixo Maiores detalhes sobre convers es de tipos ser o vistos nas pr ximas aulas include lt stdio h gt include lt stdlib h gt int main void char c printf Digite uma letra a z c getchar if c gt a amp amp c lt z c char int A int c int a putchar c putchar n getchar pausa para visualizar resultado return O 30 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 6 5 Lineariza o de equa es Os programas de computador trabalham com equa es numa nica linha ou seja necess rio adequar as equa es para obter o resultado desejado Considere o exemplo M dia Hota 1 Mota 2 Hota 3 Nota 4 4 Para calcular a m dia faremos M dia Notal Nota2 Nota3 Nota4 4 Errado Note que se utilizar a f rmula errada a m dia informada apenas dividir a Nota4 por quatro enquanto o correto dividir a soma de todas as notas por quatro Para obter o resultado desejado basta agrupar a somat ria das notas com par nte
12. es necess rias para implementar uma lista encadeada 19 1 1 Fun o de inicializa o A fun o que inicializa uma lista deve criar uma lista vazia sem nenhum elemento Como a lista representada pelo ponteiro para o primeiro elemento uma lista vazia representada pelo ponteiro NULL pois n o existem elementos na lista A fun o tem como valor de retorno a lista vazia inicializada isto o valor de retorno NULL Uma poss vel implementa o da fun o de inicializa o mostrada a seguir fun o de inicializa o retorna uma lista vazia Lista inicializa void return NULL 86 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 19 1 2 Fun o de inser o Uma vez criada a lista vazia podemos inserir novos elementos nela Para cada elemento inserido na lista devemos alocar dinamicamente a mem ria necess ria para armazenar o elemento e encade lo na lista existente A fun o de inser o mais simples insere o novo elemento no in cio da lista Uma poss vel implementa o dessa fun o mostrada a seguir Devemos notar que o ponteiro que representa a lista deve ter seu valor atualizado pois a lista deve passar a ser representada pelo ponteiro para o novo primeiro elemento Por esta raz o a fun o de inser o recebe como par metros de entrada a lista onde ser inserido o novo elemento e a informa o do novo elemento e tem como valor de retorno a
13. tinclude matriz h int main int argc char argv Contorno c Matriz m if argc 4 printf uso s lt numero de pontos gt lt numero de Jlinhas gt lt numro de colunas gt in argv 0 exit 1 113 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Cc m CriaContorno atoi argv 1 CriaMatriz atoi argv 2 atoilargv 31 DestroiContorno c DestroiMatriz m return 0 Bibliografia consultada CELES W RANGEL J L Listas Encadeadas PUC Rio FALC O Alexandre Xavier Notas de aula MC 102 IC UNICAMP 2008 FORBELLONE Andr Luiz Villar Ebersp cher Henri Frederico L gica de Programa o A Constru o de Algoritmos e Estrutura de Dados 2 edi o MAKRON S o Paulo GOTTFRIED Byron S Programando em C Ed Makron Books 1993 SP MANSSOUR Isabel Linguagem de Programa o C Ponteiros 2008 MANZANO Jos Augusto N G OLIVEIRA Jayr Figueiredo de Algoritmos L gica para Desenvolvimento de Programa o 3 edi o EDITORA ERICA S o Paulo MAYER Roberto C Linguagem C ANSI Guia do usu rio Ed McGrawHill SP 1989 MEIRELLES Fernando de Souza Inform tica Novas aplica es com microcomputadores 2a Ed S o Paulo Makron Books 1994 MORAES Paulo S Curso de L gica de Programa o DSC Unicamp 2000 SCHILDT Herbert C Completo e Total 3a Ed S o
14. 14 07 2009 Exame Final Programa do Curso ementa T picos a serem discutidos durante o semestre Introdu o Computa o Algoritmos e Programas Vari veis e Atribui es Comandos Condicionais Comandos de Entrada e Sa da Comandos de Repeti o Vetores e Matrizes Cadeia de caracteres strings 9 Fun es iterativas e recursivas 10 Registros Estruturas 11 Listas ligadas 12 Arquivo texto e bin rio 13 Outros T picos OO ENA E E Neste semestre ser utilizada a linguagem de programa o C IDE DevC em ambiente Windows Atendimento Ocorrer logo ap s o t rmino de cada aula e eventualmente atrav s de e mail para esclarecimento de d vidas Exerc cios Durante o curso ser o indicados v rios exerc cios pr ticos e te ricos N o ser exigida a entrega de todos mas os conhecimentos adquiridos durante a resolu o deles que ser cobrada nas avalia es Fregii ncia O limite de faltas de 25 do total das aulas previstas Faltas n o podem ser abonadas sob hip tese alguma legisla o do MEC nica Exce o Caso algu m tenha problemas de sa de que impe am o seu comparecimento s aulas por per odos mais longos ent o o aluno deve entrar com um requerimento de regime especial junto Diretoria Acad mica DAC Isto pode ser feito por terceiros e ap s a entrada de tal pedido o aluno tem o direito de realizar as provas em casa enquanto estiver convalescen
15. Existe uma infinidade de diagramas para diversos tipos de rela es Diagrama de auditoria Este diagrama utilizado para documentar e analisar processos financeiros Fluxograma b sico Serve para documentar procedimentos fluxo de trabalho ou de informa es Diagrama de causa e efeito Muito utilizado para complemento de implanta o de Sistema de Qualidade conhecido tamb m como diagrama de Ishikawa Fluxograma multifuncional Utilizado para apresentar o processo de unidades organizacionais e seus respectivos respons veis pelo processo Diagrama de fluxo de dados Trata se de fluxo l gico de dados utilizado para documentar procedimento de informa o de dados e armazenamento Diagrama SDL Utilizado na documenta o e an lises de sistemas de rede de comunica o e telecomunica o por meio de linguagem Diagrama TQM Serve para gerenciamento de qualidade total melhoramento cont nuo e solu es de problemas voltados qualidade Diagrama de Fluxo de Trabalho Automa o de processos industriais cont beis entre outros 116
16. ateh que a maior nota seja inserida na posicao j 1 for i 0 i lt j i if nota i gt nota i 1 troca as notas nota i nota i 1 nota i nota i 1 notal i nota i 1 notal i notal i nota i 1 Imprime as notas ordenadas for i 0 i lt 10 i printf 2f notal il printf n return 0 No pior caso temos n n 1 2 compara es e trocas onde n o tamanho do vetor Portanto o algoritmo O n com n mero de trocas equivalente ao da ordena o por inser o 11 4 Exerc cios 11 4 1 Refa a o programa de busca bin ria 10 2 4 utilizando cada um dos tr s algoritmos acima para ordenar o vetor 11 4 2 Fa a um programa que leia dois vetores com 20 posi es de n meros reais distintos em ordem crescente e gere um terceiro vetor mantendo a ordem por intercala o de valores dos outros dois 54 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 12 Vetores Multidimensionais Matrizes Os vetores tamb m podem possuir m ltiplas dimens es quando declaramos um identificador que um vetor de vetores de vetores define N1 10 define N2 10 define Nn 50 int main tipo identificador N1 N2 Nn No caso bidimensional por exemplo o identificador chamado de matriz e corresponde ao que entendemos no ensino b sico por matriz figura 1 onde s o respeitados os ndices conforme
17. float b float h H typedef struct retangulo Retangulo struct triangulo float b float h H typedef struct triangulo Triangulo struct circulo float r b typedef struct circulo Circulo O n da lista deve ser composto por tr s campos e um identificador de qual objeto est armazenado no n e um ponteiro para a estrutura que cont m a informa o e um ponteiro para o pr ximo n da lista importante salientar que a rigor a lista homog nea no sentido de que todos os n s cont m as mesmas informa es O ponteiro para a informa o deve ser do tipo gen rico pois n o sabemos a princ pio para que estrutura ele ir apontar pode apontar para um ret ngulo um tri ngulo ou um c rculo Um ponteiro gen rico em C representado pelo tipo void A fun o do tipo ponteiro gen rico pode representar qualquer endere o de mem ria independente da 91 UNICAMP Universidade Estadual de Campinas Instituto de Computa o informa o de fato armazenada nesse espa o No entanto de posse de um ponteiro gen rico n o podemos acessar a mem ria por ele apontada j que n o sabemos a informa o armazenada Por esta raz o o n de uma lista gen rica deve guardar explicitamente um identificador do tipo de objeto de fato armazenado Consultando esse identificador podemos converter o ponteiro gen rico no ponteiro espec fico para o objeto em quest o e ent o acessarmos os campos
18. lise de modifica es exibindo todos os pontos que ser o por elas afetados Facilita a inclus o de atualiza es ou modifica es exibindo os pontos de altera o de forma clara e imediata Permite a compara o entre v rios fluxos ou v rias alternativas de solu o de problemas Padroniza as eventuais transi es e facilita o trabalho de leitura posterior 3 5 Desvantagens As mais importantes que podem ser destacadas n o s o origin rias da ferramenta em si mas dos profissionais que a utilizam S o elas V cio no uso exclusivo de fluxogramas n o percebendo as implica es t cnicas com outras ferramentas um esquema um diagrama e portanto nunca ir detalhar a realidade com o envolvimento de pessoas que fazem o sistema vivo e din mico Em nome da simplicidade acabamos omitindo pequenas informa es que muitas vezes s o cruciais ao sistema Os s mbolos apresentados permitem varia es e adapta es onde o analista cria uma s rie de aplica es pessoais e particulares que ningu m somente ele entende 20 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 3 6 Exemplos de fluxogramas Dentro do s mbolo sempre teremos algo escrito pois somente os s mbolos n o nos dizem nada Veja no exemplo a seguir Chupar uma bala Calcular uma m dia com quatro notas IN CIO Receber N1 Receber N2 RETIRAR O PAPEL Receber N3 CHUPAR A BALA JOGAR O PAPEL Rece
19. meio amp amp j lt fim if v i lt v j vaux k v i i k else vaux k v 5 j k for i i i lt meio i k vaux k v i for j j j lt meio j k vaux k v 5 Copia de volta para v for i inicio i lt fim i v i vaux i void MergeSort int v int inicio int fim int meio if inicio lt fim meio inicio fim 2 MergeSort v inicio meio MergeSort v meio 1 fim Intercala v inicio meio fim Uma desvantagem do algoritmo acima por m a necessidade de mem ria auxiliar na fun o de intercala o do mesmo tamanho da entrada Isto pode ser um problema para sequ ncias muito grandes Outro algoritmo que usa indu o forte tem complexidade O n log n no caso m dio e O n2 no pior caso mas n o requer mem ria auxiliar o quick sort Este algoritmo particiona a sequ ncia 81 UNICAMP Universidade Estadual de Campinas Instituto de Computa o em duas parte de tal forma que todos os elementos da primeira parte s o menores ou iguais aos da segunda A sequ ncia ordenada repetindo se este processo de forma recursiva para cada parte void QuickSort int v int inicio int fim int p if inicio lt fim p Particiona v inicio fim QuickSort v inicio p QuickSort v p 1 fim 17 3 Exerc cios 17 3 1 Escreva as fun es de ordena o de forma recursiva por sele o e por
20. o Para exemplificar a diferen a duas vers es da fun o putstr ser o apresentadas Indexa s como uma matriz void puts char s 67 UNICAMP Universidade Estadual de Campinas Instituto de Computa o register int t for t 0 s t t putchar s t 4 Acessa s como um ponteiro void putstr char s while s putchar s Ponteirostamb m podem ser organizados em matrizes como qualquer outro tipo de dado A declara o de uma matriz de ponteiros int de tamanho 10 int x 10 Para atribuir o endere o de uma vari vel inteira chamada var ao terceiro elemento da matriz de ponteiros fazemos x 2 amp var Para mostrar o valor de var usamos printf sd x 2 Se for necess rio passar uma matriz de ponteiros para uma fun o pode ser usado o mesmo m todo que utilizado para passar outras matrizes simplesmente chame a fun o com o nome da matriz sem qualquer ndice Por exemplo a seguinte fun o recebe a matriz x como par metro void display array int q int t for t 0 t lt 10 t printf gd glt Neste caso importante lembrar que q n o um ponteiro para inteiros q um ponteiro para uma matriz de ponteiros para inteiros Portanto necess rio declarar o par metro q como uma matriz de ponteiros para inteiros como declarado acima Matrizes de ponteiros s o usadas normal
21. objeto n o execut vel Os respectivos arquivos com extens o o podem ser colocados em mc102 obj Para que as estruturas e fun es desses arquivos sejam disponibilizadas para uso por programas os arquivos objeto devem ser ligados em um arquivo com extens o a ex arquivo biblioteca de fun es O script Makefile abaixo realiza esta tarefa colocando a biblioteca libmc102 a no diret rio mc102 lib O Makefile fica no diret rio mc102 LIB 1ib INCLUDE include BIN SRC src OBJ 0bj FLAGS g Wall FLAGS 03 Wall libmc102 LIB libmc102 a echo libmc102 a construida com sucesso LIB libmc102 a N OBJ contorno o N OBJ matriz o ar csr LIB libmc102 a OBJ contorno o N OBJ matriz o OBJ contorno o SRC contorno c gcc S FLAGS c SRC contorno c IS INCLUDE o OBJ contorno o za y OBJ matriz o SRC matriz c gcc S FLAGS c SRC matriz c I INCLUDE o OBJ matriz o EA apaga rm S OBJ o apagatudo rm S OBJ o rm S LIB a 21 1 Programas Todo programa que quiser usar as estruturas e fun es da biblioteca libmcl02 a devem incluir os arquivos h da biblioteca e devem ser compilados com o comando abaixo Suponha por exemplo que o programa prog c est no mesmo n vel do diret rio mc102 prog c tinclude contorno h tinclude matriz h int main t Contorno
22. que pode estar associada a uma unidade disco porta serial entre outras 97 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 20 1 Fun es mais comuns do sistema de arquivo Fun o Opera o fopen Abre um fluxo fclose Fecha um fluxo putc Escreve um caractere para um fluxo getc L um caractere do fluxo fseek Procura por um byte espec fico no fluxo fprintf para um fluxo o equivalente ao printf no console fscanf para um fluxo o equivalente ao scanf no console feof Retorna verdadeiro se o fim do arquivo encontrado ferror Retorna verdadeiro se ocorreu um erro fread L um bloco de dados do fluxo fwrite Escreve um bloco de dados para um fluxo rewind Reposiciona o localizador de posi o para o in cio do arquivo remove Apaga um arquivo 20 2 Abrindo um Arquivo A fun o fopen serve a dois prop sitos Primeiro ela abre um fluxo para uso e liga um arquivo com ele Segundo retorna o ponteiro de associa o quele arquivo Mais fregiientemente e para o resto desta discuss o considere que arquivo um arquivo em disco A fun o fopen tem este prot tipo FILE fopen char nome de arquivo char modo onde modo uma string contendo o estado desejado para abertura O nome do arquivo deve ser uma string de caracteres que compreende um nome de arquivo v lido para o sistema operacional e onde possa ser inclu da uma es
23. seguidas para se cumprir uma determinada tarefa Sequ ncia L gica s o passos executados at atingir um objetivo ou solu o de um problema 2 1 3 Exerc cios que envolvem a l gica 2 1 3 1 Os jogadores Quatro homens se re nem diariamente para jogar e conversar N o h dois com cabelos da mesma cor e que tenham prefer ncia pelo mesmo jogo Com as seguintes indica es dadas voc conseguiria completar o quadro associando cor de cabelo e ao jogo preferido de cada um a Vicente tem cabelos castanhos b O jogador de p quer louro c Algu m gosta de jogar domin mas n o o Roberto pois ele gosta de jogar p quer d Lucas gosta de jogar damas e O jogador de xadrez tem cabelos brancos f Pedro n o tem cabelos ruivos Vicente Lucas Pedro Roberto Cabelos Jogo 2 1 3 2 Amigos do Esporte Quatro atletas tornaram se amigos durante uma competi o internacional S o eles Paul George Lu s e um atleta da R ssia Com base nos dados abaixo descubra o nome o esporte e o pa s de cada atleta 10 UNICAMP Universidade Estadual de Campinas Instituto de Computa o a Dimitri n o jogava futebol nem praticava atletismo b O atleta dos EUA praticava basquete c Lu s n o era dedicado gin stica nem era norte americano d George n o era nem do Brasil nem dos EUA e Paul n o jogava futebol nem praticava atletismo f O atleta da Inglaterra n o praticav
24. v 4 v 4 printf Endere o de v 4 d qd n amp v 4 v 4 return 0 Na mem ria os elementos do vetor s o armazenados um ap s o outro O endere o de v i pode ser obtido pro amp v i ou v i j que v guarda o endere o de v 0 e portanto v i guarda o endere o de v i Ao somarmos v i1 pulamos na mem ria i sizeof int bytes a partir do endere o de v 0 48 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Figura 3 Como o vetor fica armazenado na mem ria Os n meros ao lado indicam o endere o de mem ria na pilha As vari veis e os respectivos conte dos s o indicados nos escaninhos 10 1 Busca em vetores Um problema comum quando se manipula vetores a necessidade de encontrar um elemento com um dado valor Uma forma trivial de fazer este acesso percorrer do ndice inicial ao final todos os elementos do vetor at achar o elemento desejado Esta forma de busca chamada linear pois no pior caso o n mero de compara es necess rias igual ao n mero de elementos no vetor 10 1 1 Busca Linear Suponha por exemplo que desejamos saber se existe uma nota x no vetor lido finclude lt stdio h gt int main float nota 11 x vetor criado com uma posi o a mais int i printf Entre com 10 notas n for 1 0 i lt l0 i scanf f notali while 1 printf Digite a nota procurada ou 1 para sair do programa
25. v2 v3 1 T NOT F return 0 F NOT T 34 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Exemplo Supondo as vari veis A 5 B 8 e C 1 Express es Resultado A B AND B gt T Falso A B OR B lt cC Verdadeiro A gt B NOT Verdadeiro A lt B AND B gt C Verdadeiro A gt B OR B C Falso A lt B NOT Falso 7 4 Exerc cios 7 4 1 Considerando as vari veis SAL RIO IR e SALLIQ e os valores tabelados abaixo informe se as express es s o verdadeiras ou falsas SAL RIO IR SALLIQ EXPRESS O V ou F 100 00 0 00 100 00 SALLIQ gt 100 00 200 00 10 00 190 00 SALLIQ lt 190 00 300 00 15 00 285 00 SALLIQ lt SAL RIO IR 7 4 2 Sabendo que A 3 B 7 e C 4 informe se as express es abaixo s o verdadeiras ou falsas a l A C gt B b B gt A 2 c L 1 C B A d B A lt C ep 1 C B DA 7 4 3 Sabendo que A 5 B 4 C 3 e D 6 informe se as express es abaixo s o verdadeiras ou falsas al A gt C AND C b CA B gt 10 c I A gt C AND D gt C 35 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 8 Estruturas de Decis o Complementando as informa es iniciadas com fluxogramas quando necess rio tomar uma decis o sempre teremos um resultado VERDADEIRO ou FALSO s mbolo visto no item
26. 0 else c i a i b i mostra a A mostra b B mostra c C void levetor float a char vetor int i printf c vetor for i 0 i lt 10 i scanf f a i int main int op i float pL p2 p3 A IOT B 10 CELOJ pl A p2 B p3 C do printf n Calculadora de Vetores 75 UNICAMP Universidade Estadual de Campinas Instituto de Computa o printf inin 1 Adicaoin 2 Subtracao printf in 3 Multiplicacaon 4 Divisao printf n 5 Informar valores para vetor A printf n 6 Informar valores para vetor B printf n 7 Visualizar vetores A Be C printf n 8 SAIR printf ininopcao scanf d amp op if op gt 0 amp s op lt 8 switch op case 1 Adicao calcula p1l p2 p3 0p break case 2 Subtracao calcula p1l p2 p3 0p break case 3 Multiplicacao calcula p1l p2 Pp3 0p break case 4 Divisao calcula p1l p2 p3 0p break case 5 le vetor A levetor pl A break case 6 le vetor B levetor p2 B break case 7 mostra p1 A mostra p2 B mostra p3 C while op 8 return 0 16 1 Exerc cio A sugest o de atividade desta aula refazer os exerc cios aplicando os conceitos adquiridos at a presente aula Pratique por exemplo a execu o de alguns de seus programas atrav s de
27. 0 20 0 21 0 25 0 27 0 28 0 8 8 8 8 8 8 Aula inaugural Introdu o computa o Introdu o a l gica de programa o Aula em laborat rio Fluxogramas Algoritmos Exerc cios de l gica Fluxogramas Algoritmos Exerc cios de l gica Aula em laborat rio SETEMBRO 01 0 03 0 04 0 08 0 10 0 11 0 15 0 17 0 18 0 22 0 24 0 25 0 29 0 9 9 9 9 9 9 9 9 9 9 9 9 9 Introdu o linguagem C Comandos de escrita leitura e lineariza o de f rmulas Aula em laborat rio Operadores Estruturas de decis o Exerc cios Operadores Estruturas de decis o Exerc cios Aula em laborat rio Estruturas de repeti o Exerc cios Estruturas de repeti o Exerc cios L1 Avalia o Pr tica LM03 P1 Avalia o Te rica CB03 Vetores Aula em laborat rio Ordena o de vetores OUTUBRO 01 1 01 1 02 1 06 1 08 1 09 1 13 1 15 1 16 1 20 1 22 1 23 1 27 1 29 1 30 1 NOVE 03 11 05 11 06 11 10 11 12 11 13 11 17 11 19 11 20 11 24 11 26 11 27 11 0 O SO OO O SO O OOOD O ltimo dia para desist ncia de matr cula Vetores multidimensionais Matrizes Aula em laborat rio Cadeia de caracteres strings e Convers es Ponteiros Aula em laborat rio Ponteiros Vetores e Strings Fun es Aula em laborat rio Hierarquia de Fun es Recurs o L2 Avalia o Pr tica LMO3 P2 Avalia o
28. 8080 1976 1 micro com sucesso comercial Apple I criado por Steve Wozniak V rios fabricantes entram neste mercado em franca expans o 1980 Seagate lan a primeiro disco r gido com 5 MB 1981 IBM lan a seu computador pessoal o IBM PC com MS DOS A concorr ncia come a a lan ar os computadores IBM PC compat veis pois a tecnologia estava aberta desde 1969 1983 Apple lan a o Lisa primeiro computador com interface gr fica 1984 Apple lan a o Macintosh interface gr fica mouse para competir com o IBM PC AT 1 2 4 Gera o dos computadores 1 gera o 1940 1952 2 gera Computadores a base de v lvulas a v cuo e rel s Usados para aplica es cient ficas e militares Armazenamento de dados em cart es perfurados Programa o na linguagem de m quina o 1952 1964 Computadores baseados nos transistores M quinas bem menores Aplica es cient ficas militares e agora tamb m administrativa e gerencial Primeiras linguagens de programa o Fitas magn ticas e tambores magn ticos como mem ria UNICAMP Universidade Estadual de Campinas Instituto de Computa o 3 gera o 1964 1971 Computadores baseados em circuitos integrados Grande evolu o dos Sistemas operacionais Mem ria em semicondutores e discos magn ticos Multiprograma o Real time 4 gera o 1971 1981 In cio com o surgimento do microprocessador Grande redu o do tamanho dos computadores
29. Campinas Instituto de Computa o Descontente com o MINIX em 1991 Linus Benedict Torvals iniciou o desenvolvimento de seu pr prio kernel n cleo do sistema operacional para oferecer uma solu o melhor que o MINIX www minix3 0rg Mal sabia Torvalds que seu passatempo tomaria as dimens es atuais A primeira vers o est vel foi disponibilizada em 1994 v 1 0 e atualmente encontra se na vers o 2 6 28 5 12 de fevereiro de 2009 1 3 8 Porque Linux Baseado nos argumentos apresentados anteriormente o GNU Linux um sistema operacional est vel livre e com timo desempenho Tem suas ra zes no meio acad mico e oferece in meras qualidades e possibilidades de adequa o s necessidades de seus usu rios Dentre elas podemos destacar e Estabilidade sem telas azuis travamentos e problemas virais freq entes e Livre e aberto liberdade no sentido de permitir ao utilizador adequar o sistema a suas necessidades seja na instala o de aplicativos gratuitos interface seguran a e otimiza o do sistema entre outras possibilidades e Ambiente rico em ferramentas para estudo e desenvolvimento de aplica es e Alto desempenho em redes de computadores Intranet e Internet e Apoio do MEC Minist rio da Educa o Brasil atrav s do Prolnfo 1 4 Organiza o do computador O computador uma m quina que funciona mediante instru es enviadas pelo ser humano ou por outra m quina executando tarefas e resolvendo prob
30. Surgem muitas linguagens de alto n vel Intel inaugura uma nova fase oferecendo microcomputadores mais r pidos e que possibilitam a execu o de v rias tarefas ao mesmo tempo 5 gera o 1981 at a atualidade Processadores com alt ssima velocidade de processamento Intelig ncia Artificial 1 2 5 Classifica o dos computadores ANTIGA NOVA Microcomputador Port til Supermicro Desktop Minicomputador Servidor de rede Supermini Grande Porte Grande Porte MainFrame Supercomputador Supercomputador Sugest o complementar http www computerhistory org timeline Filme Piratas do Vale do Sil cio 1 3 Introdu o programa o Os computadores s o dispositivos eletr nicos que transmitem armazenam e manipulam informa es dados As aplica es t cnicas e cient ficas preocupam se fundamentalmente com dados num ricos enquanto aplica es comerciais normalmente envolvem processamento tanto num rico como de caracter Para processar um conjunto particular de dados o computador deve ter um conjunto de instru es apropriadas denominado programa 1 3 1 Tipos de linguagem de programa o Diferentes linguagens podem ser utilizadas para programar um computador A mais b sica a linguagem de m quina assembly language que composta por um conjunto de instru es detalhadas e obscuras que controlam um circuito interno do computador Esse o dialeto natural do computador Na realidade poucos progra
31. Te rica CB03 Recurs o Aula em laborat rio MBRO Ordena o com recurs o Registros Aula em laborat rio Listas Listas Aula em laborat rio Arquivos Arquivos Feriado Municipal P3 Avalia o Te rica CB03 Sistemas L3 Avalia o Pr tica LMO3 DEZEMBRO 30 11 10 1 14 1 2 2 a 05 12 Semana de estudos Exame Divulga o da situa o final UNICAMP Universidade Estadual de Campinas Instituto de Computa o 1 Introdu o Computa o 1 1 Motiva o Jamais desista A motiva o deve ser vista como supera o de quaisquer dificuldades que venham a surgir durante o curso http www youtube com watch v FB pdyVclbM 1 2 Evolu o da Inform tica A evolu o do processamento de dados o esfor o do homem para encontrar meios melhores e eficientes de reunir dados de utilidade em sua vida medida que esses problemas aumentaram tanto em dimens es como complexidade O termo inform tica foi criado na Fran a em 1962 informatique e prov m da contra o das palavras information automatique Informa o autom tica A inform tica surgiu da id ia de auxiliar o homem nos trabalhos rotineiros e repetitivos em geral de c lculo e gerenciamento Podemos definir inform tica ent o como sendo a ci ncia que trata da informa o 1 2 1 Principais fun es da inform tica Desenvolvimento de m quinas
32. Toda vari vel possui R tulo Conte do Nome r tulo a 20 Tipo dom nio b 30 Valor conte do soma 50 Escopo tempo de vida Programa Visualiza o no monitor Soma dois numeros inteiros e mostra resultado tinclude lt stdio h gt int main int a b soma 0 printf Digite um numero scanf Sd sa printf Digite outro numero scanf d sb soma a hb printf A soma de d d e d n a b soma return 0 gt soma Digite um numero 5 Digite outro numero 2 A soma de 5 2 e 7 gt 27 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Outros indicadores de escrita e leitura Tipo Representa o Char caractere c ASCII d ou Yhhd ASCII i ou Yhhi Float decimal f cient fico e decimal cientifico g Double decimal lf cient fico le decimal cient fico lg Long double decimal Lf cient fico Le decimal cient fico YLg 5 2 Exerc cios 5 2 1 Fa a um programa que leia caractere n mero inteiro e n mero real e mostre as poss veis sa das conforme cada tipo de entrada 5 2 2 Transforme os algoritmos elaborados nas aulas anteriores com entradas e sa das em programas na linguagem C 28 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 6 Comandos Vimos quais s o os tipos b sicos dispon veis na
33. ada A E A AAA SCANS UA E Qtd id CURA tan R a 83 18 1 Exercicio Laborat rio Oseias TND E ana a sn E Lapas ad La 84 OS AS ns repair pasa te DA GAR Da O DR AAN 85 19 1 Listaencadeada 2ss2sesisisandias Sogra tas Des itise nuE Ean a S Hola ana ASE lis aaa dita spa Seia 85 191 1 Fun o de InCIAIIZA O srssa sas pas dity dass qua ee a sto LOS E aeei 86 T912 Fundo OS INACI O a O a a 87 19 1 3 Fun o que percorre os elementos da lista a ssaasmas pandas Rai ias TITCALLARCE Ma age ta dUa Lag dust 88 19 1 4 Fun o que verifica se lista est VAZIA qregasases qua snipdarasidanojuesadiaiaa anca quod acid ond it daria qa 88 19 1 5 Fun o de busca sssi trenson e aaa asa asaaaI Las a ODAS ANA LOSE EEE ARES 88 19 1 6 Fun o que retira um elemento da lista esasscas casados uns inss coa aa dicas Bisi o nindaa crus ea cenataa 89 19 17 Fun o para iberar asia ge a R a A 90 19 2 EXERCICIO inneni a a EA EESE bai EEE da EE Duques EE AA ET Sei 91 19 3 Listas Gen ricas minn eiea ai e a EE ia E SEAE ETES 91 19 ATist s Circulares aa a a a a n A a ES 94 Is Lista D plamente Encadeddd a e a a E i a 94 19 5 1 Bunc o de INSER O iie ecseri e oes ea a e t as es Bt goma ig Eai 95 19 5 2 Fun o de busca etuauanentastas edi n A E A AE R A 96 19 5 3 Fun o que retira um elemento da ia saias saias dias aU ssa ata gq ata 96 19 6 Exercicio Laborat rio Tinio cas ronaldo a dna ERES 96 20 ATQUIVOS ereat as ee EEE A EEEE RSA TAVA JUROU IAT
34. atualizada a express o l gica verificada e o processo se repete at que a express o seja falsa for inicializa o express o atualiza o bloco de comandos Por exemplo um programa para somar n n meros fica include lt stdio h gt int main int nyis float soma num printf in Soma An printf Entre com a quantidade de numeros scanf Zd amp n for i 1 soma 0 0 i lt n i i l soma soma num printf Digite o do numero i scanf f num printf O resultado da soma eh fin soma return 0 44 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Programa que mostra os numeros pares de 0 a 10 tinclude lt stdio h gt int main int a for a 0 a lt 10 a 2 printf d a Mostra 02 4 6 8 10 return O Outro exemplo um programa para calcular o maior entre n n meros lidos da entrada padr o finclude lt stdio h gt int main int i n num maior printf Entre com a quantidade de numeros scanf Zd amp n maior O for i l i lt n i printf Entre com um inteiro scanf d amp num if num gt maior maior num printf O maior inteiro lido foi d n maior return 0 Sabendo que o fatorial de um n mero inteiro n n X n D X n 2 1 fa a um programa para calcular o fatorial de um n mero lido da entrada padr o usando o comando
35. c Matriz m 112 UNICAMP Universidade Estadual de Campinas Instituto de Computa o c CriaContorno 100 m CriaMatriz 5 9 DestroiContorno c DestroiMatriz m return 0 Comando para compila o gcc prog c I mc102 include L mc102 lib o prog lmc102 21 2 Argumentos de Programa Em aula anterior vimos a utiliza o de nome de arquivo fixo no programa por exemplo int main Agenda a a LeAgenda arquivo txt OrdenaAgenda a GravaAgenda a arq ord txt DestroiAgenda a return 0 Por m seria mais conveniente se esses nomes fossem passados como argumentos do programa na linha de execu o ex programa arquivo txt arq ord txt Isto poss vel pois a fun o main pode ser declarada com dois argumentos como veremos no exemplo a seguir O valor de argc o n mero de argumentos em argv e argv um vetor de strings onde cada string cont m um argumento do programa ex um n mero inteiro um n mero real um caractere ou uma cadeia de caracteres Ajustando o programa acima temos int main int argc char argv Agenda a if argc 3 printf uso s lt entrada gt lt saida n argv 0 exit 1 a LeAgenda argv 1 OrdenaAgenda a GravaAgenda a argcv 2 DestroiAgenda a return 0 Em casos de argumentos inteiros e reais as fun es atoi e atof podem ser usadas para converter strings nesses valores respectivamente include contorno h
36. da lista vamos considerar a cria o de uma fun o que imprima os valores dos elementos armazenados numa lista Uma poss vel implementa o dessa fun o mostrada a seguir fun o imprime imprime valores dos elementos void imprime Lista 1 Lista p vari vel auxiliar para percorrer a lista for p 1 p NULL p p gt prox printf info d n p gt info 19 1 4 Fun o que verifica se lista est vazia Pode ser til implementarmos uma fun o que verifique se uma lista est vazia ou n o A fun o recebe a lista e retorna 1 se estiver vazia ou O se n o estiver vazia Como sabemos uma lista est vazia se seu valor NULL Uma implementa o dessa fun o mostrada a seguir fun o vazia retorna 1 se vazia ou 0 se n o vazia int vazia Lista 1 if 1 NULL return 1 else return O Essa fun o pode ser re escrita de forma mais compacta conforme mostrado abaixo fun o vazia retorna 1 se vazia ou 0 se n o vazia int vazia Lista 1 return 1 NULL 19 1 5 Fun o de busca Outra fun o til consiste em verificar se um determinado elemento est presente na lista A fun o recebe a informa o referente ao elemento que queremos buscar e fornece como valor de retorno o ponteiro do n da lista que representa o elemento Caso o elemento n o seja encontrado na lista o valor retornado NULL fun o busca busca um eleme
37. do objeto Como identificador de tipo podemos usar valores inteiros definidos como constantes simb licas fdefine RET O tdefine TRI 1 define CIR 2 Assim na cria o do n armazenamos o identificador de tipo correspondente ao objeto sendo representado A estrutura que representa o n pode ser dada por Define o n da estrutura struct listagen int tipo void info struct listagen prox H typedef struct listagen ListaGen A fun o para a cria o de um n da lista pode ser definida por tr s varia es uma para cada tipo de objeto que pode ser armazenado Cria um n com um ret ngulo inicializando os campos base e altura ListaGen cria ret float b float h Retangulo r ListaGen p aloca ret ngulo r Retangulo malloc sizeof Retangulo r gt b b r gt h h aloca n p ListaGen malloc sizeof ListaGen p gt tipo RET p gt info r p gt prox NULL return p Il Il Cria um n com um tri ngulo inicializando os campos base e altura ListaGen cria tri float b float h Triangulo t ListaGen p aloca tri ngulo t Triangulo malloc sizeof Triangulo t gt b b t gt h h aloca n p ListaGen malloc sizeof ListaGen p gt tipo TRI p gt info t p gt prox NULL return p 92 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Cria um n com um c rculo inicializando
38. em n meros e Vice versa sseesseesseeesseeesstessrtsseesseresseeesstressersseesseee 60 13 3 Manipulando cadeias de caracteres dia pra RS NUS ATA DIOR SEUA COMEM Sade dna Lan sE na 62 LS ERCECICIO ut asd ora DA a A E Rcc ada 63 14 Ponteiros algemas ssa ei las boda dias Lan dad aba Us dae Da SOL aos dita AE ad a DR Sa DR a O bs 64 14 1 Declara o e manipula o de ponteiros e ereeererecereracereracereacanaa 64 142 Exercicio Laboratorio sous acena Rita E quad RS EDU a SS do Da 67 14 3 Ponteiros e Vetores Multidimensionais Matrizes ciiiiiieereerrereeereeeerenerereess 67 14 3 1 Aloca o Din mica reasons sntetta cbfsadtanoa adro LE erine Safada Gaga ta atas tao enda EEEa 69 144 Ep 65 oi 6 0 PARAR RR PR OR RN ER O A RR RR RV E DR RA 71 TaS FUN OES a E aaa a a a e a a a a SO A 12 15 1 Par metros passados por valor e por refer ncia rear 173 15 2 Exercicio Laborat rio Senin e e GUIAS E 14 16 Hierarquia de Fun es sicir trannie o Ea e EEEE E AE e 75 OBREIRO ENE E E EEA 76 I7 Rec tsao neson n a a a a a a a o a aa E T11 17 1 Exercicios Laborat rio Q isinsin niii cores qua E E O E V N 79 17 2 KRecurs o Ordena o ysr ein e O O QU 80 7251 Ordena o porind o fraca sato raia aorta Soft cional nadar elas aeb aaa 80 17 2 2 Ordena o por indu o LONE asas abanar 81 17 3 5h ci ei foste o JUDAS RR A TR SOPRO RR TER RR RD RR iih 82 18 RESISTOS ninenin Doitad udas dous
39. for e apenas duas vari veis O tri ngulo de Floyd formado por n linhas de n meros consecutivos onde cada linha cont m um n mero a mais que a linha anterior Para imprimir o tri ngulo de Floyd precisamos aninhar um for dentro do outro include lt stdio h gt int main int 1 c nl i printf Entre com o numero de linhas scanf Zd amp nl i 1 for 1 1 1 lt nl 1 for c 1 c lt 1 c printt S2d iy Etts printf n return 0 45 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Outro exemplo que requer dois comandos for aninhados a impress o de uma tabuada Fa a um programa para imprimir uma tabuada com n linhas e n colunas Observe que existe uma rela o entre a integral de uma fun o cont nua sua aproxima o pela somat ria de uma fun o discreta e a implementa o da somat ria usando o comando for Por exemplo T Tmax dr 2 Tmax f ar b d 5 ax b d TT no T T min d 2 onde Xmin lt Xmax UMa aproxima o para a integral da curva a qual tem maior exatid o para valores menores de dy gt 0 Podemos implementar esta integral como ftinclude lt stdio h gt int main float a b xmin xmax x dx integral printf Entre com os coeficientes a b da reta y ax b An scanf f f amp a amp b printf Intervalo xmin xmax para calculo de area An scanf f S amp sxm
40. imprim veis if isprint buf 1 16 5 printf c buf i 16 j else printf printf n 20 8 Fluxo Padr o Toda vez que um programa come a a execu o s o abertos 5 fluxos por padr o stdin aponta p o teclado se nao redirecionado pelo DOS Ex MORE lt FILE TXT stdout aponta p a tela se nao redirecionado pelo DOS Ex DIR gt PRN stderr recebe mensagens de erro aponta para a tela stdprn aponta p a impressora stdaux aponta p a porta serial Para entender o funcionamento destes fluxos note que putchar definida em stdio h como define putchar c putc c stdout e a fun ao getchar definida como 106 UNICAMP Universidade Estadual de Campinas Instituto de Computa o fdefine getchar getc stdin Ou seja estes fluxos permitem serem lidos e escritos como se fossem fluxos de arquivos Toda entrada de dado de um program feita por stdin e toda sa da por stdout Localiza uma palavra especificada pela linha de comando em um arquivo redirecionado para stdin mostrando a linha e seu n mero No prompt de comando digite tmp argv lt tmp c HA tinclude lt string h gt finclude lt stdio h gt main int argc char argv char string 128 int line 0 while fgets string sizeof string stdin line if strstr string argv 1 printf 02d s line string O fluxo stderr usado para mostrar mensagens de erro na tela quando a sa d
41. linguagem C e como podemos ler e mostrar seus conte dos Agora ser apresentado como definir constantes nos programas outras possibilidades para escrita e leitura de dados e a lineariza o de f rmulas 6 1 Constantes Assim como vari veis constantes s o usadas s o usadas para armazenar n meros e caracteres Por m n o podemos modificar o conte do de uma constante durante a execu o do programa Exemplo tinclude lt stdio h gt definindo constantes define PI 3 1415926536 fdefine MSG O valor de 2xPI e atribui um texto para MSG void main void float dois PI dois PI 2 PI dois P1I 6 2831853072 printf s 5 2f n MSG dois PI O resultado na tela ser O valor de 2xPI e 6 28 6 2 Definindo novos tipos Podemos usar o comando typedef para definir novos tipos de vari veis ou abreviar tipos existentes tinclude lt stdio h gt typedef enum false true bool o tipo bool s armazena 0 false ou 1 true typedef unsigned char uchar o tipo uchar o mesmo que unsigned char int main bool vl v2 tipo booleano ou vari vel l gica uchar a 10 vl true o mesmo que atribuir 1 para v1 v2 false o mesmo que atribuir 0 para v2 printf d d d n vl v2 a mostra na tela 1 0 10 return O 29 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 6 3 Fun es matem ticas e resto da divis o inteira Um programa consiste d
42. n scanf f amp x if x 1 0 break busca linear nota 10 x elemento sentinela 49 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 1 0 while nota i x busca com sentinela i if i lt 10 printf nota 2f encontrada na posi o din notalil i else o printf nota 2f n o encontrada n x return 0 Imagine agora que nosso vetor tenha o tamanho 1024 O que podemos fazer para reduzir o n mero de compara es Quanto maior for a quantidade de informa o sobre os dados mais vantagens podemos tirar para agilizar os algoritmos 10 1 2 Busca Bin ria A busca bin ria por exemplo reduz o n mero de compara es de n para log gt n no pior caso onde n o tamanho do vetor Um vetor de tamanho 1024 2 requer no pior caso 10 compara es No entanto a busca bin ria requer que o vetor esteja ordenado Esta ordena o tamb m tem um custo a ser considerado mas se vamos fazer v rias buscas este custo pode valer a pena A id ia b sica que a cada itera o do algoritmo podemos eliminar a metade dos elementos no processo de busca Vamos supor por exemplo que o vetor de notas est em ordem crescente finclude lt stdio h gt typedef enum false true bool int main float nota 10 x int i pos inicio fim bool achou printf Entre com 10 notas em ordem crescentein for i 0 i lt l0 i sca
43. no arquivo quad dat tinclude lt stdio h gt finclude lt stdlib h gt main int i FILE out if out fopen quad dat wt NULL puts Nao posso abrir arquivo exit 1 for i 0 i lt 10 i fprintf out gd n i i i fclose out Apagando arquivos remove int remove char nome arquivo Retorna zero em caso de successo e n o zero se falhar 20 9 Exemplo de utiliza o de arquivo texto Salve este trecho como nomes txt inicio nao copie esta linha 5 Joao da Silva 26 Antonio Silvestre 35 Felipe Barreto 21 Marcos Miranda 20 Xavier Goncalves 70 fim nao copie esta linha Este programa le um arquivo nomes txt e ordena os registros por nome em memoria gravando a seguir em outro arquivo arg ord txt tinclude lt stdio h gt typedef struct amigo char nome 100 int telefone Amigo typedef struct agenda Amigo amigo int num amigos Agenda Agenda LeAgenda char nomearg void OrdenaAgenda Agenda a void GravaAgenda Agenda a char nomearg void DestroiAgenda Agenda a 108 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Agenda LeAgenda char nomearg Agenda a FILE aparg int char linha 2000 pos abre arquivo texto para leitura aparqg fopen nomearg r Le cadeia de caracteres ate encontrar An fgets linha 199 aparg ssca
44. o de cont na mem ria int m cont 100 m amp cont J o o complemento de amp Podemos atribuir a outra vari vel o valor apontado por m Assim teremos que q recebe o valor apontado por m Por exemplo q m o que faz q 100 64 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Existem algumas diferen as em express es envolvendo ponteiros S o elas e Atribui o main int x 100 titr ply p27 pl amp x p2 pl aqui pl e p2 apontam para x printf 2p p2 escreve o endere o de x na mem ria e n o o valor e Aritm tica Existem somente duas opera es que podem ser usadas com ponteiros soma e subtra o Considerando o trecho de c digo acima temos pl como ponteiro de inteiros que ocupa 2 bytes Ap s a express o pl o ponteiro ter o endere o incrementado Como o tipo inteiro o endere o ser incrementado em 2 bytes Generalizando a partir do exemplo cada vez que um ponteiro incrementado ou decrementado ele apontar para a posi o de mem ria do pr ximo elemento de seu tipo base poss vel tamb m ter a express o pl p1 12 que far pl apontar para o pr ximo d cimo segundo elemento do tipo base e Compara o E poss vel comparar dois ponteiros em uma express o relacional Por exemplo dados dois 66 499 66 9 ponteiros p e q o comando a seguir perfeitamente v lido if p lt q printf p aponta para u
45. os dados fornecidos Elabore um algoritmo baseado no diagrama IN CIO Salbase Gratif _ SalBruto IR SalLiq 3 000 00 1 200 00 1 200 00 400 00 500 00 100 00 R SALBRUTO 20 1001 SALLIO SALBRUTO IR 8 2 Comandos de Decis o Os comandos de decis o ou desvio fazem parte das t cnicas de programa o que conduzem a estruturas de programas que n o s o totalmente sequenciais Com as instru es de SALTO ou DESVIO pode se fazer com que o programa proceda de uma ou outra maneira de acordo com as decis es l gicas tomadas em fun o dos dados ou resultados anteriores As principais estruturas de decis o s o IF ELSE e SWITCH CASE 8 2 1 SE ENT O A estrutura de decis o SE normalmente vem acompanhada de um comando ou seja se determinada condi o for satisfeita ent o execute determinado comando 37 UNICAMP Universidade Estadual de Campinas Instituto de Computa o if Condi o instru o Equivalente a if express o l gica instru o Ou SE a condi o for satisfeita execute v rias instru es if condi o instru ol instru o2 instru oN Imagine um algoritmo que determinado aluno somente estar aprovado se sua m dia for maior ou igual a 5 0 veja no exemplo de algoritmo como ficaria if media gt 5 printf Aluno APROVADO Exemplos Programa verifica se o numero e positivo
46. permuta o de um vetor v com n elementos 17 3 2 Escreva uma fun o recursiva para ordenar v por parti o ou seja complete o c digo fonte do quick sort 82 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 18 Registros Vari veis compostas s o aquelas que agrupam um certo n mero de elementos em um nico identificador No caso de vetores e matrizes todos os elementos agrupados s o do mesmo tipo e portanto dizemos que s o vari veis compostas homog neas Em muitas situa es por m desejamos agrupar vari veis de tipos diferentes Um exemplo o caso em que agrupamos dados sobre uma pessoa e ou objeto ex RA nome curso notas de um aluno O conceito de registro permite criar um identificador nico associado a todos esses dados Portanto um registro uma vari vel composta heterog nea e seus elementos s o chamados campos Diferentes tipos de registro podem ser criados com campos diferentes Parar definir um tipo de registro usamos o comando typedef struct O programa abaixo define um tipo de registro Aluno uma vari vel desse tipo armazena dados nos seus campos e depois imprime os dados armazenados finclude lt stdio h gt finclude lt string h gt typedef struct aluno int RA char nome 50 float nota 3 Aluno int main Aluno a variavel a do tipo Aluno a RA 909090 strcpy a nome Carlos Silvestre a nota 0
47. printf inPosicao scanf d amp spos if pos lt 1 pos gt 10 printf nERRO Digite uma posicao entre 1 e 10 n else printf nO valor armazenado em v d e d pos pl pos 1 Modifica o valor da posicao informada pl pos 1 pl pos 1 pos equivale a v pos 1 v pos l pos Mostra o vetor printf Anv for i 0 1 lt 10 i printf Sd v il printf lt ATUALIZADO Jjwhile pos 1 return O 14 2 Exerc cio Laborat rio 7 14 2 1 Baseado nas aulas anteriores refa a uma calculadora de vetores com 10 posi es de n meros reais utilizando fun es e ponteiros 14 3 Ponteiros e Vetores Multidimensionais Matrizes H uma estreita rela o entre ponteiros e matrizes Considere o seguinte fragmento de programa char str 80 pl1 pl str Aqui o pl foi inicializado com o endere o do primeiro element da matriz str Para mostrar o quinto elemento em str podemos fazer printf c str 4 ou printf se pl 4 Ambos os comandos devolvem o quinto elemento Observe que vetores e matrizes come am em zero Vale recordar tamb m que o nome de um desses elementos sem ndice retorna o endere o inicial da estrutura que o primeiro elemento A linguagem C fornece dois m todos para acessar elementos de matrizes aritm tica de ponteiros e indexa o de matrizes e velocidade geralmente uma considera o em programa
48. um menu onde cada chamada de programa uma fun o e as fun es podem ser utilizadas por mais de um programa Exemplo teste de n mero primo sorteio de n meros inteiros armazenando em vetor e verificando posteriormente quais desses n meros armazenados s o primos convers es de temperaturas e medidas entre outras atividades 76 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 17 Recurs o A recurs o ou recursividade na programa o de computadores envolve a defini o de uma fun o que pode invocar a si pr pria Um exemplo de aplica o da recursividade pode ser encontrado nos analisadores gramaticais recursivos para linguagens de programa o A grande vantagem da recurs o est na possibilidade de usar um programa de computador finito para definir analisar ou produzir um estoque potencialmente infinito de senten as designs ou outros dados Um m todo comum de simplifica o consiste em dividir um problema em subproblemas do mesmo tipo Como t cnica de programa o isto se denomina divis o e conquista e constitui a chave para o desenvolvimento de muitos algoritmos importantes bem como um elemento fundamental do paradigma de programa o din mica Toda fun o que puder ser produzida por um computador pode ser escrita como fun o recursiva sem o uso de itera o reciprocamente qualquer fun o recursiva pode ser descrita atrav s de itera es sucessivas Um exemplo simples de
49. um dispositivo de entrada ou sa da de dados SA DA DE DADOS EM V DEO s mbolo utilizado para representar a informa o ou dados que visualizado em v deo SA DA DE DADOS EM IMPRESSORA este s mbolo utilizado quando desejamos apresentar os dados impressos DECIS O indicado para apresenta o de tomada de decis o CONECTOR utilizado quando necess rio particionar o diagrama CONECTOR este s mbolo indica conex o do fluxo em outra p gina do EE 18 UNICAMP Universidade Estadual de Campinas Instituto de Computa o S MBOLOS ESPECIAIS TECLADO informa es recebidas ou fornecidas E DISPLAY informa es exibida atrav s de dispositivo visual v deo ou monitor DADOS SEQU NCIAIS mem ria de massa para armazenamento de dados fita magn tica streamer CART O PERFURADO representa cart o de dados ou instru es O e ARMAZENAMENTO EM DISCO representa armazenamento de informa es DOCUMENTOS MULTIPLOS DOCUMENTO ARQUIVO 3 3 Elabora o do fluxograma Alguns cuidados necess rio durante a elabora o do fluxograma s o e Quando houver necessidade de cruzamento de linhas deve ser usado um pequeno arco para esclarecer que as linhas n o se tocam al m de indicarem a ordem de ocorr ncia __ segunda dire o a gt primeira dire o 19 UNICAMP Univer
50. 2 TSE ENTA O nenori a R q E a ai 37 BOSE ENTAO SENAO tir a A A E NE o 39 8 2 3 SELECIONE CAS O sra e TE EEE E E EET TE A E E EA 40 8 3 Exerc cios Laborat rio 4 sissien reiii K a A RG A pesada 41 9 Estr t ras de Repeticion enne ae O aaa a RU DS Era a aaa oa 42 Comando DO MILE espia Ra e DO al nd AN 42 92 Contando WEILE saida E aa A 42 9 3 Comando FOR suas eras a ta isa Sado rasga E dt rata ra edad Bata ess Agi ao 44 Q A EXERC CIOS nin a E E E A A E AE E AE R RE EE 46 EOE A E AE A A A NET 47 1O l Buscan Vetores rn a e de E E E E E di DG 49 10 11 Busca Linearni nasas aia Taa EE ATE O Ea E A EE n 49 101 2 Busca BIAL serrer ei n e a S a E n E do a aeS 50 102 Exercicios Laborat rio Iy ca Ss E EE E A ENE O T EEE 51 E Or a O Ra A MTO A N r AR a aT 52 LL VOrdena o DOR seleciona a E a R R s 52 11 2 Ordena o por Inser o srsnniriceri nasii i e E AK Eaa EEE K a in 53 11 3 Ordena o por permutacio si e GUARA 53 DEE RENCICIOS niao Di ra ld a A di 54 12 Vetores Multidimensionais Matrizes sssssneneessssoseneeeessssssoseoersessssoseoeesrssssssesroeessssssesereesesss 55 121 Lincanza o de MANAZES cs nsn SAS QUER Naa a QT e OR US QU 57 12 2 Exerc cios Laborat rio Orn n E CD GO A EANA 58 13 Cadeia de Caracteres Strings e Convers es s ssesssessseseesseesseessesssereseressseesseessesseessseesssees 59 13 14 Lendo daentrada padr o acipenser e a iE E EE qual sono EEE SEESE 59 13 2 Convertendo cadeias
51. 7 2 Assim a aplica o de uma estrutura de decis o em um algoritmo simples como o CHUPAR UMA BALA podemos encontrar situa es onde algumas pessoas n o gostem de balas de Morango Neste caso teremos que modificar o algoritmo para Chupar uma bala Pegara bala A bala de morango o Se sim n o chupe a bala o Sen o continue com o algoritmo Retirar o papel Chupar a bala Jogar o papel no lixo Pegar a Bala Morango Retirar o Papel Chupar a Bala Jogar o papel no ixo N o Chupar a bala 8 1 Exerc cios com fluxogramas 8 1 1 Elabore um diagrama de blocos que leia um n mero Se positivo armazene o em A se for negativo em B No final mostrar o resultado 8 1 2 Ler um n mero e verificar se ele par ou mpar Quando for par armazenar esse valor em P e quando for mpar armazen lo em I Exibir P e I no final do processamento 8 1 3 Construa um diagrama de blocos para ler uma vari vel num rica N e imprimi la somente se a mesma for maior que 100 caso contr rio imprimi la com o valor zero 36 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 8 1 4 Tendo como dados de entrada a altura e o sexo de uma pessoa construa um algoritmo que calcule seu peso ideal utilizando as seguintes f rmulas Para homens 772 7 h 58 Para mulheres 62 1 h 44 7 h altura 8 1 5 Fa a um teste de mesa do diagrama apresentado abaixo de acordo com
52. A Aa aaa dada ETE Usa Recon avi ria ara A 97 20 1 Fun es mais comuns do sistema de arquivo ii reeeereeecerercereeacanaa 98 20 2 Abrmdo um ARQUIVO sue i RD VD pd 98 20 3 Escrevendo mcaracteie aqua ismreat nina N Saga ET ID Mi Rca AE 99 20 4 Lendo n c racterenise n e a Gu iae E Go nc 100 20 5 Usando fun o feof aini mecene inns asn iea adia e EE S dias aE NS 100 2O O Fecha um AT VO aa a ad Rd ada 100 20 7 Acesso TANdOMICO A ARQUIVOS Ai a R e TD A A E EE 105 20 8 Fluxo Padr o sssi eissida es aE iE T EiT E VIAE ESA S 106 20 9 Exemplo de utiliza o de arquivo texto seesesseessesssesseetsseessressessseresseetssressresseeeseeesseees 108 20 TO Exercicio Proposto mass pesada gia aa A E ER ans E E E EA 110 DESSAS E E E A E E a E EETA 111 21 D a02 E 1 a t Te K AEE E AS EEEE E S EE E E attd sado 112 21 2 Arcumentos de Programa santos nininini i E E E eE 113 ANEXO A lt Fl x ra m sa esaa aR a E E EEKE ET a aaas 115 MC102 Algoritmos e Programa o de Computadores Turma Z 2009s2 P gina da disciplina http www mc102 cjb net Crit rios do Curso Aulas Dia Hor rio Sala Conte do Ter a 21h00 as 22h40 CB03 Te rico Quinta 19h00 as 20h45 CB04 Te rico Sexta 21h00 as 22h40 LM03 Pr tico Avalia es 18 09 2009 Pr tica L1 22 09 2009 Te rica P1 23 10 2009 Pr tica L2 27 10 2009 Te rica P2 24 11 2009 Te rica P3 27 11 2009 Pr tica L3
53. A indu o forte usa outra hip tese a solu o de um problema de tamanho t depende de suas solu es de tamanhos t para todo t lt t Esta estrat gia denominada divis o e conquista Por exemplo podemos dizer que Soma m n Soma m m n 2 Soma m n 2 1 n Ou seja o problema dividido em subproblemas similares divis o onde s o resolvidos recursivamente chegando ao tamanho m nimo o problema resolvido de forma direta e as solu es dos subproblemas s o combinadas para gerar a solu o do problema de tamanho maior conquista Isto requer por m ao menos duas chamadas recursivas tipo funcao lt parametros gt 78 UNICAMP Universidade Estadual de Campinas Instituto de Computa o lt variaveis locais gt if lt condicao de parada gt lt com retu else n valor return valor ndos finais gt eira chamada recursiva gt nda chamada recursiva gt a lt comandos iniciais gt m u andos finais gt Com base no exemplo acima temos int Soma int m int n if m n return m else return Soma m m n 2 Soma m n 2 1 n Mais uma vez pelas mesmas raz es acima as chamadas recursivas podem ser feitas no comando de retorno A rvore de recurs o apresentada na figura 2 Observe que em todos os exemplos as chamadas recursivas s o para a pr pria fun o Dizemos ent o que a recurs o direta Em alguns problemas po
54. ASE 2 instru o break CASE 3 instru o break caso n o seja qualquer anterior executa a DEFAULT DEFAULT instru o padr o Exemplos Exemplo utilizando numero inteiro include lt stdio h gt int main int opcao printf n1 Saladas printf n2 Refeicao printf n3 Lanches printf n4 Bebidas printf n5 Sobremesas printf AnDigite a op o desejada scanf d amp opcao switch opcao case 1 printf n nEscolheu SALADAS n break case 2 printf ininEscolheu REFEICAOn break case 3 printf ininEscolheu LANCHESAn break case 4 printf ininEscolheu BEBIDASin break case 5 printf ininEscolheu SOBREMESASAn break default printf AninChame o garcom para tirar duvidasin return 0 Exemplo com caractere include lt stdio h gt int main char opcao printf nA Saladas printf nB Refeicao printf nC Lanches printf nD Bebidas printf nE Sobremesas printf AnDigite a op o desejada scanf amp c amp opcao 40 UNICAMP Universidade Estadual de Campinas Instituto de Computa o switch opcao case A printf ininEscolheu SALADASAn break case B pri
55. Direitos de autor Este material utiliza a Licen a Creative Commons http www creativecommons org br OSOA N aD a o o a p Q aD g a Qa q q tl oN e pur ak O N Q Bm 20 lt Prof Luiz Gustavo Turatti PED A Prof Felipe B Valio PED C Monitor J lio C sar F Cornacchia PAD Vers o 1 0 0 b 05 out 2009 ndice L Imtrodu o a Computa o sasauiasesiquas pia ita ar sdiasoaL SG i ee a bas par EEE ESEE 1 1 1 Motiva o Jamais desista Hinscsninnina ln itia a E E E erii 1 12 Evolu o da Inform tica nrnna a a aie 1 1 2 1 Principais fun es da inform tica sseeseseeeseseesseesresresseseresresstssresressessreseesersessrensreseee 1 1 2 2 Defini o de computador esris ihitai iiien aar iii a aeii 1 1 2 3 Hist rico dos computadores s ssesseeeseeessseesseesseesseeessetssstesstesseesseeesseeesstessersseeeseeeesees 1 1 24 Gefa odos compu tadoreS osei o E pd e 2 1 2 5 Classifica o dos computadores ses seeessseesseesseesseesseeesstessresseeeseeesseetsstesseesseeeseeeessees 3 1 3 Introdu o progrimMac O quests nantes and ao r es SS a O iar oosten ioii Ea eia 3 1 3 1 Tipos de linguagem de programa o sssesseessesseesseeesstessesseesseeesseeesseesseesseresseeeseres 3 1 32 O s rsimento do UNIX eea a a e aaea i ia 4 1 3 3 A evolu o das linguagens de programa o esessseesesssesesresstssresresstssrerrt
56. HE FE HE FE HE FE HE FE HE FE HE FE HE FE HE FE HE FE FE FE FE FE FE FE HE FE HE FE HE FE HE FE FE E AE FE FE FE FE AE FE E FE HE FE H HE E E E E E Le arquivos e exibe os na tela include lt stdio h gt include lt stdlib h gt main int argc char argv FILE fp char ch if argc 3 puts Voc s squeceu de informar o nome do arquivo e o modo exit 1 Experimente rb e rt para testar newline if fp fopen argv 1 argv 2 NULL puts O arquivo nao pode ser aberto exit 1 ch getc fp 1 um caractere while ch EOF putchar ch imprime na tela ch getc fp return O getw e putw Funcionam exatamente como putc e getc s que em vez de ler ou escrever um nico caractere l em ou escrevem um inteiro Prot tipos tinclude lt stdio h gt void main int putw int i FILE fp int getw FILE fp Exemplo escreve o inteiro 100 no arquivo apontado por saida putw 100 saida fgets e fputs Funcionam como gets e puts s que l em e escrevem em fluxos Prot tipos tinclude lt stdio h gt void main 102 UNICAMP Universidade Estadual de Campinas Instituto de Computa o char fputs char str FILE fp char fgets char str int tamanho FILE fp ATEN O fgets l uma string de um fluxo especificado at que um newline seja lido OU tamanho 1 caracteres tenham sido lidos
57. Paulo Makron Books 1996 TANENBAUM Andrew S Sistemas Operacionais Modernos 2 Ed Cap 10 114 UNICAMP Universidade Estadual de Campinas Instituto de Computa o ANEXO A Fluxogramas Introdu o Um pouco de hist ria O algoritmo nasceu da mente brilhante do matem tico Leonard Euler nascido no ano de 1707 na cidade de Basil ia Su a Seu pai queria que fosse pastor mas sua voca o estava na matem tica Estudava cada problema que lhe aparecesse como a navega o finan as irriga o entre outros Para cada problema Euler criava novos c lculos O algoritmo surgiu com o c lculo do comportamento da lua criou uma teoria chamada o problema dos 3 corpos o algoritmo permitia que Euler encontrasse um valor aproximado para a posi o da lua esses estudos vieram favorecer a navega o da poca num per odo onde n o se dispunham de muitos instrumentos de navega o Tamb m utilizado por Alan Turing O algoritmo um conjunto de instru es para executar uma ou v rias tarefas Muito antes dos computadores mais precisamente no ano de 1936 Alan Turing fundamentou o conceito de algoritmo constitu dos de segii ncias e passos para tomada de decis es n o se trata da linguagem de programa o mas serve como par metro para o desenvolvimento da programa o A mesma tarefa pode ser realizada por diferentes algoritmos constitu dos de instru es diferenciadas utilizando se de mais tempo ou m
58. Se um newline lido ele far parte da string diferente de gets A string resultante termina com um nulo fread e fwrite L em e escrevem blocos de dados em fluxos Prot tipos tinclude lt stdio h gt void main unsigned fread void buffer int num bytes int count FILE fp xf unsigned fwrite void buffer int num bytes int count FILE p Para fread buffer um ponteiro para uma rea da mem ria que receber os dados lidos do arquivo J para fwrite buffer um ponteiro para uma rea da mem ria onde se encontram os dados a serem escritos no arquivo Buffer usualmente aponta para uma matriz ou estrutura O n mero de bytes a ser lido ou escrito especificado por num bytes O argumento count determina quantos tens cada um tendo num bytes de tamanho ser o lidos ou escritos O argumento fp um ponteiro para um arquivo de um fluxo previamente aberto por fopen A fun o fread retorna o n mero de itens lidos que pode ser menor que count caso o final de arquivo EOF seja encontrado ou ocorra um erro A fun o fwrite retorna o n mero de itens escritos que ser igual a count exceto na ocorr ncia de um erro de escrita Quando o arquivo for aberto para dados bin rios fread e fwrite podem ler e escrever qualquer tipo de informa ao O programa a seguir escreve um float em um arquivo de disco chamado teste dat tinclude lt stdio h gt tinclude lt stdlib h gt tinclude lt m
59. a por natureza muito espec fico e r gido em rela o aos algoritmos da vida real 2 1 7 Exerc cios Crie uma sequ ncia l gica escreva um algoritmo detalhando as etapas para 2 1 7 1 Abrir uma porta com chave 2 1 7 2 Tomar banho 2 1 7 3 Trocar um pneu do carro 2 1 7 4 Trocar uma l mpada 2 1 7 5 Somar dois n meros inteiros e multiplicar o resultado pelo primeiro n mero 13 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 2 2 Desenvolvendo algoritmos 2 2 1 Pseudoc digo Os algoritmos s o descritos em uma linguagem chamada pseudoc digo Este nome uma alus o posterior implementa o em uma linguagem de programa o ou seja quando formos programar em linguagem C por exemplo estaremos gerando c digo fonte nessa linguagem Por isso os algoritmos s o independentes das linguagens de programa o Ao contr rio de uma linguagem de programa o n o existe um formalismo r gido de como deve ser escrito o algoritmo O algoritmo deve ser f cil de se interpretar e f cil de codificar Ou seja ele deve ser o intermedi rio entre a linguagem falada e a linguagem de programa o 2 2 2 Regras para constru o do Algoritmo Para escrever um algoritmo precisamos descrever a segii ncia de instru es de maneira simples e objetiva Para isso utilizaremos algumas t cnicas Usar somente um verbo por frase Imaginar que voc est desenvolvendo um algoritmo para pessoas que
60. a do programa esta redirecionada para outro dispositivo que n o seja a tela finclude lt stdio h gt main int argc char argv FILE fp int count char letter if argc 2 puts Digite o nome do arquivo exit 1 if fp fopen argv 1 w fputs Erro na abertura do arquivo stderr outra op ao puts Erro na abertura do arquivo exit 1 else for letter A letter lt Z letter putc letter fp fclose fp Se a sa da deste programa stdout for redirecionada para algum outro arquivo a mensagem de erro for osamente aparecer na tela porque estamos escrevendo em stderr fprintfQ e fscanf Comportam se como printf e scanf s que escrevem e l em de arquivos de disco Todos os c digos de formato e modificadores s o os mesmos Prot tipo finclude lt stdio h gt main int fprintf FILE fp char string de controle lista de argumentos int fscanf FILE fp char string de controle lista de argumentos 107 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Embora fprintf e fscanf sejam a maneira mais f cil de ler e escrever tipos de dados nos mais diversos formatos elas n o s o as mais eficientes em termos de tamanho de c digo resultante e velocidade Quando o formato de leitura e escrita for de import ncia secund ria deve se dar prefer ncia a fread e fwrite imprime os quadrados de 0 a 10
61. a nem gin stica nem futebol Atleta Pa s Esporte 2 1 3 3 Os cinco amigos Um grupo de cinco amigos decidem ir a um Est dio de futebol mas ir o se encontrar l dentro do Est dio Para ficar mais f cil de se encontrarem cada um vai com um bon de uma cor e uma camisa de um time diferente n o h dois amigos com a mesma camisa nem com bon da mesma cor Baseando nas afirma es abaixo descubra quem est com que camisa e qual a cor do bon que cada um estava usando a Marcos usa bon vermelho b Robson est usando a camisa do Brasil c O garoto que est com a camisa do S o Paulo n o usa bon amarelo d Quem usa bon verde est com a camisa do Guarani e Victor n o usa bon amarelo f Andr usa bon azul e n o preto g Victor est com a camisa do Santos h O garoto de bon azul est com a camisa do Cruzeiro Nome Camisa Bon Ant nio Robson Marcos Victor Andr 2 1 3 4 F 1 O diretor da corrida de F 1 esqueceu qual a ordem de largada da corrida e necessita saber disso para informar os jornalistas Sabendo que s o apenas seis pilotos e que cada um pertence a uma equipe onde as cores dos carros s o diferentes ajude o a formar a ordem de largada baseando se nas seguintes afirma es a O 1 colocado tem um carro amarelo b Eddie vai largar na frente da equipe Lola e atr s do carro azul c O carro de Rosset
62. a o correto funcionamento do programa Em que situa o o seu programa n o funcionar 22 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 3 8 2 Envio de d vidas Um programa ou trecho de c digo fonte submetido para avalia o deve estar aderente s Diretrizes para a Documenta o de Programas O assunto da mensagem deve conter MC102Z RA000000 Exerc cio n mero ou MC102Z RA000000 D vida sobre lt assunto aula N gt No corpo da mensagem forne a as seguintes informa es Descri o dos erros ocorridos e da s estrat gia s utilizada s para o teste do programa A fase de teste outra etapa importante no processo de desenvolvimento de software O processo de concep o de um software deve levar em conta a quest o sobre como testar o que foi constru do Obviamente n o poss vel verificar todas as possibilidades de uso de um software necess rio contudo executar uma s rie adequada de testes que d um grau m nimo de confian a de que o artefato de software constru do est funcionando de forma aceit vel O ideal seria que pessoas distintas das que tivessem elaborado um programa elaborassem as sequ ncias de teste baseadas apenas na descri o do que o programa faz e n o como o programa resolve o problema em quest o Quais foram as dificuldades encontradas Oque n o foi feito Oque foi feito a mais Sugest es sobre poss veis extens es e melhorias do
63. a o primeiro elemento O fato de o vetor ocupar um espa o cont guo na mem ria nos permite acessar qualquer um de seus elementos a partir do ponteiro para o primeiro elemento De fato o s mbolo vet ap s a declara o acima como j vimos representa um ponteiro para o primeiro elemento do vetor isto o valor de vet o endere o da mem ria onde o primeiro elemento do vetor est armazenado De posse do ponteiro para o primeiro elemento podemos acessar qualquer elemento do vetor atrav s do operador de indexa o vet 1 Dizemos que o vetor uma estrutura que possibilita acesso rand mico aos elementos pois podemos acessar qualquer elemento aleatoriamente No entanto o vetor n o uma estrutura de dados muito flex vel pois precisamos dimension lo com um n mero m ximo de elementos Se o n mero de elementos que precisarmos armazenar exceder a dimens o do vetor teremos um problema pois n o existe uma maneira simples e barata computacionalmente para alterarmos a dimens o do vetor em tempo de execu o Por outro lado se o n mero de elementos que precisarmos armazenar no vetor for muito inferior sua dimens o estaremos subutilizando o espa o de mem ria reservado A solu o para esses problemas utilizar estruturas de dados que cres am medida que precisarmos armazenar novos elementos e diminuam medida que precisarmos retirar elementos armazenados anteriormente Tais estruturas s o chamadas din micas e a
64. agem indicando se este n mero par ou mpar e se positivo ou negativo 8 3 4 A Secretaria de Meio Ambiente que controla o ndice de polui o mant m 3 grupos de ind strias que s o altamente poluentes do meio ambiente O ndice de polui o aceit vel varia de 0 05 at 0 25 Se o ndice sobe para 0 3 as ind strias do 1 grupo s o intimadas a suspenderem suas atividades se o ndice crescer para 0 4 as industrias do 1 e 2 grupo s o intimadas a suspenderem suas atividades se o ndice atingir 0 5 todos os grupos devem ser notificados a paralisarem suas atividades Fa a um diagrama de bloco que leia o ndice de polui o medido e emita a notifica o adequada aos diferentes grupos de empresas 8 3 5 Elabore um algoritmo em leia a idade de um nadador e classifique o em uma das seguintes categorias Infantil A 5 a 7 anos Infantil B 8a 11 anos Juvenil A 12 a 13 anos Juvenil B 14 a 17 anos Adultos Maiores de 18 anos 8 3 6 Construa um algoritmo que leia 500 valores inteiros e positivos e Encontre o maior valor Encontre o menor valor Calcule a m dia dos n meros lidos 8 3 7 Dados tr s n meros inteiros informados pelo usu rio apresent los em ordem crescente e a seguir em ordem decrescente 41 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 9 Estruturas de Repeti o Em muitas tarefas de programa o desejamos que um bloco de comandos seja e
65. alhes complementares importantes relativos constru o dos programas por voc produzidos bem como decis es de projeto tomadas por voc durante a sua implementa o Na sua vida profissional dificilmente voc ir desenvolver software apenas por voc Al m de embutir no c digo informa es complementares para o seu entendimento e de outras pessoas que necessitem entender a forma como o programa em quest o foi concebido e constru do preciso deixar claro na interface de usu rio em que estado o programa em execu o se encontra e o que esperado do usu rio em em cada estado A documenta o tamb m importante para voc pr prio Depois de um certo tempo n o lembramos mais de decis es de projeto tomadas quando da confec o de um determinado software Uma documenta o de um software deve registrar estas decis es para facilitar a manuten o deste software A documenta o portanto t o importante quanto o c digo Por esta raz o documente bem aquilo voc produz A documenta o de um programa pode estar embutida no pr prio programa e ou ser fornecido na forma de documentos complementares como um manual de usu rio Na disciplina a exig ncia m nima um c digo bem comentado e bem estruturado muito importante que voc se preocupe com a apresenta o do c digo do programa de modo a facilitar sua leitura As linhas no c digo devem ser alinhadas de modo a refletir a estrutura do programa Comandos interno
66. altera o em x n o afeta o conte do de n no escopo da fun o principal Dizemos ent o que o par metro passado por valor Isto nos permite por exemplo simplificar a fun o para double fatorial int x double fat 1 while x gt 1 fat fat x K return fat Por m em v rias situa es desejamos alterar o conte do de uma ou mais vari veis no escopo da fun o principal Neste caso os par metros devem ser passados por refer ncia Isto a fun o cria uma c pia do endere o da vari vel correspondente na fun o principal em vez de uma c pia do seu conte do Qualquer altera o no conte do deste endere o uma altera o direta no conte do da vari vel da fun o principal Por exemplo o programa completo acima requer que p lt n Caso contr rio podemos trocar o conte do dessas vari veis include lt stdio h gt prototipo da funcao fatorial double fatorial int x x e y sao apontadores para enderecos de memoria que guardam valores do tipo int void troca int x int y int main int n p C printf Informe n e p com n gt p scanf d d amp n amp p if p gt n troca amp p amp n passa os enderecos de p e n if p gt 0 amp amp n gt 0 C int fatorial n fatorial p fatorial n p printf Resultado d An C return 0 double fatorial int x escopo da funcao 13 UNICAMP Univer
67. amento dos elementos o que feito armazenando se junto com a informa o de cada elemento um ponteiro para o pr ximo elemento da lista A figura 2 ilustra o arranjo da mem ria de uma lista encadeada TA Figura 2 Exemplo de um n e do arranjo de mem ria de uma lista encadeada A estrutura consiste numa segii ncia encadeada de elementos em geral chamados de n s da lista A lista representada por um ponteiro para o primeiro elemento ou n Do primeiro elemento podemos alcan ar o segundo seguindo o encadeamento e assim por diante O ltimo elemento da lista aponta para NULL sinalizando que n o existe um pr ximo elemento Para exemplificar a implementa o de listas encadeadas em C vamos considerar um exemplo simples em que queremos armazenar valores inteiros numa lista encadeada struct lista int info struct lista prox typedef struct lista Lista Devemos notar que trata se de uma estrutura auto referenciada pois al m do campo que armazena a informa o no caso um n mero inteiro h um campo que um ponteiro para uma pr xima estrutura do mesmo tipo Embora n o seja essencial uma boa estrat gia definirmos o tipo Lista como sin nimo de struct lista conforme ilustrado acima O tipo Lista representa um n da lista e a estrutura de lista encadeada representada pelo ponteiro para seu primeiro elemento tipo Lista Considerando a defini o de Lista podemos definir as principais fun
68. anterior Quando p apontar para um elemento no meio da lista as duas atribui es acima s o suficientes para efetivamente acertar o encadeamento da lista No entanto se p for um elemento no extremo da lista devemos considerar as condi es de contorno Se p for o primeiro n o podemos escrever p gt ant gt prox pois p gt ant NULL al m disso temos que atualizar o valor da lista pois o primeiro elemento ser removido Uma implementa o da fun o para retirar um elemento mostrada a seguir fun o retira retira elemento da lista Lista2 retira Lista2 1 int v Lista2 p busca l v if p NULL return 1 n o achou o elemento retorna lista inalterada retira elemento do encadeamento if 1 p l p gt prox else p gt ant gt prox p gt prox if p gt prox NULL p gt prox gt ant p gt ant free p return l 19 6 Exerc cio Laborat rio 11 19 6 1 Fa a um programa que crie uma lista duplamente encadeada e nela permita inserir excluir buscar ordenar 96 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 20 Arquivos Arquivo Texto 101010100101100101 Arquivo Bin rio At o momento a entrada padr o teclado e a sa da padr o monitor foram utilizadas para a comunica o de dados Muitas situa es por m envolvem uma grande quantidade de dados dif cil de ser digitada e exibida na tela Esses dados s
69. antes de ser executado Essa tradu o conhecida como compila o ou interpreta o dependendo de como executada Compiladores traduzem o programa todo para a linguagem de m quina antes de executar qualquer instru o Interpretadores por outro lado seguem atrav s do programa traduzindo e ent o executando uma instru o isolada ou pequenos grupos de instru o Em ambos os casos a tradu o executada automaticamente pelo computador Na verdade programadores inexperientes podem at n o perceber qual dos processos est acontecendo j que normalmente v em apenas o programa original em linguagem de alto n vel os dados de entrada e os dados de sa da resultantes Um compilador ou interpretador n o passa de um programa de computador que aceita um programa de alto n vel por exemplo um programa em C como dado de entrada e gera um programa correspondente em linguagem de m quina como sa da O programa de alto n vel original chamado de programa fonte e o programa em linguagem de m quina resultante o programa objeto Toda linguagem de alto n vel precisa ter seu pr prio compilador ou interpretador para um determinado computador A maioria das implementa es em C opera como compilador apesar de interpretadores estarem se tornando cada vez mais comuns Em geral mais conveniente desenvolver um novo programa usando um interpretador do que um compilador Uma vez que o programa n o apresenta erros uma vers o compila
70. ara sair do programa Nn printf Digite a opcao desejada Nn scanf Sc amp opt if opt s 43 UNICAMP Universidade Estadual de Campinas Instituto de Computa o printf An Soma An printf Entre com a quantidade de n meros An scanf Zd amp n 1 Al Soma 020 while i lt n printf Digite o do numero i scanf f amp num soma soma num iesi ades printf O resultado da soma le f n soma while opt s return 0 Podemos tamb m criar um la o infinito substituindo do while por while 1 e sair dele com o comando break no else do if Outro comando de desvio interessante o comando continue Ele permite desconsiderar o restante do bloco de comandos voltando para o teste da express o l gica Por exemplo podemos desprezar o processamento de n meros negativos acrescentando if num lt 0 continue ap s a leitura do n mero 9 3 Comando FOR O comando for uma simplifica o do comando while onde a inicializa o da vari vel de controle a express o l gica envolvendo a vari vel de controle e a atualiza o da vari vel s o especificadas no pr prio comando Sua implementa o feita com o comando while portanto seu comportamento o mesmo ap s a inicializa o a express o l gica testada Se for verdadeira o bloco de comandos executado Ap s execu o a vari vel de controle
71. ath h gt main FILE fp float f M PI if fp fopen teste dat wb NULL puts Nao posso abrir arquivo exit 1 if fwrite amp f sizeof float 1 fp 1 puts Erro escrevendo no arquivo fclose fp return 0 r Como o programa anterior ilustra a rea intermedi ria de armazenamento pode ser e frequentemente simplesmente uma vari vel 103 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Uma das aplica oes mais teis de fread e fwrite o armazenamento e leitura r pidos de matrizes e estruturas estrutura uma entidade l gica a ser vista adiante em disco escreve uma matriz em disco tinclude lt stdio h gt tinclude lt stdlib h gt main FILE fp float exemplo 10 10 int ds if fp fopen exemplo dat wb NULL puts Nao posso abrir arquivo exit 1 for i 0 i lt 10 i ft for j 0 j lt 10 j lei de forma ao dos elementos da matriz exemplo i j float i j o c digo a seguir grava a matriz inteira em um nico passo if fwrite exemplo sizeof exemplo 1 fp 1 puts Erro ao escrever arquivo exit 1 fclose fp return O l uma matriz em disco tinclude lt stdio h gt tinclude lt stdlib h gt main E FILE fp float exemplo 10 10 int 1 5 if fp fopen exemplo dat rb NULL puts Nao posso abrir arquivo
72. ber N4 NO LIXO Calcular C m M dia N1 H2 H3 H4 4 Observe que no exemplo da bala seguimos uma segii ncia l gica somente com informa es diretas j no segundo exemplo da m dia utilizamos c lculo e exibimos o resultado do mesmo 3 7 Exerc cios 3 7 1 Construa um diagrama de blocos que 3 7 2 Desenvolva um diagrama que Leia a cota o do d lar Leia quatro n meros Leia um valor em d lares Calcule o quadrado para cada um Converta esse valor para Real Some todos Mostre o resultado Mostre o resultado 3 7 3 Construa um algoritmo para pagamento de comiss o de vendedores de pe as levando se em considera o que sua comiss o ser de 5 do total da venda e que voc tem os seguintes dados Identifica o do vendedor c digo Quantidade de pe as Pre o unit rio da pe a Ap s a constru o do diagrama de blocos e do algoritmo desenvolvido fa a um teste de mesa 21 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 3 8 Orienta o para o desenvolvimento de programas 3 8 1 Diretrizes para a Documenta o de Programas A documenta o de um programa complementa o seu c digo para torn lo mais compreens vel para quem for analisar os detalhes de sua implementa o bem como para facilitar o entendimento de seu funcionamento Pretende se com a cobran a de documenta o criar em voc o h bito de registrar ainda que de forma m nima det
73. cada dinamicamente na mem ria atrav s de malloc pois qualquer ponteiro pode ser indexado como se fosse uma matriz unidimensional Veja no exemplo a seguir Aloca espa o para uma string dinamicamente solicita a entrada do usu rios e em seguida mostra a string de tr s para frente finclude lt stdio h gt 69 UNICAMP Universidade Estadual de Campinas Instituto de Computa o tinclude lt stdlib h gt finclude lt string h gt void main void char s register int t s malloc 80 if Is printf Falha na solicitacao de memoria in exit 1 gets s for t strlen s 1 t gt 0 t putchar s t free s Acessar mem ria alocada como se fosse uma matriz unidimensional simples No entanto matrizes din micas multidimensionais levantam alguns problemas Como as dimens es da matriz n o foram definidas no programa n o poss vel indexar diretamente um ponteiro como se ele fosse uma matriz multidimensional Para conseguir uma matriz alocada dinamicamente necess rio passar o ponteiro como um par metro da fun o Dessa forma a fun o pode definir as dimens es do par metro que recebe o ponteiro permitindo assim a indexa o normal da matriz O exemplo a seguir constr i uma tabela dos n meros de 1 a 10 elevados a primeira segunda terceira e quarta pot ncia Se houver alguma advert ncia sobre as fun es table e show ignore tinclude lt stdio h
74. cada instante 4 3 Tipos de Vari veis As vari veis e as constantes podem ser basicamente de quatro tipos Num ricas Espec ficas para armazenamento de n meros que posteriormente ser o utilizados para c lculos Podem ser ainda classificadas como Inteiras ou Reais As vari veis do tipo inteiro s o para armazenamento de n meros inteiros e as reais s o para o armazenamento de n meros que possuam casas decimais Caracteres Espec ficas para armazenamento de caracteres somente letras 4 4 Exerc cios 4 4 1 O que uma constante D dois exemplos 4 4 2 O que uma vari vel D dois exemplos 4 4 3 Complete a tabela do teste de mesa abaixo Fa a um diagrama de blocos com os dados da tabela onde o usu rio informa apenas o sal rio A seguir escreva o algoritmo do programa Sal rio Abono Total 460 00 239 20 699 20 618 00 321 36 750 00 1 270 50 24 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 4 4 4 Considere um programa onde informado o sal rio e o reajuste de um funcion rio 15 por exemplo Observe o fluxograma abaixo Est correto argumente Reescreva o fluxograma que considera correto e seu respectivo algoritmo Recebe o Sal rio atual Valor do Reajuste Sal rio Novo z Sal rio Novo 4 5 Exerc cios Laborat rio 2 Descreva os passos utilizados para obter sucesso http www plastelina net games game 1 html
75. caracter da posi o i k a nova busca pode iniciar nesta posi o Note tamb m que toda vez que o padr o for encontrado na posi o i a pr xima busca pode iniciar na posi o i m Com essas observa es escreva um algoritmo mais eficiente para buscar padr es 63 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 14 Ponteiros Um ponteiro uma vari vel que cont m um endere o de mem ria Esse endere o normalmente a posi o de outra vari vel na mem ria Se uma vari vel cont m o endere o de outra ent o a primeira aponta para a segunda Endere o na Vari vel na Mem ria Mem ria 1000 1001 1002 1003 1004 1005 1006 Mem ria Figura 16 1 Uma vari vel que aponta para outra 14 1 Declara o e manipula o de ponteiros A forma geral de declarar uma vari vel do tipo ponteiro tipo vari vel O tipo base do ponteiro define que tipo de vari veis o ponteiro pode apontar Tecnicamente o tipo de ponteiro pode apontar para qualquer lugar na mem ria mas toda a aritm tica de ponteiros feita por meio do tipo base o que requer sua declara o correta Assim ponteiros do tipo INT devem apontar para vari veis do tipo INT FLOAT para FLOAT e assim por diante Os operadores especiais para ponteiro s o e amp O amp um operador un rio que devolve o endere o de mem ria para onde o ponteiro indica Neste exemplo o trecho de c digo abaixo atribui a m o endere
76. cio 10 2 2 fa a um programa onde dado um valor digitado pelo usu rio pesquise no terceiro vetor R utilizando busca bin ria 10 2 5 Considerando o exemplo para criar n meros aleat rios entre 0 e 50 fa a um programa que preencha um vetor de 500 posi es com n meros inteiros n o sinalizados unsigned int O programa deve retornar a o maior elemento do vetor b a m dia dos valores c a posi o do menor elemento do vetor d os n meros primos presentes no vetor include lt stdio h gt include lt stdlib h gt main int inicializar o gerador de n meros aleat rios com time NULL srand time NULL for i 0 i lt 15 i printf Sd rand 50 return 0 51 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 11 Ordena o Em muitas situa es como na busca bin ria desejamos vetores ordenados para tal Veremos aqui ordena o por sele o inser o e permuta o Para demonstrar ordenaremos de forma crescente 10 notas utilizadas no exemplo dado em aula 11 1 Ordena o por sele o O algoritmo mais intuitivo o de ordena o por sele o selection sort A id ia b sica percorrer o vetor v rias vezes selecionando o maior elemento e trocando o com o da ltima posi o ainda n o usada tinclude lt stdio h gt int main float nota 10 int i j jm printf Entre com 10 notas for i 0 i lt 10 i scanf
77. clude lt stdio h gt int main float nota 10 media 0 0 int i printf Entre com as notas dos alunos n for i 0 i lt 1l0 i printf Digite a nota 2d i 1 scanf f amp notal i media nota i media 10 0 printf AnMedia da classe 2f n n media for i 0 i lt 1l0 i if nota i gt media printf Nota d 2f n i 1 nota i return 0 47 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 2 5 4 5 9 0 7 0 5 5 8 3 8 7 9 3 10 0 9 0 O 1 2 3 4 5 6 7 8 9 Figura 1 Vetor com dez notas representado pelo identificador nota S vetor Entre com as notas dos alunos igi nota nota z nota nota nota nota nota nota nota ei m 1 DO DO ES n O Q sJ G aa oO oO an a a a a a a a a a a classe 7 38 Nota 3 1 9 00 Nota 61 8 38 Nota 9 1 18 88 Nota 181 9 00 Figura 2 Sa da do programa melhores notas O identificador uma vari vel do tipo apontador cujo conte do o endere o de mem ria do primeiro elemento do vetor Considere por exemplo o trecho de c digo abaixo int main int v 5 7 2 1 4 10 inicializacao de um vetor com 5 posicoes do tipo inteiro printf Endere o de v 0 gsd SdAn amp v 0 v printf Conteudo de v 0 gd d n v 0 v printf Conteudo de v 1 d d n v 1 v 1 printf Conteudo de v 4 d d n
78. colocamos ele na ltima posi o e depois repetimos o processo para s subsegii ncia terminada no pen ltimo Na ordena o por permuta o o processo similar Os elementos s o permutados at que o maior seja o ltimo e depois repetimos o processo para a subseq ncia terminada no pen ltimo Por exemplo a fun o abaixo ordena de forma recursiva um vetor v de inteiros e de tamanho n por inser o void Insercao int v int n int ipj Condicao de parada n 1 Retorna a chamada recursiva com v n 2 atribui i j e faz trocas y if mo E Insercao v n 1 i n 2 j n 1 while i gt 0 amp amp v i gt v j troca amp v i amp v j Jan 80 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 17 2 2 Ordena o por indu o forte A vantagem da indu o forte reduzir a complexidade da ordena o de O n2 para O n log n O algoritmo mais simples nesta linha o merge sort Este algoritmo subdivide a sequ ncia em duas ordena de forma recursiva cada parte e depois intercala as partes ordenadas Considerando que o vetor esta ordenado do inicio ate o meio e do meio 1 ate o final intercala seus elementos para que fique ordenado do inicio ao fim a void Intercala int v int inicio int meio int fim Ordenacao requer memoria auxiliar do mesmo tamanho da entrada int i j k aux N i inicio j meio 1 k inicio while i lt
79. da executar mais rapidamente que uma vers o interpretada As raz es disso est o fora do alcance de nossa discuss o 1 3 2 O surgimento do UNIX As ra zes do UNIX datam de meados dos anos 60 quando a AT amp T Honeywell GE e o MIT embarcaram em um massivo projeto para desenvolvimento de um utilit rio de informa o chamado Multics Multiplexed Information and Computing Service Multics era um sistema modular montado em uma bancada de processadores mem rias e equipamentos de comunica o de alta velocidade Pelo desenho partes do computador poderiam ser desligadas para manuten o sem que outras partes ou usu rios fossem afetados O objetivo era prover servi o 24 horas por dia 365 dias por ano um computador que poderia ser tornado mais r pido adicionando mais partes Em 1969 o projeto estava muito atrasado em rela o ao seu cronograma e a AT amp T resolveu abandona lo O projeto continuou no MIT Neste mesmo ano Ken Thompson um pesquisador da AT amp T que havia trabalhado no Projeto Multics pegou um computador PDP 7 para pesquisar algumas id ias do Multics por conta pr pria Logo Dennis Ritchie que tamb m trabalhou no Multics se juntou a ele Enquanto Multics tentava fazer v rias coisas UNIX tentava fazer uma coisa bem rodar programas Este pequeno escopo era todo mpeto que os pesquisadores precisavam UNICAMP Universidade Estadual de Campinas Instituto de Computa o 1 3 3 A evolu o das linguagens
80. dade Assim como a fun o main que agrupa as instru es do programa Uma fun o portanto uma sequ ncia de comandos que pode ser executada a partir da fun o principal ou de qualquer outra fun o As fun es simplificam a codifica o e permitem uma melhor estrutura o do programa evitando que uma mesma segii ncia de comandos seja escrita diversas vezes no corpo escopo da fun o principal Por exemplo suponha um programa par calcular o n mero C n p n p n p D de combina es de n eventos em conjuntos de p eventos p lt n Sem o conceito de fun o ter amos que repetir tr s vezes as instru es para c lculo do fatorial de um n mero x Com o conceito de fun o precisamos apenas escrever essas instru es uma nica vez e substituir x por n p e n p para saber o resultado de cada c lculo fatorial tinclude lt stdio h gt double fatorial int x prototipo da funcao int main into n poe printf Informe n e p com n gt p scanf d d amp n amp p if p gt 0 amp amp n gt 0 amp amp p lt n chamada da funcao C int fatorial n fatorial p fatorial n p printf Resultado d An C return 0 double fatorial int x escopo da funcao double fat 1 int i for i x i gt l i fat fat i return fat A fun o fatorial recebe o valor de uma vari vel da fun o principal armazena em uma vari vel x do seu escopo e
81. de M dia Final P1 P2 P3 P4 4 Para montar o algoritmo proposto faremos tr s perguntas a Quais s o os dados de entrada R S o P1 P2 P3 e P4 b Qual ser o processamento a ser utilizado o que fazer R Somar entradas e dividir por quatro c Quais ser o os dados de sa da R O dado de sa da ser a m dia final Algoritmo Receba a nota da proval Receba a nota de prova Receba a nota de prova3 Receba a nota da prova4 Some todas as notas Divida o resultado por 4 Mostre o resultado da divis o 2 4 Teste de Mesa Ap s desenvolver um algoritmo ele dever sempre ser testado Este teste chamado de TESTE DE MESA que significa seguir as instru es do algoritmo de maneira precisa para verificar se o procedimento utilizado est correto ou n o Utilize a tabela abaixo 15 UNICAMP Universidade Estadual de Campinas Instituto de Computa o P1 P2 P3 P4 M dia 2 5 Exerc cios 2 5 1 Fa a um algoritmo que calcule o valor total das pe as identificando os dados de entrada processamento e sa das onde se deva Receber o valor da pe a Receber a quantidade de pe as Calcular o valor total das pe as quantidade X valor Mostrar o valor total 2 5 2 Fa a um algoritmo para calcular o estoque m dio de uma pe a EstoqueMedio Quantidade MINima Quantidade MAXima 2 2 5 3 Fa a o teste de mesa para os algoritmos anteriores com dados def
82. de programa o A linguagem Algol foi definida por um comit de cientistas europeus em 1960 mas n o surgiram compiladores para ela de imediato Na tentativa de ter um Algol simplificado pesquisadores da Universidade de Cambridge Inglaterra desenvolveram a linguagem BCPL A partir dela Dennis Ritchie desenvolveu uma linguagem a qual chamou de B com o objetivo de poder escrever compiladores port teis Thompson e Ritchie unificaram seus esfor os levando a uma primeira defini o da linguagem C por volta de 1971 1 3 4 A evolu o da linguagem C A partir de 1971 o UNIX come ou a incorporar as caracter sticas que possui atualmente e em 1973 foi completamente reescrito em linguagem C Inicia se ent o a grande sinergia entre UNIX a linguagem C Desta evolu o podemos acompanhar a evolu o do UNIX e suas deriva es Em 1978 Ritchie e Thompson publicaram C The Programming Language Este livro tornou se um cl ssico por conter uma primeira defini o da linguagem C dispon vel fora do Bell Labs 1 3 5 A padroniza o da linguagem C At 1983 a maioria dos programas eram escritos em assembler linguagem espec fica para cada tipo de equipamento e a partir desse ano houve maior ades o a linguagem C A padroniza o foi constitu da pelo American National Standards Institute ANSI um comit com o objetivo de padronizar a linguagem C em virtude da press o econ mica criada sobre ela onde a defini o original pas
83. dif Nos arquivos contorno c e matriz c inclu mos os respectivos arquivos h e declaramos os escopos dessas fun es contorno c include contorno h Contorno CriaContorno int n Contorno c c n hn c p Ponto calloc n sizeof Ponto return c void DestroiContorno Contorno c if c p NULL free c p c p NULL Aqui voce acrescenta os escopos das outras funcoes que manipulam Contorno include Matriz CriaMatriz int nlin matriz c matriz h int ncol Matriz m int i m nlin nlin m ncol ncol m elem float calloc nlin sizeof float if m elem NULL for i 0 i lt nlin i m elem i sizeof float return m float calloc ncol void DestroiMatriz Matriz m A on a if m elem NULL for i 0 i lt m nlin i free m elem i free m elem m elem NULL Aqui voce acrescenta os escopos das outras funcoes que manipulam Matriz 111 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Para organizar o sistema podemos criar uma estrutura de diret rios com raiz mc102 por exemplo colocando os arquivos com extens o h em mc102 include e os arquivos com com extens o c em mc102 src Como um arquivo com a extens o c n o possui a fun o main ele n o considerado um programa Seu c digo ap s compilado tem extens o o e denominado c digo
84. do A frequ ncia s aulas te ricas e sess es de laborat rio ser atestada mediante assinatura de uma lista de presen a e ou chamada realizada pelo docente A assinatura em listas de presen a deve ser a oficial isto a mesma usada em documentos formais depositados junto DAC Observa es Importantes 1 As avalia es e o exame final ser o realizados nos hor rios correspondentes as aulas 2 Qualquer tentativa de fraude nas avalia es implicar em aproveitamento ZERO na atividade fraudada para todos os envolvidos 3 N o haver atendimento extra em v spera de avalia es 4 N o haver avalia o substitutiva 5 N o far exame o aluno que n o tiver a frequ ncia m nima exigida Crit rio de pontua o das avalia es Ser o aplicadas provas te ricas P1 P2 e P3 e as atividades em laborat rio ser o avaliadas pela participa o do aluno durante as aulas avalia es pr ticas L1 L2 e L3 O aproveitamento das avalia es te ricas ser P 2 P1 3 P2 5 P3 10 O aproveitamento das atividades em laborat rio ser L 2 L1 3 L2 5 L3 10 O aproveitamento final do semestre ser dado por A 6 P 4 L 10 Onde P gt 5 0 e L gt 5 0 faz aluno aprovado P gt 3 0 e L gt 5 0 faz aluno em exame A m dia final calculada por Se A gt 5 0 M A Sen o M A Exame 2 Bibliografia Sugerida Existem in meros textos sobre a linguagem C e seus variantes como Turbo C N o ser indicado
85. dos Uma implementa o dessa fun o mostrada abaixo A fun o percorre elemento a elemento liberando os importante observar que devemos guardar a refer ncia para o pr ximo elemento antes de liberar o elemento corrente se liber ssemos o elemento e depois tent ssemos acessar o encadeamento estar amos acessando um espa o de mem ria que n o estaria mais reservado para nosso uso void libera Lista 1 Lista p 1 while p r NULL Lista t p gt prox guarda refer ncia para o pr ximo elemento free p libera a mem ria apontada por p p t faz p apontar para o pr ximo Um programa que ilustra a utiliza o dessas fun es mostrado a seguir finclude lt stdio h gt int main void Lista 1 declara uma lista n o iniciada l inicializa inicia lista vazia l insere l 23 insere na lista o elemento 23 l insere l 45 insere na lista o elemento 45 1 insere l 56 insere na lista o elemento 56 l insere l 78 insere na lista o elemento 78 imprime 1 mostra elementos imprimir 78 56 45 23 l retira l 78 retira o elemento 78 da lista imprime 1 mostra elementos imprimir 56 45 23 l retira l 45 retira o elemento 45 da lista imprime 1 mostra elementos imprimir 56 23 libera 1 libera mem ria utilizada return 0 90 UNICAMP Universidade Estadual de Campinas Instituto d
86. e A aloca o din mica em C baseia se nas fun es malloc para alocar mem ria e free para liberar a mem ria alocada Apesar de existirem outras fun es de aloca o din mica estas s o as mais importantes Elas operam em conjunto usando a regi o de mem ria livre para estabelecer e manter a lista de armazenamento dispon vel Os prot tipos destas fun es que est o descritos em stdlib h s o Declaracao geral para alocar espaco void malloc size t lt n mero de bytes gt Na pratica char p p malloc 1000 ou desta forma h garantia de portabilidade do c digo fonte p malloc 50 sizeof int Declaracao geral para liberar mem ria void free void p Na pratica free p Ap s uma chamada bem sucedida de malloc temos um ponteiro para o primeiro byte da regi o de mem ria alocada do heap Se n o houver mem ria dispon vel para satisfazer a requisi o a fun o retorna zero Veja o trecho de c digo char pl1 int p2 if pl malloc 1000 printf Sem memoria disponivel in exit 1 p2 malloc 50 sizeof int free p1 free p2 importante salientar que o ponteiro enviado para a fun o free deve ser um ponteiro para mem ria alocada anteriormente por malloc Nunca se deve usar free com um argumento inv lido pois isso destruiria a lista de mem ria livre poss vel operar com uma matriz alo
87. e Computa o Mais uma vez observe que n o podemos deixar de atualizar a vari vel que representa a lista a cada inser o e a cada remo o de um elemento Esquecer de atribuir o valor de retorno vari vel que representa a lista pode gerar erros graves Se por exemplo a fun o retirar o primeiro elemento da lista a vari vel que representa a lista se n o fosse atualizada estaria apontando para um n j liberado Como alternativa poder amos fazer com que as fun es insere e retira recebessem o endere o da vari vel que representa a lista Nesse caso os par metros das fun es seriam do tipo ponteiro para lista Lista 1 e seu conte do poderia ser acessado atualizado de dentro da fun o usando o operador conte do 1 19 2 Exerc cio 19 2 1 Fa a um programa que crie uma lista e nela permita inserir excluir buscar ordenar 19 3 Listas Gen ricas Um n de uma lista encadeada possui basicamente duas informa es o encadeamento e a informa o armazenada Logo podemos ter uma informa o simples como um n mero inteiro um n mero real ou outra estrutura maior ou mais complexa Dessa forma poss vel construir listas heterog neas ou seja cada n da lista pode conter dados distintos Um exemplo da aplica o de lista heterog nea seria para calcular reas de objetos geom tricos planos r b h t b h 2 c pi r r Devemos definir um tipo para cada objeto a ser representado struct retangulo
88. e a lista n o era vazia pois neste caso o elemento anterior do ent o primeiro elemento passa a ser o novo elemento De qualquer forma o novo elemento passa a ser o primeiro da lista e deve ser retornado como valor da lista atualizada 95 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 19 5 2 Fun o de busca A fun o de busca recebe a informa o referente ao elemento que queremos buscar e tem como valor de retorno o ponteiro do n da lista que representa o elemento Caso o elemento n o seja encontrado na lista o valor retornado NULL fun o busca busca um elemento na lista Lista2 busca Lista2 1 int v Lista2 p for p l p NULL p p gt prox if p gt info v return Pp return NULL n o achou o elemento 19 5 3 Fun o que retira um elemento da lista A fun o de remo o fica mais complicada pois temos que acertar o encadeamento duplo Em contrapartida podemos retirar um elemento da lista conhecendo apenas o ponteiro para esse elemento Desta forma podemos usar a fun o de busca acima para localizar o elemento e em seguida acertar o encadeamento liberando o elemento ao final Se p representa o ponteiro do elemento que desejamos retirar para acertar o encadeamento devemos conceitualmente fazer p gt ant gt prox p gt prox p gt prox gt ant p gt ant isto o anterior passa a apontar para o pr ximo e o pr ximo passa a apontar para o
89. e uma segii ncia de comandos apresentados na fun o principal main Quando v rias tarefas s o necess rias as sequ ncias de comandos dessas tarefas podem ser agrupadas em fun es Esta forma de organiza o dos programas evita confus o na depura o do programa e prov uma melhor apresenta o do c digo fonte Estas fun es podem ser chamadas a partir da fun o principal e devem retornar o resultado da tarefa correspondente para que as demais tarefas possam ser executadas A pr pria fun o principal deve retornar o valor zero quando termina com sucesso V rias fun es matem ticas por exemplo s o disponibilizadas para o programador na linguagem C Al m de incluir as defini es de math h as fun es matem ticas precisa ser compiladas e incorporadas ao programa execut vel Isto feito com o comando gec exemplo c o exemplo Im Outros exemplos de fun es matem ticas s o raiz quadrada sgrt x cosseno cos x arco tangente atan x logaritmo neperiano In x e arredondamento round x Essas fun es podem ser encontradas em qualquer manual da linguagem C ou atrav s do comando man no GNU Linux finclude lt math h gt tinclude lt stdio h gt fdefine PI 3 1415926536 int main double a b int c d e E OA b exp a b 2 718282 a 4 0 a fabs a a 4 0 a pow a 3 0 a 64 0 b 10910 100 b 2 0 a sin PI 4 0 a 0 707107 5
90. enos tempo dependendo de sua estrutura Com o emprego da inform tica o algoritmo passa a ser o instrumento b sico para todas as linguagens no desenvolvimento de programas para os computadores Para a constru o de um algoritmo necess rio aprender a pensar utilizar se da l gica seus passos devem permitir uma nica interpreta o correta para que se realize a tarefa sem erros ou ambigiiidades Toda a estrutura obedece uma formata o para uma distin o das sequ ncias l gica podendo calcular armazenar e ser constitu da de rotinas de confer ncia at a realiza o completa da tarefa executada pelo usu rio atingindo seu objetivo Entendendo as nomenclaturas Os termos fluxograma diagrama de blocos ou algoritmos s o muito utilizados pelos profissionais de processamento de dados apesar de constitu dos de s mbolos que representam a linha de racioc nio l gico elas t m significados divergentes Entrela ado l gica o algoritmo pode ser definido como regras formais para obten o de um resultado tamb m conhecido como uma sequ ncia de passos ou etapas visando chegar a um objetivo O diagrama de blocos tem como prop sito descrever o m todo e a segii ncia do processo j o fluxograma a ferramenta usada com a finalidade de descrever o fluxo Usa s mbolos convencionais permitindo poucas varia es 115 UNICAMP Universidade Estadual de Campinas Instituto de Computa o TIPOS DE FLUXOGRAMA
91. ereeacereacereacareaanos 24 DDR RE Oa NS A UI O RR RR RR RR SUR EE DO DE A EUR RR UR a SENDO NES RR E NEI END UR Ne BRO RR 24 42V anaves oro doa aa O e a a O DS Ra 24 4 3 Tipos de Var Vv IS aore nenin erin na E sa fede taa ia dan ae E AE Sabes EE a acena nanda RES 24 4A ERCI OS pastas r nula pl paia O tao aguada ga qe des e LS Ea 24 4 5 Exercicios Laborat rio Di a RR Do a 25 5 Mitrod c o linpuacen tas ad a e as E SD RR Rd nda 26 5 1 Tipos b sicos da linguagem Cs cesta ES sa Nana nO EGO MIA RS EU 26 S2 Exercicio ae aa ira Cla natal and aa AAA ana aa E SM e aaa ata E een as 28 O Comandos A a O ana PA A a 29 DA SC onstames sn a a pd a a id 29 6 2 Definindo novos LPOS nssuskis nisni an a a E EEO REE T R 29 6 3 Fun es matem ticas e resto da divis o inteira ssssssseseseeeesseesseessrtsseeeseesssetssresseesseesseee 30 64 Manus ioide Caracteres iena e E E E Aa R A 30 6 3 Li earizac o de CQUA ES nni e e a A e E E A RE 31 6 6 Exercicios Laborat rio Jrs tni i naaa a e A a so 31 T Operadores nanu ra e EE T E O A E UR tada 32 To Operadores AMICS dan DRUM E EEEE ESSE 32 7 2 Operadores Relacionais neren E E E da 33 T3 Operadores L BICOS iranien ra E E EES AEE e AEE AE is 34 TAERErC CIOS nir e aa aaee aaee Tea a a ea ia anaE PETS 35 o Estruturas de CCIS O pn e EEE A E EAE E E EE 36 deli Exerc cios com fl xogram aS saeir ae NRO UU SODA aa a a eaS 36 8 2 Comandosd Decisiones a e a ma a eai eiai 37 8
92. esersrssrersreseese 5 1 3 4 A evolu o da linguagem C ssnsseessensseseeseseseseesseessresserseeessstessresseesseresseeesseessresseesseresseeee 5 1 3 5 A padroniza o da linguagem C sssssessseesssseessssssessseresseeesstesseesseesseeesseetsseesseesseessseeessees 5 1 3 6 Porgu studar a linguagem Cosa do idas ear a E TA A E ES 5 13 O s rement do Ends a a r E E Sa aai 5 1 3 8 Porque LINn X iena na e a a a e Dag a aia 6 1 4 Organiza o do computador scores aesesecissrenssaaiviscansp atesta datada ca des aa saca ad das actas ide pda dane ne can da o 6 Aos termos ACCNICOS acata O age cads Saad A a DT URSO RR TS T 1O Objetivos do Curso aii saia nadie asa E E AN E 8 1 7 Utiliza o da mem ria para programa o esessseseseeeesseessetsseessetessettsstesstrsseesseeessreesseesseesse 8 1 8 Exercicios Laborat no Liripio teisti ii desu fo asa esii Lari e ii iin 9 2 Loca de Prosramacaon onon E E E EE E E EEKE E E E 10 2 1 Introdu o L gica de Programa o essessessssseesseessessseseseeesseeesstesstesseeesetessseesseesseesseeesene 10 PAA E EO OI E E E E E A da T A E E EEE 10 2 1 2 Sequ ncia L GICA cias auisinigae nanassenidefsdicagas A E OE E AEE 10 2 1 3 Exerc cios que envolvem a IOSICd sas jonas RG pa a 10 DNS OO CS O a E E Rd id 12 0 Mio SE AN 40 9 hi D 6 nnn aaran n a E T A E T R a 12 2 176 Programas aos ei a A E a RU a E aa a RRE 13 DIe EXEC OS a aas e a a A E E S e a E 13 2 2 Desenvolve
93. espa o em branco ou v rgula include lt string h gt include lt stdio h gt define N 50 int main char valores 200 vaux float v N LHE ipni Recebe valores como string O primeiro numero digitado e n 61 UNICAMP Universidade Estadual de Campinas Instituto de Computa o seguido dos demais numeros fgets valores 199 stdin vaux valores sscanf vaux Sd amp n vaux strchr vaux 1 Separa os numeros digitados no vetor v for i 0 i lt n i sscanf vaux f amp v i vaux strchr vaux Mostra os numeros do vetor for i 0 i lt n i fprintf stdout f n v i return 0 13 3 Manipulando cadeias de caracteres Cadeias de caracteres podem ser manipuladas para diversos fins pr ticos O programa abaixo ilustra algumas opera es teis include lt string h gt include lt stdio h gt int main char s1 11 52 11 53 21 int resultado Le a primeira string fscanf stdin s s1l Le a segunda string fscanf stdin s s2 Verifica o comprimento das cadeias printf s tem d caracteresin sl strlen sl printf s tem d caracteres n s2 strlen s2 Compara se sao iguais resultado strcmp s1 s2 if resultado 0 printf s s n s1 s2 else if resultado lt 0 printf s lt s n s1 s2 Concatena strings strcat s3 s1 strcat s3 s2 printf s n s3 else a
94. gt tinclude lt stdlib h gt int pwr int a int b void table int p 4 10 void show int p 4 10 void main void C int p p int malloc 40 sizeof int if lp printf Falha na solicitacao de memoriain exit 1 aqui p e simplesmente um ponteiro para inteiros table p show p Constroi tabela de potencias void table int p 4 10 register int i 5 for j 1 j lt 11 j for i l i lt 5 i p i 1 5 1 pwr j i Exibe tabela de potencias void show int p 4 10 register int i j printf 10s 10s 10s 10s n N N 2 N 3 N 4 for j 1 j lt 11 j for i 1 i lt 5 i printf 10d pli 1 j 1 printf n eleva um inteiro a uma potencia especificada 70 UNICAMP Universidade Estadual de Campinas Instituto de Computa o pwr int a int b register int t 1 for b b t t a return t 14 4 Exerc cio 14 4 1 Reescreva o programa de multiplica o de matrizes e armazenamento da transposta 71 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 15 Fun es Em aulas anteriores vimos diversos comandos como printf scanf strlen streat entre outros que realizam tarefas mais complexas sobre valores de entrada Esses comandos s o denominados fun es pois consistem no agrupamento de instru es com uma determinada finali
95. http www plastelina net games game2 html http www plastelina net games game3 html Entregar descreva somente o resultado final http www profcardy com desafios aplicativos php id 1 1 Casa 1 Casa 2 Casa 3 Casa 4 Casa 5 25 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 5 Introdu o linguagem C Nos materiais anteriores a preocupa o foi introduzir o aluno ao meio da programa o apresentando o ambiente onde ser o escritos os c digo fonte nas aulas de laborat rio assim como a l gica de programa o necess ria para tal Os materiais at ent o trouxeram no es e at alguns c digos escritos em C o que ser explorado em maior profundidade a partir de agora Antes de come ar a transformar seus algoritmos em c digo fonte bom saber que esta linguagem possui algumas caracter sticas relevantes Uma delas o conjunto de palavras reservadas ou seja palavras que o programador n o deve utilizar para nomear suas vari veis S o elas auto const double float int short struct unsigned break continue Else for long signed switch void case default Enum goto register sizeof typedef volatile char do extern if return static union while Um programa em linguagem C em geral possui a seguinte estrutura include lt biblioteca gt declara es globais lt tipo devolvido gt main lista de par metros sequ ncia de comandos l
96. idade Estadual de Campinas Instituto de Computa o Observa o As mem rias prim ria e secund ria podem ser vistas como unidades de entrada e sa da Mem ria Principal Unidades de Entrada Unidades de Sa da Mem ria Secund ria Figura 1 Organiza o b sica de um computador 1 5 Alguns termos t cnicos bit unidade b sica para armazenamento processamento e comunica o de dados byte conjunto de 8 bits dados qualquer tipo de informa o ou instru o que pode ser manipulada pelo computador Exemplo textos imagens etc Fd palavra word um conjunto de N bytes ex N 1 2 4 8 Os dados s o organizados em palavras de N bytes Os processadores mais modernos tratam os dados em palavras de 16 bytes ou 128 bytes comandos s o as instru es que fazem o computador executar tarefas programa uma segii ncia de instru es com alguma finalidade arquivo conjunto de bytes que cont m dados Estes dados podem ser um programa uma imagem uma lista com nomes de pessoas etc software um conjunto de programas com um prop sito global em comum hardware consiste na parte f sica do computador sistema operacional conjunto de programas que gerenciam e alocam recursos de hardware e software Exemplo UNIX MS DOS Windows 0S 2 MAC OS Linux entre outros linguagem de programa o consiste da sintaxe gram tica e sem ntica significado utilizada para escrever ou codificar u
97. implementa o da fun o para retirar um elemento da lista mostrada a seguir Inicialmente busca se o elemento que se deseja retirar guardando uma refer ncia para o elemento anterior fun o retira retira elemento da lista Lista retira Lista l int v Lista ant NULL ponteiro para elemento anterior Lista p 1 ponteiro para percorrer a lista procura elemento na lista guardando anterior while p NULL amp amp p gt info v ant p p p gt prox verifica se achou elemento if p NULL return 1 n o achou retorna lista original retira elemento if ant NULL 89 UNICAMP Universidade Estadual de Campinas Instituto de Computa o l p gt prox retira elemento do inicio else ant gt prox p gt prox retira elemento do meio da lista free p return l O caso de retirar o ltimo elemento da lista recai no caso de retirar um elemento no meio da lista conforme pode ser observado na implementa o acima Mais adiante estudaremos a implementa o de filas com listas encadeadas Numa fila devemos armazenar al m do ponteiro para o primeiro elemento um ponteiro para o ltimo elemento Nesse caso se for removido o ltimo elemento veremos que ser necess rio atualizar a fila 19 1 7 Fun o para liberar a lista Uma outra fun o til que devemos considerar destr i a lista liberando todos os elementos aloca
98. in amp xmax printf Entre com o incremento dx An scanf Zf dx integral 0 0 for x xmin dx 2 0 x lt xmax dx 2 0 x x dx integral a x b dx printf integral f n integral return 0 9 4 Exerc cios 9 4 1 Fa a um algoritmo que determine o maior entre N n meros A condi o de parada a entrada de um valor 0 ou seja o algoritmo deve ficar calculando o maior at que a entrada seja igual a O ZERO 9 4 2 Uma rainha requisitou os servi os de um monge e disse lhe que pagaria qualquer pre o O monge necessitando de alimentos indagou rainha sobre o pagamento se poderia ser feito com gr os de trigo dispostos em um tabuleiro de xadrez de tal forma que o primeiro quadro deveria conter apenas um gr o e os quadros subseqiientes o dobro do quadro anterior A rainha achou o trabalho barato e pediu que o servi o fosse executado sem se dar conta de que seria imposs vel efetuar o pagamento Fa a um algoritmo para calcular o n mero de gr os que o monge esperava receber 9 4 3 Fa a um algoritmo que conte de 1 a 100 e a cada m ltiplo de 10 emita uma mensagem M ltiplo de 10 9 4 4 Escreva um programa cuja sa da em v deo possua m linhas com i asteriscos alinhados a esquerda onde i corresponde ao n mero da linha corrente Exemplo Para m 4 a sa da do programa deve ser x HA HAHA 46 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 10
99. ing uma segii ncia de letras s mbolos 2 90 amp entre outros espa os em branco e ou d gitos terminada por O ou seja um vetor de vari veis do tipo char tinclude lt stdio h gt int main char texto 100 Est e uma frase qualquer Int ds texto 3 a Corrige o erro no texto i 0 while texto i 0 Imprime caractere por caractere separado por printf c texto il i printf n s n texto Imprime o texto todo return 0 13 1 Lendo da entrada padr o At o momento vimos que o comando scanf pode ser usado para ler dados da entrada padr o teclado Mais adiante veremos que fscanf possui sintaxe similar por m mais gen rico Pois permite a leitura de dados n o s da entrada padr o identificada por stdin como a leitura de dados armazenados em um arquivo texto no formato ASCI A mesma observa o se aplica aos comandos printf e fprintf com identificador stdout para a sa da padr o include lt stdio h gt int main char texto 100 Le cadeias de caracteres ate encontrar espaco em branco nova linha ou EOF fim de arquivo Equivalente a scanf s texto O caractere 0 e inserido no final do vetor apos a leitura fscanf stdin s texto printf in sin texto return O A mesma rela o v lida entre outros comandos de entrada tais como gets fgets gete ou getchar e fgetc por m o comando fgets ma
100. inidos por voc 16 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 3 Diagrama de Bloco Fluxograma 3 1 O que um diagrama de bloco O diagrama de blocos uma forma padronizada e eficaz para representar os passos l gicos de um determinado processamento Com o diagrama podemos definir uma sequ ncia de s mbolos com significado bem definido portanto sua principal fun o a de facilitar a visualiza o dos passos de um processamento O objetivo principal do fluxograma descrever a segii ncia fluxo seja manual ou mecanizado especificando os suportes documento papel m dia formul rio ou qualquer outro que sejam usados para os dados e as informa es Em sua confec o s o usados s mbolos convencionados que permitem poucas varia es Apresenta como principal caracter stica ser claro e objetivo sendo o mais utilizado de todos os instrumentos e ferramentas disposi o do analista embora poucos profissionais o empreguem de forma pura O documento final elaborado deve estar constitu do por tr s grandes partes integrantes a saber e Cabe alho deve conter todas as informa es necess rias para identificar claramente ao que se refere incluindo nome do projeto e n mero de identifica o se houver nome do sub sistema nome do processo data quem elaborou e outras informa es de identifica o que sejam necess rias e Corpo cont m o fluxograma propriamente di
101. ional do arquivo Uma falha no fechamento de um arquivo leva a todo tipo de problemas incluindo se perda de dados arquivos destru dos e a possibilidade de erros intermitentes no seu programa Uma chamada fun ao fclose tamb m libera os blocos de controle de arquivo FCB associados ao fluxo e deixa os dispon veis para reutiliza o 100 UNICAMP Universidade Estadual de Campinas Instituto de Computa o O sistema operacional limita o n mero de arquivos abertos num dado momento Para abrir outros arquivos basta fechar aqueles que n o estiverem em uso Isto tamb m pode ser configurado no autoexec bat atrav s do ajuste de FILES A fun o fclose declarada como int fclose FILE fp onde fp o ponteiro do arquivo retornado pela chamada fun o fopen Um valor de retorno igual a zero significa uma opera o de fechamento com sucesso qualquer outro valor indica um erro poss vel usar a fun o padr o ferror discutida a seguir para determinar e reportar quaisquer problemas Geralmente a fun o fclose falhar quando uma uniadde de m dia disquete ou pendrive n o estiver mais dispon vel no sistema devido a remo o prematura ou falta de espa o livre na m dia A fun o ferror usada para determinar se uma opera o em um arquivo produziu algum erro A fun o ferror tem o seguinte prot tipo int ferror FILE fp onde fp um ponteiro v lido para um arquivo ferro
102. iplica o de matrizes O n mero de linhas da matriz 2 deve ser igual ao n mero de colunas da matriz 1 include lt stdio h gt define N 20 int main int m1 N N m2 N N m3 N N int 1l1 c i nlinl ncoll nlin2 ncol2 nlin3 ncol3 printf Entre com os numeros de linhas e colunas da matriz 1 scanf d Sd amp nlinl amp ncoll considerando nlin e ncol lt printf Entre com os numeros de linhas e colunas da matriz 2 scanf d Sd amp nlin2 amp ncol2 considerando nlin e ncol lt if ncoll nlin2 printf ERRO Numero de colunas da matriz 1 e diferente n printf do numero de linhas da matriz 2 n exit 1 Leitura da matriz 1 printf for 1 0 I lt nlinl 1 Entre com os el for c 0 c lt ncoll C lementos da matriz 1Nn E 20 56 UNICAMP Universidade Estadual de Campinas Instituto de Computa o scanf d sml 1 c Leitura da matriz 2 printf Entre com os elementos da matriz 2 n for 1 0 I lt nlin2 1 for c 0 c lt ncol2 c scanf d am2 1 c nlin3 nlinl ncol3 ncol2 Multiplica as matrizes for 1 0 I lt nlin3 1 for c 0 c lt ncol3 c m3 1 c 0 for i 0 i lt nlin2 i m3 1 c l m3 1 c m1 1 i m2 i c Mostra o resultado printf Resultado Nn for 1 0 I lt nlin3 1
103. is seguro do que gets pois especifica o n mero m ximo de caracteres que o vetor suporta finclude lt stdio h gt int main char texto 100 59 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Le no maximo 99 caracteres incluindo espacos em branco ate encontrar nova linha ou EOF Mais seguro que gets texto O caractere 0 e inserido no final do vetor texto apos a leitura fgets texto 99 stdin printf in sin texto return O Exemplo de um programa que l caracteres de um arquivo de entrada at preencher o vetor texto ou at o final do arquivo tinclude lt stdio h gt int main char texto 100 int 2 6 Le no maximo 99 caracteres ou ate fim de arquivo especificado na entrada padrao Exemplo de uso programa lt arquivo 1 0 while c fgetc stdin EOF amp amp i lt 100 texto i char c i printf n s n texto return 0 Uma varia o deste programa seria ler apenas a primeira linha caso us ssemos o n no lugar de EOF 13 2 Convertendo cadeias em n meros e vice versa Os comandos sprintf e sscanf funcionam de forma similar aos comandos printf e scanf porem utilizando uma cadeia de caracteres no lugar da sa da entrada padr o respectivamente tinclude lt stdio h gt int main char v1 10 v2 10 texto 100 float v3 int v4 Converte float para string sprintf vl 2 1f 3 4 printf s
104. ituto de Computa o 2 1 5 1 Algoritmizando a l gica Algoritmo uma sequ ncia de passos que visam atingir um objetivo bem definido Ex Trocar uma l mpada queimada Ligue o interruptor Se a l mpada n o acender ent o Pegue uma escada Posicione a embaixo da l mpada Busque uma l mpada nova Suba na escada Retire a l mpada velha Coloque a l mpada nova Aqui ainda n o vamos entrar em detalhes de como proceder SE algo acontecer Num primeiro momento consideremos que determinada l mpada est queimada Ent o para troc la fazemos Pegue uma escada Posicione a embaixo da l mpada Busque uma l mpada nova Suba na escada Retire a l mpada velha Coloque a l mpada nova Des a da escada Descarte a l mpada queimada Guarde a escada 2 1 5 2 M todo para constru o de algoritmos a Ler atentamente o enunciado b Retirar do enunciado a rela o das entradas de dados c Retirar do enunciado a rela o das sa das de dados d Determinar o que deve ser feito para transformar as entradas determinadas nas sa das especificadas e Construir o algoritmo f Executar o algoritmo 2 1 6 Programas Os programas de computadores nada mais s o do que algoritmos escritos numa linguagem de computador Pascal C Cobol Fortran Visual Basic entre outras e que s o interpretados e executados por uma m quina no caso um computador Notem que dada esta interpreta o rigorosa um program
105. l a gt i return 0 Menor ou igual a is A sa da do programa ser Verdadeiro 1 Falso 0 33 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Exemplo Considerando duas vari veis inteiras A 5 e B 3 os resultados das express es seriam Express o Resultado A B Falso A B Verdadeiro A gt B Verdadeiro A lt B Falso A gt B Verdadeiro A lt B Falso S mbolo utilizado para compara es em fluxograma 7 3 Operadores L gicos Os operadores l gicos servem para combinar resultados de express es retornando se o resultado final verdadeiro ou falso Os operadores l gicos s o E AND Uma express o AND s amp s verdadeira se todas as condi es forem verdadeiras OU OR Uma express o OR verdadeira se pelo menos uma condi o for verdadeira N O NOT Um express o NOT inverte o valor l gico da express o ou condi o A tabela abaixo mostra todos os valores poss veis criados pelos operadores l gicos 1 Operador 2 Resultado tinclude lt stdio h gt Valor Valor Define o tipo boolean onde O fals l tru T AND T T typedef enum false true boolean T AND F F F AND T F int main boolean v1 v2 v3 F AND F F vl true vl 1 T OR T T v2 false v2 0 T OR F T v3 vl amp amp v2 v3 0 esa y VvV Vl v3 F OR F F v3 vls amp v2
106. lemas tais como c lculos complexos gera o de relat rios comando de outras m quinas um rob por exemplo controle de contas banc rias comunica o de informa es entre outras Uma vis o simplificada do computador ilustrada na figura 1 Unidades de entrada Usadas pelo computador para receber instru es ou informa es externas Exemplo teclado mouse microfone c mera de v deo etc Unidades de sa da Usadas pelo computador para exibir os resultados da computa o Exemplo monitor impressora etc Unidade Central de Processamento CPU Central Processing Unit Respons vel pelo gerenciamento do sistema como um todo incluindo as mem rias e as unidades de entrada e sa da Unidade L gica e Aritm tica ULA Respons vel pelos c lculos matem ticos Alguns computadores tem esta unidade separada da CPU Tamb m chamado de co processador matem tico Mem ria Principal ou mem ria prim ria Usada pela CPU para armazenar instru es e informa es enquanto o computador est ligado Tamb m conhecida como mem ria RAM Random Access Memory Mem ria Secund ria Usada pelo computador para armazenar instru es e informa es por prazo indeterminado independente do estado do computador ligado ou desligado Em geral com capacidade de armazenamento bem maior do que a mem ria RAM mas de acesso mais lento Exemplo disco r gido HDD winchester disquetes fitas magn ticas etc UNICAMP Univers
107. lt 5 i fgets nome aux 49 stdin comp strlen nome aux strncpy amigo i nome nome aux comp 1 elimina An amigo i nome comp 1 0 insere 0 por garantia printf Entre com os telefones n for i 0 i lt 5 i fscanf stdin d amp amigo i telefone for i 0 i lt 5 i fprintf stdout s d n amigo i nome amigo i telefone return 0 18 1 Exerc cio Laborat rio 10 18 1 1 Fa a um programa para armazenar 20 nomes e 20 telefones em um vetor de registros colocar os elementos do vetor em ordem crescente de nome e depois imprimir o vetor ordenado 84 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 19 Listas Para representarmos um grupo de dados j vimos que podemos usar um vetor em linguagem C O vetor a forma mais primitiva de representar diversos elementos agrupados Para simplificar a discuss o dos conceitos que ser o apresentados agora vamos supor que temos que desenvolver uma aplica o que deve representar um grupo de valores inteiros Para tanto podemos declarar um vetor escolhendo um n mero m ximo de elementos fdefine MAX 1000 int vet MAX Ao declararmos um vetor reservamos um espa o cont guo de mem ria para armazenar seus elementos conforme ilustra a figura 1 e gt T Figura 1 Um vetor ocupa um espa o cont guo de mem ria permitindo que qualquer elemento seja acessado indexando se o ponteiro par
108. m programa UNICAMP Universidade Estadual de Campinas Instituto de Computa o a Alto N vel linguagem de codifica o de programa independente do tipo de m quina e de f cil utiliza o pelo ser humano Exemplo Pascal C COBOL BASIC JAVA entre outras b Baixo N vel linguagem de codifica o baseada em mnem nicos Dependente do tipo de m quina e de f cil tradu o para a m quina Conhecida como linguagem assembly linguagem de m quina conjunto de c digos bin rios que s o compreendidos pela CPU de um dado computador Depende do tipo de m quina compilador traduz programas codificados em linguagem de alto ou baixo n vel c digo fonte para linguagem de m quina c digo execut vel O assembler transforma um programa em assembly para linguagem de m quina Uma vez compilado o programa pode ser executado em qualquer m quina com o mesmo sistema operacional para o qual o programa foi compilado interpretador traduz o c digo fonte para c digo de m quina diretamente em tempo de execu o Exemplos de linguagens interpretadas s o BASIC Python TCL TK e LISP algoritmos s o procedimentos ou instru es escritos em linguagem humana antes de serem codificados usando uma linguagem de programa o Uma receita de bolo um bom exemplo da organiza o de um algoritmo 1 6 Objetivos do curso A figura 2 mostra um diagrama das tarefas b sicas para a solu o de problemas usando um computador O objeti
109. ma posi o na mem ria mais baixa que qu Geralmente compara es de ponteiros s o usadas quando dois ou mais ponteiros apontam para um objeto em comum Como exemplo veremos um programa que trabalha com uma pilha Uma pilha uma lista em que o primeiro acesso a entrar ser o ltimo a sair frequentemente comparada com uma pilha de pratos em uma mesa onde sempre se coloca ou pega um prato do topo Para criar uma pilha s o necess rias duas fun es push e pop para inserir e remover elementos respectivamente Observe o programa abaixo Programa PILHA BASE controla o inicio da pilha e P1 a quantidade de elementos Ocorre estouro quando P1 se deslocar alem do limite do vetor Bi SIZE ou quando voltar abaixo da BASE A include lt stdio h gt include lt stdlib h gt define SIZI Ea 10 int base pl pilha SIZ G1 La 65 UNICAMP Universidade Estadual de Campinas Instituto de Computa o coloca um elemento na pilha void push int i pl if pl base SIZE printf Estouro de pilha in exit 1 pl i retira um elemento da pilha pop void if pl base printf Pilha vazia n exit 1 pl return p1 1 retorna o valor retirado int main int valor base pilha aponta para o inicio da pilha pl pilha inicializa pl no inicio da pilha ptintf Anssi Pilha tra E printf nDigite um nu
110. mas s o escritos em linguagem de m quina por duas raz es importantes primeiro porque a linguagem de m quina muito trabalhosa e segundo porque a maioria dos equipamentos possui seu pr prio conjunto de instru es Isto torna a linguagem de m quina espec fica para cada arquitetura de computadores UNICAMP Universidade Estadual de Campinas Instituto de Computa o Normalmente um programa ser escrito em alguma linguagem de alto n vel cujo conjunto de instru es mais compat vel com a linguagem humana e com o modo humano de pensar A maior parte dessas linguagens de uso gen rico como BASIC C COBOL FORTRAN JAVA PASCAL entre outras al m de linguagens de uso espec fico LISP por exemplo utilizada na rea de intelig ncia artificial Os programas escritos em linguagem de alto n vel possuem instru es onde uma instru o equivaler a v rias instru es em linguagem de m quina Al m disso as mesmas regras b sicas de programa o aplicam se a todos os computadores Portanto um programa escrito em linguagem de alto n vel geralmente pode ser executado em diferentes computadores com pouca ou nenhuma altera o Por essas raz es o uso de linguagem de alto n vel oferece tr s vantagens significativas sobre o uso de linguagem de m quina simplicidade uniformidade e portabilidade independ ncia da m quina Um programa escrito em linguagem de alto n vel precisa ser traduzido para linguagem de m quina
111. mente como ponteiros para strings Assim poss vel criar uma fun o que exiba uma mensagem de erro quando dado seu n mero de c digo do erro como mostrado a seguir void syntax error int num static char err Arquivo nao pode ser aberto An Erro de leituraln Erro de escritan Falha da m dialn printf s err num s No exemplo anterior a matriz err cont m ponteiros para cada string com uma mensagem de erro O printf dentro de syntax error chamada com um ponteiro de caracteres que aponta para uma das v rias mensagens de erro indexadas pelo n mero de erro passado para a fun o Se passado o valor 1 para a fun o ser mostrada a mensagem Erro de leitura 68 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 14 3 1 Aloca o Din mica o meio pelo qual o programa pode obter mem ria enquanto est em execu o Vari veis globais t m o armazenamento alocado em tempo de compila o e vari veis locais usam pilha No entanto em tempo de execu o n o poss vel acrescentar vari veis locais ou globais Quando houver essa necessidade podemos usar a mem ria RAM dispon vel para alocar conforme a necessidade A mem ria alocada pelas fun es de aloca o din mica de C obtida do heap regi o de mem ria livre Embora seu tamanho seja desconhecido o heap geralmente cont m uma quantidade razo vel de mem ria livr
112. mento decremento e m dulo O m dulo retorna o resto de uma divis o Por exemplo 7 4 retornar 3 Antes Opera o Depois M n soma m n 2 3 soma m n 5 2 3 2 3 soma m nt 5 2 4 2 3 soma m n 6 2 4 Hierarquia das opera es aritm ticas preced ncia de operadores par nteses mais internos fun es matem ticas sen cos tan multiplica o divis o resto soma e subtra o Veja os exemplos a seguir considerando as vari veis a 10 b 5 c 3 d 7 R1 a b ctd 10 5 3 7 10 5 21 10 0 238095 10 238095 R2 atb ctd 10 5 3 7 15 21 0 714286 R3 a b c td 10 5 3 7 15 3 7 35 R4 a b c d 10 5 3 7 10 1 666667 7 21 666667 R5 a b c d 10 5 3 7 11 666667 7 81 666667 R6 a b c d 10 5 387 10 15 7 11 O decremento e incremento modificam os valores das vari veis R7 a 10 R8 a 10 Observe que em R7 o valor da vari vel a foi modificado a a 1 mas se mostrarmos R7 aparecer 10 Logo a seguir foi feito o inverso a a 1 onde R8 mostrar 10 O que acontece nesses exemplos o p s incremento ou seja R7 recebe o valor de a e depois a sofre incremento J no pr decremento o valor de a decrementado e depois R8 recebe o valor de a poss vel fazer pr e p s tratamento de vari veis tanto incremento como decremento
113. mero inteiro positivo para inserir na pilha printf nDigite zero para retirar um numero da pilha printf inDigite 1 para sair in do printf vValor 9 scanf Zd amp valor if valor 0 push valor else printf O valor do topo da pilha era din pop jwhile valor 1 Outras situa es em que podemos observar o comportamento do programa quando utilizamos ponteiros ftinclude lt stdio h gt ftinclude lt stdlib h gt fdefine SIZE 10 int pl p2 x 100 int v SIZE 51 24 36 49 53 62 71 87 98 105 int main int i pos Aritmetica de ponteiros Observe as posicoes em memoria pl 8x pl aponta para x p2 pl p2 aponta para p1 printt nx 2d Ss printf inP1l Endereco p printf inP2 Endereco p Decimal d Valor 1 pP Decimal d Valor d pl p1 p1 d p2 p2 p2 ae pl incremento de p printf nP1 Endereco p2 p2 12 printf inP2 Endereco p Decimal Zd Valor d p2 p2 p2 Decimal d Valor Sd pl pl p1 Ponteiros vetores pl v pl aponta para o vetor v UNICAMP Universidade Estadual de Campinas Instituto de Computa o printf inin Ponteiros Vetores printf inDigite a posicao 1 a 10 ou 1 para sairin Mostra o vetor inicializado printf nv for i 0 i lt 10 i printf Sd v il printf lt INICIAL An do Le uma posicao especifica
114. n inicial Verifica se a lista nao esta vazia if p percorre os elementos ate retornar ao inicio do printf Sdin p gt info imprime informa o do n p p gt prox avan a para o pr ximo n while p 1 A lista circular tamb m pode ser duplamente encadeada como veremos a seguir 19 5 Lista Duplamente Encadeada A estrutura de lista encadeada vista anteriormente caracteriza se por formar um encadeamento simples entre os elementos cada elemento armazena um ponteiro para o pr ximo elemento da lista Desta forma n o temos como percorrer eficientemente os elementos em ordem inversa isto do final para o in cio da lista O encadeamento simples tamb m dificulta a retirada de um elemento da lista Mesmo se tivermos o ponteiro do elemento que desejamos retirar temos que percorrer a lista elemento por elemento para encontrarmos o elemento anterior pois dado um determinado elemento n o temos como acessar diretamente seu elemento anterior Para solucionar esses problemas podemos formar o que chamamos de listas duplamente encadeadas Nelas cada elemento tem um ponteiro para o pr ximo elemento e um ponteiro para o elemento anterior Desta forma dado um elemento podemos acessar ambos os elementos adjacentes o anterior e o pr ximo Se tivermos um ponteiro para o ltimo elemento da lista 94 UNICAMP Universidade Estadual de Campinas Instituto de Computa o podemos percorrer a lis
115. n o trabalham com inform tica Usar frases curtas e simples Ser objetivo Procurar usar palavras que n o tenham sentido d bio 2 2 3 Fases No cap tulo anterior vimos que ALGORITMO uma segii ncia l gica de instru es que podem ser executadas importante ressaltar que qualquer tarefa que siga determinado padr o pode ser descrita por um algoritmo como por exemplo COMO FAZER ARROZ DOCE CALCULAR O SALDO FINANCEIRO DE UM ESTOQUE Entretanto ao montar um algoritmo precisamos primeiro dividir o problema apresentado em tr s fases fundamentais Onde temos ENTRADA gt PROCESSAMENTO Sm ENTRADA S o os dados de entrada do algoritmo PROCESSAMENTO S o os procedimentos utilizados para chegar ao resultado final SAIDA S o os dados j processados 14 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 2 2 4 Analogia com o homem ENTRADA PROCESSAMENTO saba I ej Itu O Percep o das E impress es sensoriais Lo Sa da do resultado dos processos Pensamento de pensamento Com o aux lio da nossa mem ria executam os diversos procesos como controlar comparar combinar l I i i Processo de I deduzir etc 2 3 Exemplo de Algoritmo Imagine o seguinte problema Calcular a m dia final dos alunos de uma determinada s rie Os alunos realizar o quatro provas P1 P2 P3 e P4 com valores reais 6 25 por exemplo On
116. n ricos e espec ficos devemos estar mais atentos para evitar equ vocos uma vez que o compilador n o capaz de verificar se as convers es realizadas s o v lidas 93 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 19 4 Listas Circulares Algumas aplica es necessitam representar conjuntos c clicos Por exemplo as arestas que delimitam uma face podem ser agrupadas por uma estrutura circular Para esses casos podemos usar listas circulares Numa lista circular o ltimo elemento tem como pr ximo o primeiro elemento da lista formando um ciclo A rigor neste caso n o faz sentido falarmos em primeiro ou ltimo elemento A lista pode ser representada por um ponteiro para um elemento inicial qualquer da lista A figura 1 ilustra o arranjo da mem ria para a representa o de uma lista circular ini Figura 1 arranjo da mem ria em uma lista circular Para percorrer os elementos de uma lista circular visitamos todos os elementos a partir do ponteiro do elemento inicial at alcan armos novamente esse mesmo elemento O c digo abaixo exemplifica essa forma de percorrer os elementos Neste caso para simplificar consideramos uma lista que armazena valores inteiros Devemos salientar que o caso em que a lista vazia ainda deve ser tratado se a lista vazia o ponteiro para um elemento inicial vale NULL void imprime circular Lista 1 Lista p l faz p apontar para o
117. n v1 Converte int para string sprintf v2 g2d 12 printf s n v2 Converte string para float sscanf v1 f amp v3 printf 2 1f n v3 60 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Converte string para int sscanf v2 Sd amp v4 printf d n v4 Grava numeros em string sprintf v1 2 1f 2d 3 4 12 printf s n v1 Ler numeros de strings Lembre se do bug que requer espaco em branco extra sscanf v1 f Sd amp v3 amp v4 printf 2 1f d n v3 v4 Gera string com valores formatados sprintf texto Os valores sao 2 1f e d n v3 v4 printf s texto return 0 Em algumas situa es desejamos que o programa leia uma seq ncia de n valores da entrada padr o Esses valores podem ser passados um por linha ou separados por espa os em branco ou v rgulas include lt stdio h gt define N 50 int main float v N int i n Recebe quantidade de numeros reais que serao lidos fscanf stdin d amp n Le os numeros for i 0 i lt n i fscanf stdin SE v 1 Mostra numeros lidos for i 0 i lt n i fprintf stdout f n v i return 0 Por m em alguns casos veremos que esses valores s o passados em um cadeia de caracteres Nesses casos o comando strchr pode ser usado para procurar a pr xima posi o da cadeia com um dado caractere por exemplo
118. n a este resultado Soma m n Soma m n 1 n Neste caso dizemos que a recurs o decrescente Podemos tamb m obter o mesmo resultado somando m com a soma de m 1 at n Soma m n m Soma m 1 n Neste caso dizemos que a recurs o crescente A solu o recursiva portanto pode ser implementada com fun es do tipo tipo funcao lt parametros gt lt variaveis locais gt if lt condicao de parada gt lt comandos finais gt return valor else 117 UNICAMP Universidade Estadual de Campinas Instituto de Computa o lt comando iniciais gt lt chamada recursiva gt lt comandos finais gt return valor Com base na fun o utilizada como exemplo temos e Solu o Crescente int Soma int m int n if m n return n else return m Soma m 1 n e Solu o Decrescente int Soma int m int n if m n return m else return Soma m n 1 n Recursao Crescente Recursao Decrescente t E 12345 go Aa 15 15 14 10 4 2 345 e mia 12 6 Sade X o LIES a Ed 3 45 lt a 9 3 f 4 5 p 1 2 z 1 al A Figura 1 rvores de Recurs o para m 1 e n 5 Observe que nestes exemplos n o precisamos de vari veis locais nem de comando iniciais e finais portanto podemos colocar a chamada recursiva no comando de retorno As rvores de recurs o mostradas na figura 1 ajudam a visualizar o comportamento dessas fun es
119. namento de cada espa o compat vel com um n mero inteiro Depois atribu mos valores aos espa os do escaninho Como os n meros n o ser o mais necess rios ap s a soma podemos usar algum dos espa os definidos para armazenar o resultado Pedimos ent o que o computador execute a soma e armazene o resultado num UNICAMP Universidade Estadual de Campinas Instituto de Computa o determinado espa o A figura 3 ilustra a situa o proposta acima Os espa os no escaninho a que nos referenciamos s o chamados de vari veis EM Ba CRE E ERRNSEEEES Figura 3 Exemplo de aloca o de mem ria pelo programa Algoritmo Programa transcrito em linguagem C Considere os espa os a e b Fun o principal As fun es e alguns Atribua 20 paraae 30 para b comandos tem escopo definido entre ko par nteses finclude lt stdio h gt int main ou seja ft inta Db a 20 b 30 Sejam a e b vari veis inteiras EA J imprime resultado na tela Fa a a 20 e b 30 printf d a Fa aa a b return 0 r Some a com b e coloque o resultado em a Em ambiente GNU Linux podemos utilizar o editor de texto emacs ou a interface ANJUTA para programa o http projects gnome org anjuta index shtml Para compilar o programa usuario S gcc exemplol c o exemplol Para executar o programa usuario S exemplol Em ambiente Windows podemos utilizar o Dev C ou CodeBlocks e http
120. ndo Alsortmos sa a A E E E E 14 22 DO Pseudoc di fonce et n a RD a a DRE a tea 14 2 2 2 Regras para constru o do Algoritmo sesssesssssresseessesssersseressstessressersseeesseeessresseesse 14 22 9 FASES eta aa n A RR RIO E E T A E R TaN 14 22 4 Analogia como Homens scirod n a A E E AEE 15 2 3 Exemplo de AlgoritM Osennii serasa A AEE E EE iae 15 2 4 Testede Mesa RN RD PR E RR A RD RD RR OR iak 15 2I EKET IOS r EE R EEEE GA E ORE E EE EER 16 3 Diagrama de Bloco Fluxograma eseesessesesessessessresresstsseserestessesstestessetstsstesseeseeseeeseesresersseset 17 3 LO que m diagrama de Bloco ririri oneee kiei a NUR ea a E a Ada an 17 3 2 SIMbOlO Sta e E EE E SR DARI O a AN ENR 17 2 Elabora o do UO rA E E aA E Ee EINE 19 3 4 Vantagens da utiliza o de fluxogramas esesssesessseesseeseesseetssetesseesseessersseeesseeesseesseesseeeseee 20 3 3 DeSVANtadenS cs aersserresisaariano puedo a E dennada Lai asa tada Pata TA A Rn UA CA I R dede a dia Ran a 20 3 6 Exemplos de poa ranaS seca e MD a 21 Sp EXET O Sonin sai Saias ia sei Sd A E ad e di Gt ER 21 3 8 Orienta o para o desenvolvimento de programas sesessseersssresseessresseeeseeesssetsseessersseeeseee 22 3 8 1 Diretrizes para a Documenta o de Programas essesseessssseesseesseessessseresseeessressresse 22 3 8 2 Envio ded vida S aus e TO sas R E A E i ET A Do 23 4 Constantes Vari veis e Tipos de Dados e reeererc
121. nf f amp notal i while 1 printf Digite a nota procurada ou 1 para sair do programa n scanf S amp x if x 1 0 break busca bin ria inicio 0 fim 9 achou false while inicio lt fim amp amp achou pos inicio fim 2 if x lt nota pos fim pos 1 else if x gt nota pos inicio pos 1 50 UNICAMP Universidade Estadual de Campinas Instituto de Computa o else achou true if achou printf nota 2f encontrada na posi o sd n nota pos pos else printf nota 2f nao encontrada n x return 0 10 2 Exerc cios Laborat rio 5 10 2 1 Fa a um programa que permita a um usu rio digitar e armazenar dois vetores com 10 n meros inteiros em cada Depois de digitado todos os valores calcular a soma dos elementos de mesma posi o dos vetores elemento a elemento armazenando em um terceiro vetor Exibir no monitor os elementos do terceiro vetor 10 2 2 Fa a um programa que leia 20 n meros reais e permita que o usu rio decida qual opera o realizar soma subtra o multiplica o ou divis o O vetor resultante de ser R A lt opera o gt B onde os valores lidos para o segundo vetor devem ser diferentes de zero 10 2 3 Com base no exerc cio 10 2 2 fa a um programa onde dado um valor digitado pelo usu rio pesquise no terceiro vetor R utilizando busca linear 10 2 4 Com base no exerc
122. nf linha d amp a num amigos a amigo Amigo calloc a num amigos sizeof Amigo if a amigo NULL for i 0 i lt a num amigos i fgets linha 199 aparg pos strchr linha amp strncpy a amigo 1 nome linha pos linha l sscanf post1 d amp a amigo i telefone fecha o arquivo fclose aparq return a void OrdenaAgenda Agenda a fo int i 5 5 m Amigo aux for j 0 j lt a num amigos l j jm j for i j 1 i lt a num_amigos i Co jm i if j jm aux a amigo 5 a amigo j a amigo jm a amigo jm aux void GravaAgenda Agenda a char nomearq int i FILE aparq cria novo arquivo texto para escrita aparq fopen nomearg w escreve no arquivo fprintf aparqg sdin a num amigos for 1 0 i lt a num amigos i if strcmp a amigo i nome a amigo jm nome fprintf aparq s Sdin a amigo i nome a amigo i telefone fecha arquivo fclose aparg void DestroiAgenda Agenda a if a amigo NULL free a amigo int main Agenda a 109 UNICAMP Universidade Estadual de Campinas Instituto de Computa o a LeAgenda nomes txt OrdenaAgenda a GravaAgenda a arqg ord txt DestroiAgenda a return 0 20 10 Exerc cio Proposto 20 10 1 Fa a uma agenda que armazene nome endere o telefone e e mail dos contatos O programa permitir que o usu rio insi
123. nova lista representada pelo ponteiro para o novo elemento inser o no in cio retorna a lista atualizada Lista insere Lista l int i Lista novo Lista malloc sizeof Lista novo gt info i novo gt prox l return novo Esta fun o aloca dinamicamente o espa o para armazenar o novo n da lista guarda a informa o no novo n e faz este n apontar para isto ter como pr ximo elemento o elemento que era o primeiro da lista A fun o ent o retorna o novo valor que representa a lista que o ponteiro para o novo primeiro elemento A figura 3 ilustra a opera o de inser o de um novo elemento no in cio da lista inicio NULL Figura 3 Inser o de novo elemento na lista A seguir ilustramos um trecho de c digo que cria uma lista inicialmente vazia e insere nela novos elementos int main void Lista 1 declara uma lista n o inicializada 1 inicializa inicializa lista como vazia 1 insere l 23 insere na lista o elemento 23 l insere l 45 insere na lista o elemento 45 return O Observe que n o podemos deixar de atualizar a vari vel que representa a lista a cada inser o de um novo elemento 87 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 19 1 3 Fun o que percorre os elementos da lista Para ilustrar a implementa o de uma fun o que percorre todos os elementos
124. ntf ininEscolheu REFEICAOn break case C printf ininEscolheu LANCHESin break case D printf ininEscolheu BEBIDASin break case E printf ininEscolheu SOBREMESASAn break default printf AninChame o garcom para tirar duvidasin return 0 8 3 Exerc cios Laborat rio 4 8 3 1 Jo o comprou um microcomputador para controlar o rendimento di rio de seu trabalho Toda vez que ele traz um peso de peixes maior que o estabelecido pelo regulamento de pesca do estado de S o Paulo 50 quilos deve pagar uma multa de R 4 00 por quilo excedente Jo o precisa que voc fa a um diagrama de blocos e algoritmo que leia a vari vel P peso de peixes e verifique se h excesso Se houver gravar na vari vel E Excesso e na vari vel M o valor da multa que Jo o dever pagar Caso contr rio mostrar tais vari veis com o conte do ZERO 8 3 2 Elabore um diagrama de bloco que leia as vari veis C e N respectivamente c digo do oper rio e n mero de horas trabalhadas Calcule o sal rio sabendo se que ele ganha R 10 00 por hora Quando o n mero de horas exceder 44 calcule o excesso de pagamento armazenando o na vari vel E caso contr rio zerar tal vari vel A hora excedente de trabalho vale R 20 00 No final do processamento imprimir o sal rio total pago e o valor do sal rio excedente 8 3 3 Fa a um diagrama de bloco que leia um n mero inteiro e mostre uma mens
125. nto na lista Lista busca Lista 1 int v Lista p for p l p NULL p p gt prox if p gt info v return Pp return NULL n o achou o elemento 88 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 19 1 6 Fun o que retira um elemento da lista Para completar o conjunto de fun es que manipulam uma lista devemos implementar uma fun o que nos permita retirar um elemento A fun o tem como par metros de entrada a lista e o valor do elemento que desejamos retirar e deve retornar o valor atualizado da lista pois se o elemento removido for o primeiro da lista o valor da lista deve ser atualizado A fun o para retirar um elemento da lista mais complexa Se descobrirmos que o elemento a ser retirado o primeiro da lista devemos fazer com que o novo valor da lista passe a ser o ponteiro para o segundo elemento e ent o podemos liberar o espa o alocado para o elemento que queremos retirar Se o elemento a ser removido estiver no meio da lista devemos fazer com que o elemento anterior a ele passe a apontar para o elemento seguinte e ent o podemos liberar o elemento que queremos retirar Devemos notar que no segundo caso precisamos do ponteiro para o elemento anterior para podermos acertar o encadeamento da lista As figuras 4 e 5 ilustram as opera es de remo o inicio inicio gt Figura 5 Remo o de um elemento do meio da lista Uma poss vel
126. o por m o byte de mais alta ordem zero A fun o get retornar uma marca EOF quando o fim do arquivo tiver sido encontrado ou um erro tiver ocorrido Portanto para ler um arquivo texto at que a marca de fim de arquivo seja mostrada voc poder usar o seguinte c digo ch getc fp while ch EOF ch getc fp 20 5 Usando a fun o feof Quando um arquivo bin rio aberto poss vel encontrar um valor inteiro que marca o final do arquivo EOF End Of File Isso pode fazer com que na rotina anterior seja indicada uma condi o de fim de arquivo ainda que o final do arquivo f sico n o tenha sido encontrado Para resolver esse problema foi inclu da a fun o feof que usada para determinar o final de um arquivo quando da leitura de dados bin rios A fun o feof tem este prot tipo int feof FILE fp O seu prot tipo est em STDIO H Ela retorna verdadeiro se o final do arquivo tiver sido encontrado caso contr rio retornado um zero Portanto a seguinte rotina l um arquivo bin rio at que o final do arquivo seja encontrado Este m todo pode ser aplicado para arquivo texto ou bin rio while feof fp ch getc fp 20 6 Fechando um arquivo A fun o fclose usada para fechar um fluxo que foi aberto por uma chamada fun o fopen Ela escreve quaisquer dados restantes na rea intermedi ria fluxo no arquivo e faz um fechamento formal em n vel de sistema operac
127. o armazenados em arquivos u ficam em dispositivos secund rios de mem ria como disco r gido ou pendrive por exemplo Portanto um arquivo uma seqii ncia de bytes com uma identifica o que permite o sistema operacional exibir na tela seu nome tamanho e data de cria o Existem dois tipos de arquivos texto e bin rio Um arquivo texto armazena os dados em ASCII na forma de segii ncia de caracteres os quais podem ser exibidos na tela com o comando more em Linux Unix ou type no DOS ou em prompt de comando do Windows J um arquivo bin rio armazena os dados na forma de bin ria seqii ncia de bits e normalmente ocupa bem menos espa o em mem ria do que um arquivo texto para armazenar a mesma informa o Os arquivos s o manipulados com vari veis do tipo apontador para arquivo as quais s o declaradas da seguinte forma include lt stdio h gt int main FILE ponteiro_de_arquivo return 0 Um ponteiro de arquivo um ponteiro para uma rea na mem ria buffer onde est o contidos v rios dados sobre o arquivo a ler ou escrever tais como o nome do arquivo estado e posi o corrente O buffer apontado pelo ponteiro de arquivo a rea intermedi ria entre o arquivo e o programa Este buffer intermedi rio entre o arquivo e o programa chamado fluxo e no jarg o dos programadores comum falar em fun es que operam fluxos Isto se deve ao fato de que fluxo uma entidade l gica gen rica
128. o campo raio ListaGen cria cir float r Circulo c ListaGen p aloca c rculo c Circulo malloc sizeof Circulo C gt F is aloca n p ListaGen malloc sizeof ListaGen p gt tipo CIR p gt info C p gt prox NULL return Pp Uma vez criado o n podemos inseri lo na lista como j v nhamos fazendo com n s de listas homog neas Para calcular devidamente as reas utilizaremos uma fun o auxiliar fdefine PI 3 14159 Funcao Auxiliar calcula area correspondente ao n float area ListaGen p float a rea do elemento switch p gt tipo case RET converte para ret ngulo e calcula rea Retangulo r Retangulo p gt info a r gt b r gt h break case TRI converte para tri ngulo e calcula rea Triangulo t Triangulo p gt info a t gt b t gt h 2 break case CIR converte para c rculo e calcula rea Circulo c Circulo p gt info a PI c gt r c gt r break return a Funcao para calculo da maior area float maior area ListaGen 1 float maior 0 0 maior area ListaGen p for p 1 p NULL p p gt prox float a area p area do no if a gt maior maior a return maior Outra possibilidade a implementa o de fun es espec ficas para o c lculo de cada objeto a crit rio do desenvolvedor Quando utilizamos ponteiros ge
129. o contr rio o aluno dever fazer exame if media gt 5 printf Aluno APROVADO else printf Aluno em EXAME Exemplos Programa verifica se numero e par ou impar tinclude lt stdio h gt int main int n printf Digite um numero scanf da amp n if n 2 0 printf Numero par n else printf Numero impar in return 0 Podemos ainda ter estruturas compostas da seguinte maneira tinclude lt stdio h gt int main float n1l n2 media printf Digite a nota 1 scanf f amp nl printf Digite a nota 2 scanf f amp n2 media nl n2 2 if media gt 7 printf AnMedia 2f Aprovadoin media else if media gt 3 printf AnMedia 2f Exame n media else printf AnMedia 2f Reprovado n media return 0 39 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 8 2 3 SELECIONE CASO A estrutura de decis o SWITCH CASE utilizada para testar na condi o uma nica express o que produz um resultado ou ent o o valor de uma vari vel em que est armazenado um determinado conte do Compara se ent o o resultado obtido no teste com os valores fornecidos em cada cl usula case O conte do da vari vel analisada pode ser um n mero inteiro ou caractere SWITCH vari vel CASE 1 instru o break C
130. ome ent o ser criado um Se quiser acrescentar dados ao final do arquivo deve usar o modo a Para se abrir um arquivo para opera es de leitura necess rio que o arquivo j exista Se ele n o existir ser retornado um erro Finalmente se o arquivo aberto para escrita leitura as opera es feitas n o apagar o o arquivo se ele existir entretanto se n o existir ser criado 20 3 Escrevendo um caractere A fun o putc usada para escrever caracteres para um fluxo que foi previamente aberto para escrita pela fun o fopen A fun o declarada como int putc int ch FILE fp onde fp o ponteiro de arquivo retornado pela fun o fopen e ch o caractere a ser escrito Por raz es hist ricas ch chamado formalmente de int mas somente o caractere de mais baixa ordem usado 99 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Se uma opera o com a fun o putc for satisfat ria ela retornar o caractere escrito Em caso de falha um EOF retornado EOF End Of File uma macrodefini o em STDIO H que significa fim do arquivo 20 4 Lendo um caractere A fun o getc usada para ler caracteres do fluxo aberto em modo de leitura pela fun o fopen A fun o declarada como int getc FILE fp onde fp um ponteiro de arquivo do tipo FILE retornado pela fun o fopen Por razoes hist ricas a fun o getc retorna um inteir
131. ou nao finclude lt stdio h gt int main int n printf Digite um n mero scanf S d amp n if n gt 0 printf Numero positivo return 0 Programa recebe dois n meros compara os e mostra resultados tinclude lt stdio h gt int main int a b printf Digite a e b podemos ler mais de uma vari vel por linha deixando espa o em branco entre os n meros NA scanf Sd d amp a amp b if a gt b printf d e maior que d n a b if b printf Os numeros sao iguais d n a if a lt b printf d e menor que d n a b if a l b printf sd diferente de d n a b return 0 38 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 8 2 2 SE ENT O SEN O A estrutura de decis o SE ENT O SEN O funciona exatamente como a estrutura SE com apenas uma diferen a em SE somente podemos executar comandos caso a condi o seja verdadeira diferente de SE SEN O pois sempre um comando ser executado independente da condi o ou seja caso a condi o seja verdadeira o comando da condi o ser executado caso contr rio o comando da condi o falsa ser executado if condicao Se verdadeiro executa instrucaol instrucaol else Se falso executa instrucao 2 instrucao2 Considerando o exemplo anterior se m dia gt 5 aluno aprovado Cas
132. parado n o tem muito sentido para obtermos o resultado precisamos colocar em pr tica o conjunto de todas as instru es na ordem correta Instru es s o um conjunto de regras ou normas definidas para a realiza o ou emprego de algo Em inform tica o que indica a um computador uma a o elementar a executar 2 1 5 Algoritmo Um algoritmo formalmente uma seq ncia finita de passos que levam a execu o de uma tarefa Podemos pensar em algoritmo como uma receita uma segii ncia de instru es que d o cabo de uma meta espec fica Estas tarefas n o podem ser redundantes nem subjetivas na sua defini o devem ser claras e precisas Como exemplos de algoritmos podemos citar as opera es b sicas multiplica o divis o adi o e subtra o de n meros reais decimais Outros exemplos seriam os manuais de aparelhos eletr nicos que explicam passo a passo como executar uma determinada tarefa por exemplo converter uma m sica de um CD para MP3 At mesmo as coisas mais simples podem ser descritas por sequ ncias l gicas Por exemplo Chupar uma bala Somar dois n meros inteiros quaisquer Pegarabala Escreva o primeiro n mero no ret ngulo A Retirar o papel Escreva o segundo n mero no ret ngulo B Chupar a bala Some o n mero do ret ngulo A com n mero Jogar o papel no lixo do ret ngulo B e coloque o resultado no ret ngulo C 12 UNICAMP Universidade Estadual de Campinas Inst
133. pecifica o de caminho PATH Como determinado a fun o fopen retorna um ponteiro de arquivo que n o deve ter o valor alterado pelo seu programa Se um erro ocorre quando se est abrindo um arquivo fopen retorna um nulo Como a tabela abaixo mostra um arquivo pode ser aberto ou em modo texto ou em modo bin rio No modo texto as segii ncias de retorno de carro e alimenta o de formul rios CR LF que significa Carriage Return Line Feed ou simplesmente ENTER s o transformadas em sequ ncias de novas linhas na entrada Na sa da ocorre o inverso Tais transforma es n o acontecem em um arquivo bin rio Os valores v lidos para modo Modo Significado NEM Abre um arquivo para leitura w Cria um arquivo para escrita a Acrescenta dados para um arquivo existente rp Abre um arquivo bin rio para leitura wb Cria um arquivo bin rio para escrita ab Acrescenta dados a um arquivo bin rio existente Sra Abre um arquivo para leitura escrita w Cria um arquivo para leitura escrita a Acrescenta dados ou cria um arquivo para leitura escrita r b Abre um arquivo bin rio para leitura escrita w b Cria um arquivo bin rio para leitura escrita a b Acrescenta ou cria um arquivo bin rio para leitura escrita 98 UNICAMP Universidade Estadual de Campinas Instituto de Computa o LET Abre um arquivo texto para leitura wt Cria um arquivo texto para escrita at Ac
134. programa Coment rios pessoais sobre o que julgar relevante Caso seja necess rio enviar anexos comunique primeiro atrav s da p gina de contato da disciplina e aguarde as orienta es na mensagem de resposta monitoria102 gmail com 23 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 4 Constantes Vari veis e Tipos de Dados Vari veis e constantes s o os elementos b sicos que um programa manipula Uma vari vel um espa o reservado na mem ria do computador para armazenar um tipo de dado determinado Vari veis devem receber nomes para poderem ser referenciadas e modificadas quando necess rio Um programa deve conter declara es que especificam de que tipo s o as vari veis que ele utilizar e s vezes um valor inicial Os tipos primitivos s o inteiros reais e caracteres As express es combinam vari veis e constantes para calcular novos valores 4 1 Constantes Constante um determinado valor fixo que n o se modifica ao longo do tempo durante a execu o de um programa Conforme o seu tipo a constante classificada como sendo num rica l gica e literal 4 2 Vari veis Vari vel a representa o simb lica dos elementos de um certo conjunto Cada vari vel corresponde a uma posi o de mem ria cujo conte do pode se alterado ao longo do tempo durante a execu o de um programa Embora uma vari vel possa assumir diferentes valores ela s pode armazenar um valor a
135. qualquer texto em especial As refer ncias citadas s o sugest es para seu estudo L MEIRELLES Fernando de Souza Inform tica Novas aplica es com microcomputadores 2a Ed S o Paulo Makron Books 1994 2 FORBELLONE Andr L V L gica de Programa o A constru o de Algoritmos e estruturas de dados S o Paulo Makron Books 1993 3 GUIMARAES Angelo de Moura LAGES Newton A C Algoritmos e estruturas de dados Rio de Janeiro LTC 1985 4 KERNIGHAN B W RITCHIE D M The C Programming Language ANSI C Prentice Hall 2nd Edition 1978 ISBN 978 0131101630 5 SCHILDT Herbert C Completo e Total 3a Ed Makron Books 1997 ISBN 8534605955 6 GOTTFRIED Byron S Programando em C Cole o Schaum MCGraw Hill 1993 7 HARBISON Samuel P et al C A Reference Manual 5a Ed Prentice Hall 2002 ISBN 0 13 089592X 8 DEITEL H M amp DEITEL P J C How to Program Introducing C and Java 3a Ed Prentice Hall 2000 9 PLANTZ A C C Quick Reference Que Pub 1988 ISBN 9780880223720 10 KOENIG Andrew C Traps and Pitfalls Addison Wesley 1989 ISBN 0 201 17928 8 11 OUALLINE Steve Practical C programming 3rd Ed O Reilly 1997 ISBN 9781565923065 12 HANSEN Augie C Programming A Complete Guide to Mastering the C Language Addison Wesley 1989 13 SCHILDT Herbert C Avan ado Guia do Usu rio 2a Ed McGraw Hill 1989 Calend rio do curso AGOSTO 18
136. r retorna verdadeiro se um erro ocorreu durante a ltima opera o com o arquivo e falso caso contr rio Uma vez que cada opera o em arquivo determina uma condi o de erro a fun o ferror deve ser chamada imediatamente ap s cada opera o com o arquivo caso contr rio um erro pode ser perdido O prot tipo de fun o ferror est no arquivo STDIO H A fun o rewind recolocar o localizador de posi o do arquivo no in cio do arquivo especificado como seu argumento O seu prot tipo void rewind FILE fp onde fp um ponteiro de arquivo O prot tipo para a fun ao rewind est no arquivo STDIO H Exemplos Grava em disco dados digitados no teclado at receber Utiliza o programa arquivo txt w include lt stdio h gt include lt stdlib h gt main int argc char argv FILE fp char ch if argc 3 puts AJUDA digite apos o nome do programa o arquivo e o modo exit 1 Experimente wb e wt para testar newline ENTER if fp fopen argv 1 argv 2 NULL puts O arquivo nao pode ser aberto exit 1 do ch getchar 1 caracteres do teclado no buffer at newline if EOF putc ch fp puts Erro ao escrever no arquivo break 101 UNICAMP Universidade Estadual de Campinas Instituto de Computa o while ch fclose fp return O AA FEAE TEE EAE EAE E AE E AE E FE
137. ra remova e procure seus contatos 110 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 21 Sistemas Um sistema um conjunto de programas que compartilham uma ou mais bibliotecas de fun es Quando projetamos um sistema cada estrutura abstrata e as fun es que realizam opera es com esta estrutura devem ser declaradas em arquivos com extens es h e c separados dos arquivos de programa Por exemplo nos arquivos contorno h e matriz h n s declaramos estruturas e prot tipos das fun es contorno h ifndef CONTORNO H define CONTORNO H 1 include lt malloc h gt typedef struct ponto float x y Ponto typedef struct contorno Ponto p vetor de pontos int n numero de pontos Contorno Aloca espaco para contorno com N pontos Contorno CriaContorno int n Desaloca espaco do contorno void DestroiContorno Contorno c Aqui voce pode acrescentar os prototipos de outras funcoes que manipulam contorno A endif matriz h ifndef MATRIZ_H define MATRIZ_H 1 include lt malloc h gt typedef struct _matriz elementos da matriz float elem numero de linhas e colunas int nlin ncol Matriz Aloca espaco para a matriz nlin X ncol Matriz CriaMatriz int nlin int ncol Desaloca espaco void DestroiMatriz Matriz m Aqui voce pode acrescentar os prototipos de outras funcoes que manipulam Matriz en
138. recurs o pode ser o seguinte durante a leitura de um livro uma palavra desconhecida vista O leitor anota o n mero da p gina e coloca em uma pilha que at ent o est vazia e pode encontrar outras palavras desconhecidas repetindo o procedimento acrescentando ao topo da pilha Em algum momento do texto o leitor encontra uma frase ou um par grafo onde est a ltima palavra anotada e pelo contexto da frase descobre o seu significado Ent o o leitor volta para a p gina anterior e continua lendo dali Paulatinamente remove se sequencialmente cada anota o que est no topo da pilha Finalmente o leitor volta para a sua leitura j sabendo o significado da s palavra s desconhecida s Isto uma forma de recurs o Para aplicar essa id ia em nossos programas considere como problema o c lculo da soma de n meros inteiros num intervalo m n onde m e n pertencem a Z e m menor igual a n A solu o iterativa m m 1 m 2 n que pode ser implementada com mostra a fun o a seguir int Soma int m int n int soma 0 i for i m i lt n i soma i return soma A solu o recursiva est diretamente ligada ao conceito de indu o matem tica A indu o fraca usa como hip tese que a solu o de um problema de tamanho t pode ser obtida a partida de sua solu o de tamanho t 1 Por exemplo se soubermos o resultado da soma de m at n 1 basta somar
139. rem uma fun o A pode chamar uma fun o B que chama C que chama outra fun o e que ao final chama A Neste caso dizemos que a recurs o indireta Recursao por Divisao e Conquista is aN Ma a 123 45 a i I 4 a EM F 3 o 5 X 4 4 4 N 3 41 5 3 4 5 Figura 2 rvore de recurs o para m 1 e n 5 17 1 Exerc cios Laborat rio 9 17 1 1 Escreva uma fun o recursiva para calcular o fatorial de um n mero inteiro n Note que o fatorial de n pode ser definido de forma recursiva como 79 UNICAMP Universidade Estadual de Campinas Instituto de Computa o EAR f se n 0 atm n j i l nx fat n 1 sen gt 0 17 1 2 Os termos de uma sequencia de Fibonacci exemplo 0 1 1 2 3 5 8 s o definidos de forma recursiva Escreva uma fun o recursiva para retornar o n simo termo desta sequencia Fib n o sel lt n lt fiblm 1 fibln 2 sen gt 2 17 2 Recurs o Ordena o Nesta aula continuaremos a tratar sobre o tema de recurs o ou recursividade e recorrendo a abordagem pr via sobre ordena o 17 2 1 Ordena o por indu o fraca Os algoritmos de ordena o de sequ ncias por sele o inser o e permuta o podem ser implementados usando indu o fraca Na ordena o por inser o ordenamos a sequ ncia at a pen ltima posi o e inserimos o ltimo elemento na posi o correta da sequ ncia ordenada Na ordena o por sele o selecionamos o maior elemento
140. rescenta dados a um arquivo texto a e Abre um arquivo texto para leitura escrita w t Cria um arquivo texto para leitura escrita a t Acrescenta dados ou cria um arquivo texto para leitura escrita Exemplo para abrir um arquivo texto FILE p p fopen teste txt w Frequentemente usado algum teste para informar ao usu rio caso haja erro FILE out if out fopen teste txt w NULL puts nNao foi poss vel abrir o arquivo n exit 1 A macro NULL definida em STDIO H Esse m todo detecta qualquer erro na abertura do arquivo como um arquivo protegido contra escrita ou disco cheio antes de tentar escrever nele Um nulo usado porque no ponteiro do arquivo nunca haver aquele valor Tamb m introduzido por esse fragmento est outra fun o de biblioteca exit A chamada fun ao exit realiza o t rmino imediato do programa Ela tem este prot tipo encontrado em STDLIB H void exit int val O valor de val retornado para o sistema operacional Por conven o um valor de retorno O significa t rmino com sucesso para o DOS Qualquer outro valor indica que o programa terminou por causa de algum problema retornado para a vari vel ERRORLEVEL em arquivos de lote do DOS CUIDADO ao utilizar os modos da fun o fopen para abrir um arquivo pois qualquer arquivo preexistente com o mesmo nome ser apagado e o novo arquivo iniciado Se n o existirem arquivos com o n
141. retorna o c lculo do fatorial de x para o programa principal As vari veis x i e fat declaradas na fun o fatorial s o denominadas vari veis locais desta fun o Elas s existem na mem ria enquanto a fun o fatorial estiver em execu o neste exemplo s o alocadas e desalocadas tr s vezes na mem ria e s podem ser usadas no escopo desta fun o A mesma observa o v lida com rela o s vari veis locais n p e C da fun o principal por m essas permanecem na mem ria durante toda a execu o do programa Um programa pode ter v rias fun es e uma fun o pode conter chamadas a outras fun es do programa Cada fun o deve ser declarada da seguinte forma tipo funcao tipo varl tipo var2 tipo varN prototipo tipo funcao tipo varl tipo var2 tipo varN instrucoes return valor 12 UNICAMP Universidade Estadual de Campinas Instituto de Computa o O tipo do valor retornado pela fun o deve ser compat vel com o tipo da fun o O tipo void usado quando a fun o n o retorna valor Os valores de entrada e sa da de uma fun o s o denominados par metros Esses par metros podem ser de qualquer tipo v lido incluindo registros apontadores cadeias de caracteres vetores entre outros 15 1 Par metros passados por valor e por refer ncia No caso da fun o fatorial o valor de n na chamada fatorial n passado para uma c pia x da vari vel n Qualquer
142. ria Algoritmo como representa o formal e sistem tica de um processo Um problema s ter solu o algor tmica se existir uma M quina de Turing que possa represent lo 1938 Z1 Computador Eletromec nico Konrad Zuse 1940 Z2 Computador Eletromec nico Konrad Zuse Compostos por enorme quantidade de rel s e circuitos Entrada de dados atrav s de filmes de 35 mm perfurados Constru do para ajudar Zuse nos c lculos em engenharia 1943 Z3 Computador Eletromec nico Konrad Zuse 1944 MARK 1 Howard Aiken Caracter sticas Cart es perfurados Manipulava at 23 d gitos Obsoleto por ser baseado em rel s 1945 1 Bug de computador 1946 Computador Eletr nico ENIAC Eletronic Numerical Integrator and Calculator Caracter sticas 30 toneladas 19 000 v lvulas eletr nicas 1 500 rel s 200 kilowatts de consumo 1947 MARK 2 1949 MARK 3 J com sistema de programa armazenado 1950 Z4 Computador Eletromec nico Konrad Zuse 1951 Computador Eletr nico UNIVAC I Universal Automatic Computer Primeiro computador destinado ao uso comercial Recebia instru es de uma fita magn tica 1954 Computador Transistorizado TX O Transistorized eXperimental 1961 Surgimento do circuito integrado em escala comercial 1971 Surgimento do microprocessador Uso comercial Intel 4004 Primeiro computador pessoal 1975 Primeiro microcomputador produzido industrialmente Altair 8800 utilizava processador Intel
143. rmazenam cada um dos seus elementos usando aloca o din mica Uma lista uma sequ ncia din mica de elementos denominados n s Cada n uma estrutura que possui campos e ponteiros conforme a aplica o desenvolvida Podemos por exemplo usar uma lista para armazenar elementos de um conjunto que podem ser inseridos e removidos do conjunto durante a execu o do programa Neste sentido listas s o din micas possuem tamanho vari vel durante a execu o do programa pois seus n s s o alocados dinamicamente em mem ria e interligados por apontadores Se cada n da lista possuir um apontador para o n seguinte a lista dita ligada simples ou encadeada Cada n pode ainda manter um apontador para o n anterior al m do apontador para o pr ximo n Neste caso a lista dita ligada dupla ou duplamente encadeada 19 1 Lista encadeada Numa lista encadeada para cada novo elemento inserido na estrutura alocamos um espa o de mem ria para armazen lo Desta forma o espa o total de mem ria gasto pela estrutura proporcional ao n mero de elementos nela armazenado No entanto n o podemos garantir que os 85 UNICAMP Universidade Estadual de Campinas Instituto de Computa o elementos armazenados na lista ocupar o um espa o de mem ria cont guo portanto n o temos acesso direto aos elementos da lista Para que seja poss vel percorrer todos os elementos da lista devemos explicitamente guardar o encade
144. s a outro devem ser deslocados direita Coment rios devem ser colocados em pontos estrat gicos presentes em todas as partes onde o c digo do programa n o trivial ou onde o papel de alguma vari vel n o seja de compreens o imediata N o comente o bvio Al m desse tipo de coment rios elucidativos no m nimo os seguintes coment rios devem ser inseridos em cada programa produzido por voc Informa es de car ter administrativo o Nome e RA do autor do programa o A identifica o da atividade a que se refere o programa o Data em que foi produzido o programa Descri o informal e sucinta do que o programa faz Esta descri o dever ser feita de maneira sint tica e n o dever transcrever literalmente comando por comando em Portugu s Explica es sobre como operar o programa ressaltando quais s o as entradas como ser o solicitadas e quais s o as sa das esperadas Breve descri o dos algoritmos utilizados na resolu o do problema proposto Aqui cabe novamente a observa o acima N o transcreva para o Portugu s o seu c digo em C Abstraia detalhes de implementa o Redija descri es em n vel mais conceitual Algoritmo e programa s o coisas distintas Um algoritmo serve de base para uma implementa o de um software sendo que a partir de um algoritmo podemos derivar diversas implementa es alternativas As condi es de contorno ou seja qual o conjunto v lido de dados de entrada par
145. sa gt sin sl s2 strcat s 2 strcat s o E printf s n s3 62 UNICAMP Universidade Estadual de Campinas Instituto de Computa o return 0 Observe que s3 n o foi inicializado portanto n o podemos considerar que esteja limpo ou vazio Note que no momento de apresent lo algum lixo pode aparecer na tela Veja tamb m as fun es strcpy e strncpy para realizar c pias de caracteres e strncat para concatena o de n caracteres no final de uma cadeia Um exemplo pr tico a busca de padr es em uma cadeia de caracteres Este problema muito comum quando pretendemos localizar palavras em um texto e padr es em uma segii ncia de caracteres como ocorre em bioinform tica O algoritmo abaixo ilustra uma solu o O nm onde n o comprimento da cadeia e m o comprimento do padr o finclude lt stdio h gt finclude lt string h gt int main char cadeia 101 padrao 11 int i n m fscanf stdin s padrao fscanf stdin s cadeia n strlen cadeia m strlen padrao 1 0 while i lt n m compara m caracteres if strncmp amp cadeia il padrao m 0 printf Padrao encontrado na posicao din i i return 0 13 4 Exerc cio 13 4 1 Quando o padr o n o encontrado a partir da posi o i o algoritmo acima repete a busca a partir da posi o 1 1 Por m quando os k primeiros caracteres s o iguais aos do padr o e a diferen a ocorre no
146. ses M dia Notal Nota2 Nota3 Nota4 4 Correto Assim teremos o seguinte c digo fonte include lt stdio h gt int main float n1 n2 n3 n4 media printf Digite a primeira nota scanf f amp snl printf Digite a segunda nota scanf f amp n2 printf Digite a terceira nota scanf f amp n3 printf Digite a quarta nota scanf S amp n4 media nl n2 n3 n4 4 printf Media 2f n media return 0 6 6 Exerc cios Laborat rio 3 6 6 1 Fa a um programa em linguagem C que solicite ao usu rio um n mero real qualquer e mostre o respectivo valor absoluto 6 6 2 Fa a um programa que pergunte a idade do usu rio e divida o valor por quatro Mostre o quociente e resto da opera o 6 6 3 Dada a f rmula a seguir escreva sua correspondente linearizada para calcular C e F F 32 X5 C F 32 X5_ 9 31 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 7 Operadores Os operadores s o meios pelo qual incrementamos decrementamos comparamos e avaliamos dados dentro do computador Temos tr s tipos de operadores Operadores Aritm ticos Operadores Relacionais Operadores L gicos 7 1 Operadores Aritm ticos Os operadores aritm ticos s o os utilizados para obter resultados num ricos Al m da adi o subtra o multiplica o e divis o temos incre
147. sidade Estadual de Campinas Instituto de Computa o double fat while x gt 1 fat fat x xX return fat void troca int x int y int aux faz a troca dos valores x e y aux x conteudo de x e atribuido a aux x y conteudo de y e atribuido a x y aux conteudo de aux e atribuido a y 15 2 Exerc cio Laborat rio 15 2 1 Reescreva programas das aulas anteriores utilizando fun es 14 UNICAMP Universidade Estadual de Campinas Instituto de Computa o 16 Hierarquia de Fun es Como j foi visto em aulas anteriores podemos chamar fun es dentro da fun o principal main Ap s a execu o de uma fun o o programa sempre retorna para a posi o imediatamente seguinte a sua chamada O exemplo a seguir mostra uma calculadora de vetores utilizando ponteiros e fun es tinclude lt stdio h gt include lt stdlib h gt define N 10 void mostra float a char vetor int i printf n c vetor for i 0 i lt 10 i printf 5 2f a i PEINEE MJIS void calcula float a float b float c int op int i switch op case 1 for i 0 i lt 1l10 i c i a i b i break case 2 for i 0 i lt 10 i c i a i b i break case 3 for i 0 i lt 1l10 i c i a i b i break case 4 for i 0 i lt 10 i if b i 0 c i
148. sidade Estadual de Campinas Instituto de Computa o O sentido de circula o no fluxo dado pelas linhas de comunica o que fornecem a sequ ncia das opera es e a flu ncia das informa es A comunica o deve seguir a dire o natural da leitura ou seja de cima para baixo e da esquerda para direita Tudo o que estiver em sentido inverso deve estar claramente identificado Evite o uso de linhas de comunica o muito longas D prefer ncia ao uso de linhas horizontais e verticais evitando as diagonais e inclinadas pois elas poluem mais o diagrama do que ajudam O fluxograma s pode ser finalizado com um arquivo tempor rio ou definitivo encerramento do fluxo com o s mbolo terminal destrui o do documento final ou conex o liga o ou transfer ncia para outro fluxo O excesso de detalhes pode complicar mais do que explicar portanto esteja atento em encontrar o meio termo 3 4 Vantagens da utiliza o de fluxogramas Podemos apontar as seguintes vantagens Descreve qualquer tipo de rotina desde a mais simples mais complexa Adequado para descrever rela es t picas de empresas de qualquer rea Permite a vis o global do universo que est em estudo Descreve como o sistema funciona em todos os componentes envolvidos Restringe a quantidade de interpreta es devido padroniza o dos s mbolos Auxilia na localiza o de falhas e ou defici ncias descrevendo as repercuss es Auxilia na an
149. sou a ser insuficiente Desde ent o diversas propostas foram feitas IBM Lattice Microsoft Borland para aceita o gradual do padr o 1 3 6 Porque estudar a linguagem C Entre muitas raz es da popularidade desta linguagem destacamos e Linguagem de programa o de alto n vel estruturada e flex vel e Inclui certas caracter sticas de baixo n vel que normalmente est o dispon veis somente em assembler linguagem de m quina e Os programas escritos em C geram depois de compilados programas objetos pequenos e eficientes e uma linguagem amplamente dispon vel desde computadores pessoais a mainframes e independente da m quina permitindo que os programas sejam facilmente transportados de um computador para outro 1 3 7 O surgimento do Linux Em 1983 Richard Matthew Stallman iniciou o movimento que deu origem a Free Software Foundation GNU Project fundada em 1985 www fsf org cujo objetivo foi prover um substituto ao sistema operacional UNIX que era distribu do sob licen a de uso comercial Andrew Stuart Tanenbaum o autor do MINIX mini UNIX um sistema operacional baseado no UNIX vers o 77 1977 com prop sito educacional Segue o padr o POSIX Portable Operating System Interface que garante portabilidade do c digo entre sistemas A id ia foi criar um UNIX com micron cleo para oferecer a funcionalidade m nima no n cleo para torn lo confi vel e eficiente UNICAMP Universidade Estadual de
150. t tipo devolvido gt lt sua fun o gt lista de par metros sequ ncia de comandos 5 1 Tipos b sicos da linguagem C H cinco tipos b sicos de dados em C caractere n mero inteiro n mero real ponto flutuante n mero real ponto flutuante de precis o dupla e sem valor char int float double e void respectivamente Observaremos que os demais tipos de dados s o derivados de algum destes tipos O tamanho e a faixa destes tipos de dados variam de acordo com o tipo de processador e com a implementa o do compilador C Um caractere ocupa geralmente 1 byte enquanto um n mero inteiro tem normalmente 2 bytes mas voc n o pode fazer esta suposi o se quiser que seus programas sejam port veis a uma gama mais ampla de computadores O padr o ANSI estipula apenas a faixa m nima de cada tipo de dado n o o seu tamanho em bytes N meros inteiros geralmente correspondem ao tamanho natural de uma palavra do computador em uso enquanto um n mero real depende de como eles s o implementados Valores do tipo char s o normalmente usados para conter valores definidos pelo conjunto de caracteres ASCII Os valores fora dessa faixa podem ser manipulados diferentemente entre as implementa es de C A faixa dos tipos float e double dada em d gitos de precis o As grandezas destes tipos depende do m todo usado para representar os n meros em ponto flutuante O padr o ANSI especifica que a faixa m nima de um valor em ponto flutuan
151. ta em ordem inversa bastando acessar continuamente o elemento anterior at alcan ar o primeiro elemento da lista cujo anterior NULL inicio Figura 2 arranjo de mem ria para uma lista duplamente encadeada Para exemplificar a implementa o de listas duplamente encadeadas vamos novamente considerar o exemplo simples no qual queremos armazenar valores inteiros na lista O n da lista pode ser representado pela estrutura abaixo e a lista pode ser representada atrav s do ponteiro para o primeiro n struct lista int info struct lista2 ant struct lista2 prox b typedef struct Lista2 Lista2 Com base nas defini es acima exemplificamos a seguir a implementa o de algumas fun es que manipulam listas duplamente encadeadas 19 5 1 Fun o de inser o O c digo a seguir mostra uma poss vel implementa o da fun o que insere novos elementos no in cio da lista Ap s a aloca o do novo elemento a fun o acertar o duplo encadeamento inser o no in cio Lista2 insere Lista2 1 int v Lista2 novo Lista2 malloc sizeof Lista2 novo gt info v novo gt prox l novo gt ant NULL verifica se lista n o est vazia if 1 NULL l gt ant novo return novo Nessa fun o o novo elemento encadeado no in cio da lista Assim ele tem como pr ximo elemento o antigo primeiro elemento da lista e como anterior o valor NULL A seguir a fun o testa s
152. te de 1E 37 a 1E 37 O n mero m nimo de d gitos de precis o exibido na tabela a seguir O tipo void declara explicitamente uma fun o que n o retorna valor algum ou cria ponteiros gen ricos Tais utiliza es ser o abordadas mais adiante 26 UNICAMP Universidade Estadual de Campinas Instituto de Computa o Tipo Tamanho Formato de Leitura Intervalo de valores em bits ou Escrita Char ou signed char 8 Jc 128 a 127 unsigned char 8 c ou Johhu 0a 255 int ou signed int 16 d ou i 32 768 a 32 767 unsigned int 16 Ju 0 a 65 535 short int 16 hd ou hi 32 768 a 32 767 unsigned short int 16 hu 0 a 65 535 Long int 32 ld ou li 2 147 483 648 a 2 147 483 647 unsigned long int 32 lu O a 4 294 967 295 Long long int 64 Glld ou lli 9 223E 15 a 9 223E 15 unsigned long long int 64 iiu ou I64u O a 18 446E 15 Float 32 f 3 4E 38 a 3 4E 38 double 64 lf 1 7E 308 a 1 7E 308 Long double 80 Lf 3 4E 4932 a 3 4E 4932 Em C o nome de vari veis fun es e outros elementos definidos pelo usu rio s o chamados de identificadores Esses identificadores podem variar de um a diversos caracteres O primeiro caractere deve ser uma letra ou um sublinhado e os caracteres subseq entes devem ser letras n meros ou sublinhados Outro ponto relevante que lembrar que a linguagem case sensitive ou seja h diferen a entre vari vel Vari vel e VARI VEL
153. to e Explica o devem ser colocadas todas as explica es que se fa am necess rias em consultas futuras tais como informa es quantitativas frequ ncia e volume tempo total desde a primeira entrada at o final n veis de autoridade quando alguma a o depende de aprova o ou confirma o por escrito informa es ou esclarecimentos adicionais 3 2 Simbologia Existem diversos s mbolos em um diagrama de bloco Os mais utilizados s o S mbolo Fun o i Indica o INICIO ou FIM de um fluxo de dados TERMINAL Indica o processamento de informa es PROCESSAMENTO Exemplo SOMA A B Indica a entrada de dados atrav s do teclado ENTRADA Mostra mensagens ao usu rio informa es solicita es ou resultados J SA DA Indica o sentido do fluxo de dados e conecta CONECTOR s mbolos e ou blocos 17 UNICAMP Universidade Estadual de Campinas Instituto de Computa o S MBOLOS Rela o de alguns componentes utilizados em fluxogramas TERMINAL utilizado na representa o de in cio e fim de um fluxo de um determinado processo ou programa IN CIO FIM SETA indica o sentido do fluxo e conecta os s mbolos ou blocos PROCESSAMENTO Bloco ou s mbolo que indica c lculos algoritmos ENTRADA DE DADOS Apresenta a entrada de dados manual ENTRADA E SA DA DE DADOS representa
154. vari vel de controle 42 UNICAMP Universidade Estadual de Campinas Instituto de Computa o inicializa o while express o l gica bloco de comandos atualiza o Suponha por exemplo um programa que soma n valores reais lidos da entrada padr o e apresenta o resultado na sa da padr o include lt stdio h gt int main int i n variavel de controle i float soma num printf Entre com a quantidade de numeros a serem somados scanf Zd amp n inicializacao i 1 soma 0 0 while i lt n expressao bloco de comandos printf Digite o do numero i scanf f amp num soma soma num L i t ly atualizacao printf O resultado da soma e fin soma return 0 Modifique o programa acima para calcular o produto dos n n meros Observe que nos exemplos envolvendo o comando do while a vari vel de controle inicializada e atualizada no bloco de comandos Neste caso a constru o com do while fica mais elegante do que com o comando while Por outro lado em situa es onde a vari vel de controle n o participa do bloco principal de comandos a constru o fica mais elegante com o comando while Podemos combinar v rios comandos if do while e while aninhados include lt stdio h gt int main int iny float soma num char opt do l printf inDigite s para somar numeros An printf ou qualquer outra letra p
155. visto com vetores NCOL 1 Figura 1 Matriz m N mero de Linhas N mero de Colunas de inteiros define NL 80 define NC 100 int main int m NL NC Matrizes podem ser utilizadas para c lculos envolvendo lgebra linear para armazenar imagens e muitas outras aplica es O programa abaixo por exemplo soma duas matrizes e apresenta a matriz resultante na tela include lt stdio h gt define N 20 int main int m1 N N m2 N N m3 N N int 1 c nlin ncol printf Entre com os numeros de linhas e colunas das matrizes 55 UNICAMP Universidade Estadual de Campinas Instituto de Computa o scanf amp nl ad in amp ncol Leitura da matriz 1 pm printf E for 1 0 ntre com I lt nlin for c sca Leitura da matriz 2 E printf E for 1 0 0 c lt ncol nf Ed ntre com I lt nlin for c sca 0 c lt ncol nf miar 1 1 os el 7 SOPA ml 1 os el CHA amp m2 1 Soma as matrizes for 1 0 I lt nlin for c 0 c lt ncol m3 1 c mi sis c 1 c m2 1 c Mostra o resultado printf Resultado Nn for 1 0 I lt nlin 1 for c 0 c lt ncol c printf sS2d printf return 0 ia m3 1 cl lementos da matriz 1 n considerando nlin e ncol lt 20 Outro exemplo a mult
156. vo principal deste curso exercitar estas tarefas definindo v rios conceitos de computa o e usando a linguagem C como ferramenta de programa o Defini o do solu o do problema transcri o do algoritmd compila o do execu o do na forma de algoritmo na forma de programa programa programa e Ser Humano omputador problema a ser resolvido Figura 2 Etapas da resolu o de problemas usando um computador 1 7 Utiliza o da mem ria para programa o Essencialmente programar um computador para executar uma dada tarefa estabelecer regras de manipula o de informa es na sua mem ria principal atrav s de uma seq ncia de comandos A mem ria principal funciona como um escaninho cuja configura o varia de programa para programa Cada programa estabelece o n mero de espa os no escaninho onde cada espa o possui nome endere o e capacidade de armazenamento diferentes Nesses espa os poss vel armazenar n meros inteiros n meros reais e caracteres os quais requerem n mero de bytes diferentes O conte do deste espa o pode ser lido ou modificado utilizando seu nome ou endere o Suponha por exemplo que gostar amos que o computador calculasse a soma de dois n meros inteiros Assim como o ser humano os n meros s o armazenados na mem ria s o somados e depois o resultado armazenado na mem ria Para armazenar os n meros na mem ria precisamos estabelecer nome endere o e capacidade de armaze
157. www bloodshed net devcpp html e http www codeblocks org Na primeira aula em laborat rio utilizaremos Windows e Dev C onde ser o apresentadas as funcionalidades desta interface para desenvolvimento 1 8 Exerc cios Laborat rio 1 Apresenta o do laborat rio Cria o de conta usu rio senha para os alunos Apresenta o do ambiente de trabalhos Demonstra o de exemplos Demonstra o de poss veis erros e como verificar o c digo Exemplol Bem vindos alunos da turma MC 102 Primeiro Programa finclude lt stdio h gt int main printf AninBem vindos alunos da turma MC102 n n return O UNICAMP Universidade Estadual de Campinas Instituto de Computa o 2 L gica de Programa o 2 1 Introdu o L gica de Programa o 2 1 1 L gica A l gica de programa o necess ria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas ela permite definir a seq ncia l gica para o desenvolvimento Ent o o que l gica de programa o E a t cnica de encadear pensamentos para atingir determinado objetivo L gica a arte de pensar corretamente A l gica estuda a corre o do racioc nio Ex S o Paulo um estado do Brasil Campinas uma cidade do estado de S o Paulo Portanto Campinas est localizada no Brasil 2 1 2 Segii ncia L gica Estes pensamentos podem ser descritos como uma seqii ncia de instru es que devem ser
158. xecutado repetidamente at que determinada condi o seja satisfeita 9 1 Comando DO WHILE O comando do while uma instru o de repeti o onde a condi o de interrup o testada ap s executar o comando do bloco de comandos while express o l gica O bloco de comandos repetido at que a express o seja falsa Suponha por exemplo um programa para dizer se um n mero inteiro lido da entrada padr o par ou mpar Desejamos que o programa execute at digitarmos um n mero negativo include lt stdio h gt int main int n do printf Digite um numero inteiro scanf d amp n if n 2 0 printf Numero par n else printf Numero imparin while n gt 0 return 0 Um exemplo pr tico interessante o algoritmo de Euclides para calcular o M ximo Divisor Comum MDC de dois n meros inteiros positivos l Leiamen Fa ax mey n Atribua a r o resto da divis o de x por y Fa ax E yey r Volte para a linha 3 enquanto r for diferente de zero Diga que x o MDC dem en N ir oO S Codifique este algoritmo em C 9 2 Comando WHILE O comando while uma instru o de repeti o onde a express o l gica testada antes de executar o comando Sua estrutura b sica envolve quatro etapas 1 inicializa o de uma vari vel de controle 2 teste de interrup o envolvendo a vari vel de controle 3 execu o do bloco de comandos 4 atualiza o da

Download Pdf Manuals

image

Related Search

Related Contents

Operating Instructions  1 Indicaciones de seguridad 2 Estructura del aparato  Oregon Scientific STARCK PS-M01 User's Manual  POS Arezzo Multiservizi 01_01_2014  Graco 312878J User's Manual  Light Up Your Life  Dans le cadre de nos activités, plusieurs unités du centre  FOR MODEL OPAL-300/400 RUBY-300/400  KEPServer Users Manual  EXBP-MP3 - Korg Professional Arranger  

Copyright © All rights reserved.
Failed to retrieve file