Introdução a Computação

• O que é um computador?
“Um computador é uma coleção de componentes que realizam operações lógicas e aritméticas sobre um grande volume de dados.” (F. K. Miyazawa)

Introdução a Computação
Um computador é composto por: • Unidades de entrada de dados: Ex.: teclado, mouse, câmera de vídeo, etc… • Unidades de saída de dados Ex.: monitor, impressora, etc… • Unidades de armazenamento Ex.: memória RAM, memória ROM, discos rígidos, cache. etc... • Unidade Central de Processamento – CPU • Unidade Lógica Aritmética – ULA

Introdução a Computação

Introdução a Computação
Termos técnicos: • Hardware: Componentes mecânicos e eletroeletrônicos (Parte dura do computador). • Software: Seqüência de instrucões e comandos que fazem o computador realizar determinada tarefa (Programas de computador). • Sistema Operacional: Coleção de programas que gerencia e aloca recursos de hardware e software (Linux, Unix, Windows).

Introdução a Computação
• Linguagem de Máquina: Conjunto de instruções que podem ser interpretados e executados diretamente pela CPU. • Linguagem de alto nível: Linguagem que independe do conjunto de instrucões da linguagem de máquina (Pascal, C, Algol, BASIC). • Compilador: Tradutor de programas escritos em uma linguagem de programação para programas em linguagem de máquina (GCC).

Introdução a Computação

um Bit pode assumir os valores 0 ou 1. • Dados são armazenados na base binária não na decimal. • Um Byte é um conjunto de oito Bits.Introdução a Computação Bits e Bytes: • A menor unidade de informação de um computador é o Bit. 0 = 00000000 1 = 00000001 10 = 00001010 255 = 11111111 .

. Cada caixa comporta pelo menos 1000 moedas e os valores solicitados serão todos maiores que zero. quando solicitado. você possa retornar um número qualquer de moedas sem retirá-las das caixas.Introdução a Computação Desafio: Você possui dez caixas vazias e deve distribuir nessas caixas 1000 moedas de tal forma que.

Introdução a Computação Solução: Usando a base binária… Caixas com: 1 moeda 2 moedas 4 moedas 8 moedas 16 moedas 32 moedas 64 moedas 128 moedas 256 moedas 488 moedas .

.Introdução a Computação Existem 10 tipos de pessoas… aquelas que entendem binário… e as que não entendem.

você. sabendo que caso o lobo fique sozinho com o coelho o lobo o come e o mesmo acontece quando o coelho fica sozinho com o repolho. Como fazer para atravessar todos eles em segurança para a outra margem do rio? . Você possui uma canoa que te permite levar apenas um deles de cada vez. um lobo um coelho e um repolho.Introdução a Computação Desafio: Em um lado de um rio se encontram.

O objetivo é levar os 3 discos do pino A para o pino C. A.Introdução a Computação Desafio: Suponha que você possui 3 pinos. . usando o pino B como auxiliar e obedecendo as seguintes restrições: •Pode-se mover apenas 1 pino de cada vez •Não se pode colocar um pino maior sobre um menor. B e C e que no pino A estão dispostos 3 discos de tamanhos diferentes em ordem crescente de cima para baixo (menor em cima).

com/nessunoforever/flash/hanoi/index.htm?p .Introdução a Computação http://freeweb.supereva.

” . • São muito comuns. manuais • As soluções para os problemas anteriores são algoritmos.Introdução a Computação Algoritmos: • Um algoritmo é uma seqüência de passos com o objetivo de executar uma tarefa. • Computacionalmente: “Um procedimento computacional que recebe valores de entrada e produz valores de saída. receitas.

12.Introdução a Computação Exemplo: • Entrada: Uma seqüência aleatória de números. 23. 23) o seu algoritmo deve produzir como saída: (8. • Saída: A mesma seqüência de números ordenada. 12. Se a entrada é : (8. 49. 49) • Algoritmo Correto: Sempre termina e para qualquer instância de entrada produz uma saída correta .

y) = mdc(y. • Passo 1: Faça x = m e y = n • Passo 2: Calcule o resto de x por y. x mod y) mdc(x. • Saída: O Máximo Divisor Comum de m e n. 0) = x . mdc(x. senão retorne x como resposta. isto é r = x mod y • Passo 3: Faça x = y e y = r • Passo 4: Se r != 0 (r diferente de zero) volte para o passo 2.Introdução a Computação Algoritmo de Euclides (Cálculo do MDC): • Entrada: 2 valores inteiros positivos m e n (m > n).

Introdução a Computação Computacionalmente: x recebe m y recebe n Repita r recebe x mod y x recebe y y recebe r Até que r == 0 Imprime x .

. x). x = y. y = r. do { r = x % y. printf(“%d”. y = n.Introdução a Computação Na linguagem C: x = m. }while( r != 0 ).

las.br/pages/desafios.asp • Torre de Hanoi: http://freeweb.ic.Introdução a Computação Para ver depois: • JL Hennessy e DA Patterson.htm?p • Página da disciplina: http://www.html . • Mais desafios: http://www2.fundao.pro.com/nessunoforever/flash/hanoi/index.br/~chenca/mc102/mc102.supereva.unicamp. “Arquitetura de Computadores – Uma Abordagem Quantitativa” Ed Campus.

Linguagem C Características da Linguagem C: • linguagem estruturada em bloco simples. é composta basicamente por funções e variáveis. MDC != Mdc != mdc main != Main != maiN . letras maiúsculas e minúsculas são tratadas como caracteres separados. • C é sensível ao caso. ou seja.

return 0. }while( r != 0 ). y. int n = 42.Cálculo do MDC */ #include<stdio. x = y. r. n. m.Primeiro Programa em C .Primeiro Programa em C /*MC102 . int x. y = r. x = m. printf("O MDC entre %d e %d eh: %d\n".h> int main() { int m = 76. } . y = n. do { r = x % y. x).

Cálculo do MDC */ • • • • • • • • São ignorados pelo compilador. Podem ter mais de uma linha. Terminam com */ . Deverão ser usados nos laboratórios.Primeiro Programa em C . /*MC102 – Lab 0x Nome: Ra: */ . Ajudam no entendimento do código. Funcionam como lembretes. Em C comentários começam com /* . Não se pode criar um comentário dentro de outro.Estruturas de um Programa Comentários: /*MC102 .

• Permite o reutilização de código • Não é necessário saber como funciona • Basta saber o nome e onde está implementado.Estruturas de um Programa Inclusão de Arquivos: #include<stdio. funções e variáveis declarados no arquivo especificado (no caso stdio.h> /*Funções de Gerência de Memória*/ #include<string.h> /*Funções Matemáticas */ #include<stdlib. • Outras inclusões muito comuns em C: #include<math.h> /*Funções de Manipulação de Strings */ .h> • Avisam ao compilador que neste programa serão usados os procedimentos.h).

• Todo programa em C deve ter uma. . • O programa termina quando a última linha da função main é executada.Estruturas de um Programa Função main: int main() {…} • Função principal do programa. • O programa começa a ser executado na primeira linha da main.

int x. . y.Estruturas de um Programa Declarações: int m = 76. • Informam ao compilador o nome e o tipo da variável. y. • Terminam sempre com ‘. • Desse modo é possível saber quanto de memória será utilizada. É a mesma coisa que int x. • Deve ser feita sempre no início de cada bloco ({).’ int x. int y.

’ depois de } . Sempre terminam com ‘.Estruturas de um Programa Comandos: y = n.’ Podemos ter mais de um comando por linha.’ Como cada comando termina com ‘. • • • • • São as ações do programa.’ não é preciso colocar ‘. r = x % y. Sempre terminam com ‘.

• Não muda de linha até que a linha acabe ou que encontre um \n.Entrada e Saída printf: printf("O MDC entre %d e %d eh: %d\n". . • Utilizado para imprimir na tela. x).h • Composto por – String de Formato – Lista de Argumentos • Imprime a partir do último caracter impresso. m. n. • Comando da biblioteca stdio.

• Como imprimir o produto de 65487 por 236597 ? printf(“??????????????").Entrada e Saída String de Formato (printf): • Como imprimir o produto de 3 por 4 ? printf(“12"). .

• Variáveis são indicadas pelo caracter ‘%’ • Cada variável na string de formato é preenchida por uma variável na lista de argumentos. x). n. printf("O MDC entre %d e %d eh: %d\n".Entrada e Saída String de Formato (printf): • Cadeia de caracteres que informam como será a saída. • Pode conter variáveis. . m.

. %f: Para números de ponto-flutuante (float). %s: Para cadeias de caracteres (“…”). %c: Para caracteres (char).Entrada e Saída Algumas possíveis variáveis: • • • • %d: Para números inteiros (int).

• Separados por ‘. printf("O Produto entre %d e %d eh: %d\n".’ . • Podem ser variáveis ou constantes . p).Entrada e Saída Lista de Argumentos (printf): • Depende da String de Formato. 236597 . . int p = 65487 * 236597 . 65487.

Entrada e Saída
Caracteres especiais: • Qual o resultado do comando?
printf("Olá Mundo”);

• Saída: Olá Mundo • Qual o resultado do comando?
printf("Olá ”); printf("Mundo”);

Entrada e Saída
Caracteres especiais: • • • • Utilizados para indicar quebra de linha. Indicar tabulação. Caracteres reservados. Ex.: \n - Quebra de linha \t - Tabulação \” - Caracter “ \% - Caracter % \a - Sinal de alerta (beep)

Entrada e Saída
O que será impresso?
printf(“\n\t****\n\t*\n\t*\n\t*\n\t*\n\t****\n”);

Entrada e Saída
Onde está o erro?
printf(“\n %d dividido por %d eh %d e o resto eh %d \n”, x, y, resultado)

Entrada e Saída
scanf:
printf(“Entre com o seu ra: "); scanf(“%d", &x);

• • • • •

Utilizado para receber informações do teclado. Recebe o valor digitado pelo usuário. Ativada após a tecla “enter” ser pressionada. Estrutura similar ao printf. Composto por
– String de Formato – Lista de Argumentos

Entrada e Saída
String de Formato (scanf): • Cadeia de caracteres que informam como será a entrada. • Sempre contém variáveis. • Variáveis são indicadas pelo caracter ‘%’ • Mesmo tipos de variáveis do printf.

&media). printf(“Entre com o RA do aluno e sua media: "). int ra.’ . float media. . As variáveis devem ser precedidas por ‘&’. &ra. Sempre variáveis.Entrada e Saída Lista de Argumentos (scanf): • • • • Depende da String de Formato. Separados por ‘. scanf(“%d %f“.

Entrada e Saída Exercício: Alterar o programa MDC (lab01) para que o mesmo. ao invés de calcular o MDC entre dois valores fixos. calcular o MDC e retornar a resposta ao usuário. O programa deve ler esses valores. . solicite ao usuário que informe entre quais valores ele deseja calcular o MDC.

Cálculo do MDC */ #include<stdio. } . m. n. printf("O MDC entre %d e %d eh: %d\n". int x.h> int main() { int m = 76. y. x).Entrada e Saída /*MC102 . }while( r != 0 ). y = r. x = m. int n = 42. do { r = x % y.Primeiro Programa em C . return 0. y = n. x = y. r.

n.Entrada e Saída /*MC102 .Primeiro Programa em C . r. return 0. } . y = r. &n). int x. y. x). y = n.h> int main() { int m. x = y. int n. do { r = x % y. scanf("%d %d". m. x = m. &m. printf("O MDC entre %d e %d eh: %d\n". printf(“Entre com os valores desejados: "). }while( r != 0 ).Cálculo do MDC */ #include<stdio.

0) + 32.s. .0 Repita o mesmo exercício mas convertendo de Farenheit para Celsius.Entrada e Saída Exercício: Escreva um programa em linguagem C que lê uma temperatura em Celsius e imprime o valor desta temperatura em Farenheit.: F = C * (9. P.0 / 5.

Podem ter mais de uma linha. MDC != Mdc != mdc main != Main != maiN Primeiro Programa em C Estruturas de um Programa Comentários: / * sgnirtS ed oã çalupin aM ed seõçn uF * / > h.m .C me amargorP oriemirP .n = y ."n\d% :he d% e d% ertne CDM O"(ftnirp .y = x .) 0 =! r (elihw} . é composta basicamente por funções e variáveis.Linguagem C Características da Linguagem C: • linguagem estruturada em bloco simples. • C é sensível ao caso.y % x = r { od .201CM*/ Estruturas de um Programa Inclusão de Arquivos: • Avisam ao compilador que neste programa serão usados os procedimentos.x tni .oidts<edulcni# /* CDM od olucláC . • Permite o reutilização de código • Não é necessário saber como funciona • Basta saber o nome e onde está implementado. Não se pode criar um comentário dentro de outro.bildts < e d u l c n i # / * sacitá meta M seõçn uF */ > h. } .h). Funcionam como lembretes. • Outras inclusões muito comuns em C: >h.oidts<edulcni# /* CDM od olucláC .C me amargorP oriemirP . funções e variáveis declarados no arquivo especificado (no caso stdio. letras maiúsculas e minúsculas são tratadas como caracteres separados.)x .n . Deverão ser usados nos laboratórios.y . Em C comentários começam com .24 = n tni .201CM*/ 1 . ou seja.r = y .r . Terminam com .gnirts < e d u l c n i # a i r ó m e M e d a i c n ê r e G e d s e õ ç n u F * / > h. Ajudam no entendimento do código.htam < edulcni # /* */ /* :aR :emoN x0 baL – 201CM*/ /* • • • • • • • • São ignorados pelo compilador.m = x .67 = m tni { )(niam tni >h.0 nruter .

• Terminam sempre com ‘. Sempre terminam com ‘.y . Sempre terminam com ‘.n = y 2 .67 = m tni .h • Composto por – String de Formato – Lista de Argumentos • Imprime a partir do último caracter impresso.)x . • O programa termina quando a última linha da função main é executada.y .’ É a mesma coisa que Estruturas de um Programa Comandos: printf: • • • • • São as ações do programa.n . • Desse modo é possível saber quanto de memória será utilizada.x tni . • Informam ao compilador o nome e o tipo da variável. • O programa começa a ser executado na primeira linha da main. • Comando da biblioteca stdio. • Todo programa em C deve ter uma.’ Como cada comando termina com ‘.y % x = r . • Deve ser feita sempre no início de cada bloco ({). .’ Podemos ter mais de um comando por linha.x tni .’ depois de } • Utilizado para imprimir na tela.x tni Entrada e Saída }…{ )(niam tni .’ não é preciso colocar ‘. • Não muda de linha até que a linha acabe ou que encontre um \n.y tni .Estruturas de um Programa Função main: Declarações: Estruturas de um Programa • Função principal do programa."n\d% :he d% e d% ertne CDM O"(ftnirp .m .

Lista de Argumentos (printf): • Depende da String de Formato. 7 8 4 5 6 . • Podem ser variáveis ou constantes . • Pode conter variáveis.)x . 795632 * 78456 = p tni .)"??????????????“(ftnirp . %s: Para cadeias de caracteres (“…”). " n \ d % : h e d % e d % e r t n e o t u d o r P O "(ftnirp . 7 9 5 6 3 2 .’ . %c: Para caracteres (char).)"21“(ftnirp Entrada e Saída 3 .Entrada e Saída String de Formato (printf): • Como imprimir o produto de 3 por 4 ? String de Formato (printf): Entrada e Saída • Como imprimir o produto de 65487 por 236597 ? • Cadeia de caracteres que informam como será a saída. . Entrada e Saída Algumas possíveis variáveis: • • • • %d: Para números inteiros (int).) p .n . • Variáveis são indicadas pelo caracter ‘%’ • Cada variável na string de formato é preenchida por uma variável na lista de argumentos."n\d% :he d% e d% ertne CDM O"(ftnirp .m . • Separados por ‘. %f: Para números de ponto-flutuante (float).

x .: \n .”n\ d% he otser o e d% he d% rop odidivid d% n\“(ftnirp .Caracter % \a .) ” o d n u M "(ftnirp ” álO"(ftnirp Entrada e Saída Onde está o erro? Entrada e Saída 4 .Entrada e Saída Caracteres especiais: • Qual o resultado do comando? .Quebra de linha \t . Ex.Tabulação \” .)”n\****t\n\*t\n\*t\n\*t\n\*t\n\****t\n\“(ftnirp ”odnu M álO"(ftnirp .) O que será impresso? )odatluser .Sinal de alerta (beep) • Saída: Olá Mundo • Qual o resultado do comando? .Caracter “ \% .) Entrada e Saída Caracteres especiais: • • • • Utilizados para indicar quebra de linha. Caracteres reservados. Indicar tabulação.y .

Estrutura similar ao printf. Ativada após a tecla “enter” ser pressionada."d%“(fnacs . Recebe o valor digitado pelo usuário.)" :ar ues o moc ertnE“(ftnirp Entrada e Saída . ar t n i . As variáveis devem ser precedidas por ‘&’. solicite ao usuário que informe entre quais valores ele deseja calcular o MDC. “ f % d % “( f n a c s . O programa deve ler esses valores. Composto por – String de Formato – Lista de Argumentos Lista de Argumentos (scanf): • • • • Depende da String de Formato.)" : a i d e m a u s e o n u l a o d A R o m o c e r t n E “(ftnirp ai d e m t a o l f .)x& .Entrada e Saída scanf: String de Formato (scanf): Entrada e Saída • • • • • Utilizado para receber informações do teclado. . ) a i d e m & .’ . • Cadeia de caracteres que informam como será a entrada. • Variáveis são indicadas pelo caracter ‘%’ • Mesmo tipos de variáveis do printf. calcular o MDC e retornar a resposta ao usuário. ao invés de calcular o MDC entre dois valores fixos. Separados por ‘.ar & . 5 . Sempre variáveis. • Sempre contém variáveis. Entrada e Saída Exercício: Alterar o programa MDC (lab01) para que o mesmo.

y % x = r { od .y % x = r { od .n tni ."d% d%"(fnacs .s.x tni ."n\d% :he d% e d% ertne CDM O"(ftnirp .0) + 32.} .)n& .m& .) 0 =! r (elihw} .y ."n\d% :he d% e d% ertne CDM O"(ftnirp .201CM*/ Entrada e Saída Repita o mesmo exercício mas convertendo de Farenheit para Celsius.) 0 =! r (elihw} .)" :sodajesed serolav so moc ertnE“(ftnirp .x tni .C me amargorP oriemirP .oidts<edulcni# /* CDM od olucláC .24 = n tni .y .n = y .m .0 nruter .r . P.0 Escreva um programa em linguagem C que lê uma temperatura em Celsius e imprime o valor desta temperatura em Farenheit.m .m = x .r = y .y = x .67 = m tni { )(niam tni >h.n .: F = C * (9.m = x .y = x .n .oidts<edulcni# /* CDM od olucláC .r = y .)x .201CM*/ } .r .0 nruter .C me amargorP oriemirP .)x . Exercício: Entrada e Saída Entrada e Saída 6 .0 / 5.n = y .m tni { )(niam tni >h.

.: Os Tipos Básicos de C são: Tipos Tipos : Tabela ASCII rahc • • • • Representam os caracteres. • Os valores são armazenados em binário. = = = = 2c 1c = taolf rahc rahc rahc tni Tipos American Standard Code for Information Interchange 1 . ’@‘ ’a‘ . Podem armazenar apenas um único valor a cada instante.3 f ’a‘ c 67 i . 6356295141.Variáveis Variáveis em C: • • • • São objetos que não possuem valor fixo. • Formato para impressão é %c Ex. elbuod taolf rahc tni • • • • . Cada valor está associado a um símbolo na tabela ASCII. Representam valores entre -127 e 127. Cada variável está associada a um tipo.: . Representam uma região da memória (gaveta). Possuem tamanho de 1 byte (8 bits). Ex.

os 11 seguintes e expoente e os 52 restantes a mantissa. O primeiro bit indica o sinal. • nome_tipo: int. float.b .a . • Podem representar valores negativos entre -2E+308 e -2E-308. • Possuem tamanho de 4 bytes (32 bits). Ex. double… • lista_identificadorers: conjunto de identificadores separados por ‘. char. • O primeiro bit indica o sinal. • Podem representar valores positivos entre: 2E-38 e 2E+38. • O primeiro bit indica o sinal.’. • Podem representar valores positivos entre 2E-308 e 2E+308. • Formato para impressão é %f Tipos : Declaração de Variáveis em C: Variáveis • Também representam os números de pontoflutuante (com vírgula). c .: 2 . tni rahc i elbuod tni • • • • Representam os números inteiros. • Formato para impressão é %lf nome_tipo + lista_identificadorers + . Possuem tamanho de 4 bytes (32 bits). Podem representar valores entre: -2147483648 e + 2147483647 • Formato para impressão é %d • Representam os números de ponto-flutuante (com vírgula). • Podem representar valores negativos entre: -2E+38 e -2E-38. • Possuem tamanho de 8 bytes (64 bits).Tipos taolf Tipos : : . os 7 seguintes e expoente e os 24 restantes a mantissa.

: . • Muda o intervalo de representação. 96523 = i tni dengisnu dengisnu Atribuição de Variáveis: Modificador : citats foezis dengis elihw elitalov diov dengisnu noinu f e depyt hctiws tcurts fi otog rof taolf nretxe m u n e esle elbuod od tlua fed eunitnoc tsnoc rahc esac k aerb otua trohs nruter retsiger gnol tni tni x1 asac_emon 1x 0=i 0=i . Começam sempre com letra.: . • Não podem coincidir com as palavras reservadas da linguagem. Certo Errado Palavras reservadas do C: Variáveis • Não podem ser usadas como identificadores • São sempre grafadas em letras minúsculas. • Aparece antes do nome do tipo. Ex. O caracter ‘_’ (underline) também é considerado letra. São compostos sempre por letras e dígitos. Ex.Variáveis Identificadores: • • • • São os rótulos (nomes) das variáveis. Variáveis • Pode ser feito na declaração ou através de um comando. tni Variáveis 3 . • O primeiro bit passa a fazer parte da representação. • Diz ao compilador que os valores daquele tipo são todos positivos.

4. 2. Seu nome – string (entre “”) Seu sexo (M ou F ou I) – tipo char Sua idade – tipo int Seu peso – tipo float Variáveis 4 .Variáveis 0 até 255 0 até (2E+32 . 2.1) Exercício: rahc dengisnu Variáveis Outros Modificadores: gnol Exercício: Escreva um programa em Linguagem C que requisite os seguintes dados para o usuário: 1. 3. Nome – string (entre “”) Sexo (M ou F ou I) – tipo Idade – tipo int Peso – tipo taolf rahc tni dengisnu elitalov citats tsnoc • • • • • • Escreva um programa em Linguagem C que imprima na tela os seguintes dados: 1. 4. 3.

São substituídas antes do código ser compilado.oiar * 41. ) ” : o i a r o m o c e r t n E “( ftnirp .oiar taolf { )(niam tni >h.’ Não utilizam o operador ‘=‘ São precedidas por “# define“ A regra para criação dos nomes é a mesma para criação de nomes de variáveis.ir ep . • Variáveis ocupam espaço na memória. % = o r t e m i r e P “ ( f t n i r p ."n\ f6.3 iP enifed # . ”f %“ (f n a c s . " n \ f 6 .irep .i r e p .% = aerA n\ f6.% = ortemireP“(ftnirp .3 = aera .3 * 2 = irep . ) oiar & .oiar t a o l f { )( niam tni 395141.Constantes Exemplo: Constantes Problema: E se notássemos que Pi precisa ter pelo menos 4 casas decimais? Imagine que seu programa tem mais de 1000 linhas e Pi aparece 326 vezes no código.irep .oiar * oiar * 41.oia r * i P * 2 = ir ep . a er a . )oiar& .)”: oiar o moc ertnE“(ftnirp > h.0 nruter } Constantes Constantes Simbólicas: # define + nome + valor • • • • • • Não possuem tipo.)aera .”f%“(fnacs . ) a er a .aera .0 nruter Constantes . 1 . % = a e r A n \ f 6 .oidts < e d u l c n i # .oiar * oiar * i P = ae ra . Não terminam com ‘. • O valor de Pi não muda durante a execução do programa Como resolver ??? Solução: .oidts<edulcni# } .

Constantes Exemplos: Operadores Aritméticos: Operadores Operador Finalidade Soma Subtração Multiplicação Divisão Resto Operadores Aritméticos: • Operador . (char pode?) • Operador 2 .orietni rolav mu anroter sorietni sodnarepo moc odazilitu odnauq / .3 IP Operadores enifed # + * / % Operadores Operadores Aritméticos: • Devem ser utilizados com valores numéricos apenas. Assim: Para resolvermos “problemas” de precedência utilizamos parênteses.amargorp od oãçucexe a epmorretni orez rop oãsiviD • .: )A * 2( / )atleD + B-( = ziar ”otaneR“ EMON enifed # ’m‘ ONILUCSAM enifed # 395141.sorietni sodnarepo moc odazilitu res edop ós % 2 % )5 * 3( == 2 % 5 * 3 )7 * 5( + 3 == 7 * 5 + 3 -+ > %/* • • • • • Precedência: Assim: Associatividade da esquerda para direita. Ex.

odnarotaf Operadores Finalidade E lógico (and) OU lógico (or) 3 .: => =< == || =! > < 2 .2A 7 4 3 01 8 5 3 – =! > + * B=A 1 = B .ocitémtira rodarepo reuqlauq euq ronem aicnêdecerp meussoP • 1=2 B=B+A …sodal siod sod )B – A( atroc )B – A(B = )B + A()B – A( B .. Operadores Lógicos: Operador && Ex.1 = A BA = 2A Operador Finalidade Maior que Menor que Maior ou igual que Menor ou igual que Igual Diferente …sodal siod sod A rop acilpitlum …sodal siod sod 2B iartbus .. • Associatividade da esquerda para direita.BA = 2B . • Todos possuem a mesma precedência.Divisão por Zero Operadores Relacionais: Operadores Operadores Operadores Relacionais: • Retornam 1 quando a expressão é verdadeira e zero se for falsa.

lanoicaler rodarepo reuqlauq euq ronem aicnêdecerp meussoP • )7 =! 4 + 3(! || 01 – 8 > 5 * 3 . e troca zero por 1. Ex: é o mesmo que é o mesmo que : Troca tudo que for diferente de zero por 0. Ex. Ex. Operadores Unários: Operadores Operador - Finalidade Indica sinal negativo Indica sinal positivo Decremento Incremento Negação Ex.++ .-- * * Operadores j i -- - ++ + ! • • • 4 .Operadores Operadores Lógicos: • Retornam 1 quando a expressão é verdadeira e zero se for falsa.j = j . • Precedência: • Associatividade da esquerda para direita.1 .1 + i = i 7 7 =! =! 4 3 4 3 + + B == 3 && - || 01 8 5 3 01 8 5 3 || + – – > > > && . • Associatividade da esquerda para direita. devem ser usado sempre com variáveis.: ou : Incrementam ou decrementam de 1 o valor da variável.: Operadores Operadores Unários: ou : Indicam o sinal da variável ou constante.: Operadores Unários: • Possuem precedência maior que qualquer outro operador. ++ -! + .

A = B . .Operadores Conversão de Tipos: • Numa expressão todos os operandos são convertidos para o mesmo tipo.3 = A taolf tni Operadores Exercício: Operadores Faça um programa que calcula a média de provas da disciplina MC102 (a fórmula está na ementa do curso). Exercício: Repita o exercício anterior usando apenas duas variáveis.0.2 / 0.2 / 5 = A . Ex. • Sempre convertidos para o tipo maior. 5 . utilize duas variáveis apenas.4 = A .: Exercício: Operadores Faça um programa que solicite ao usuário a nota de suas 3 provas e imprima a média aritmética delas. • Durante uma atribuição com tipos diferentes podem aparecer aviso do compilador (WARNINGS).395141.

scanf("%f".Aula Passada #include<stdio. media = nota * PESO1.3 #define PESO2 0. media). media += nota * PESO3. &nota). &nota).3 #define PESO3 0. printf("\nEntre com a segunda nota: ").h> #define PESO1 0. media. media += nota * PESO2. return 0. printf("\nEntre com a primeira nota: "). &nota). printf("\nEntre com a terceira nota: "). printf("\nA media das notas eh: %f\n ". scanf("%f". } . scanf("%f".4 int main() { float nota.

Comandos Condicionais Problema: Escreva um programa que lê dois números inteiros (a e b) e imprime como saída o maior deles. Só uma deve ser executada. Como resolver ??? . • • Temos duas saídas possíveis.

composta por expressões aritméticas. e/ou operadores relacionais. ou seja é verdadeira != 0. e/ou operadores lógicos é satisfeita.Comandos Condicionais Definição: Uma estrutura condicional permite a escolha de um grupo de comandos ou instruções a ser executado quando determinada condição. .

} .Comandos Condicionais Em linguagem C: if( expressão ) { comando1. comando2. … comandoN.

scanf("%d%d". &a. printf("\nEntre com os numeros: "). a). } if( b >= a ) { printf("\nO maior numero eh: %d\n ". if( a > b ) { printf("\nO maior numero eh: %d\n ".h> int main() { int a. b). } . b. &b). } return 0.Comandos Condicionais Resposta: #include<stdio.

ou seja.Comandos Condicionais Comando if: • O bloco de comandos é executado apenas se a expressão é verdadeira. Quando a expressão é falsa. a execução do programa passa para o comando seguinte ao bloco de comandos. tem valor diferente de zero. • • . Quando o bloco de comandos possui apenas um comando não é necessário o uso de { }.

} if( b >= a ) { printf("\nO maior numeor eh: %d\n ". b). sendo que uma delas é desnecessária. a). como evitá-la? if( a > b ) { printf("\nO maior numero eh: %d\n ". } .Comandos Condicionais Problema: O programa anterior realiza duas comparações.

return 0. &a. scanf("%d%d".h> int main() { int a. printf("\nEntre com os numeros: "). else printf("\nO maior numeor eh: %d\n ". b). } . a). if( a > b ) printf("\nO maior numero eh: %d\n ".Comandos Condicionais Resposta: #include<stdio. b. &b).

. O bloco de comandos é executado apenas se a expressão é falsa.Comandos Condicionais Comando else: • • • • Deve sempre estar precedido de um if. Quando o bloco de comandos possui apenas um comando não é necessário o uso de { }. tem valor igual a zero. mas todo else tem um if ). O else é opcional ( if pode ter ou não um else. ou seja.

considere que todos os alunos entregaram todos os exercícios de laboratório. Imprima como saída a media final do aluno e uma mensagem dizendo se o aluno foi aprovado ou está de exame.Comandos Condicionais Exercício: Escreva um programa que calcula a média final dos alunos de MC102 das turmas P e R. . Solicite ao usuário apenas as notas de prova.

b. c). .Comandos Condicionais Exercício: Faça um programa que imprime o maior entre 3 números inteiros distintos (a.

b). return 0. &c). printf("\nEntre com os numeros: "). if( b > a && b > c) printf("\nO maior numero eh: %d\n ". if( c > a && c > b) printf("\nO maior numero eh: %d\n ". b. c).h> int main() { int a. } . &a.Comandos Condicionais #include<stdio. c. if( a > b && a > c) printf("\nO maior numero eh: %d\n ". scanf("%d%d". &b. a).

Comandos Condicionais Problema: Faça um programa que imprime o maior entre 3 números inteiros distintos. . O programa deve realizar apenas duas comparações.

scanf("%d%d".h> int main() { int a. c). &b. ". a). printf("\nEntre com os numeros: "). ". &c).Comandos Condicionais #include<stdio. b). c). } ". c. ". if( a > b ) { if( a > c ) printf("\nO maior numero eh: %d\n else printf("\nO maior numero eh: %d\n } else { if( b > c ) printf("\nO maior numero eh: %d\n else printf("\nO maior numero eh: %d\n } return 0. . &a. b.

Cada else está relacionado ao if que se encontra no mesmo bloco. .Comandos Condicionais Comando Condicionais Aninhados: • • A quantidade de if-else aninhados depende da vontade do programador.

Comandos Condicionais Exercício: Escreva um programa que lê 3 valores inteiros e imprime como saída os mesmos valores em ordem crescente. .

o(s) valor(es) da(s) raíz(es) da equação.Comandos Condicionais Exercício: Escreva um programa em linguagem C que solicita ao usuário os coeficientes A. . e imprime. se existirem. B. e C de uma equação do segundo grau. Caso não existam raízes reais o programa deve informar o usuário deste fato.

0 3OSEP enifed # 3.aton taolf { ) (n i a m t n i 4.)" :aton adnuges a moc ertnEn\"(ftnirp .Nodnamoc … .)aton& .aidem . ou seja é verdadeira != 0."f%"(fnacs .0 2OSEP enifed # 3.1OSEP * aton = aidem ."f%"(fnacs .)" :aton ariemirp a moc ertnEn\"(ftnirp .)" :aton ariecret a moc ertnEn\"(ftnirp .0 nruter . e/ou operadores lógicos é satisfeita. Como resolver ??? Comandos Condicionais Em linguagem C: 1 .oidts<edulcni# Comandos Condicionais Definição: Uma estrutura condicional permite a escolha de um grupo de comandos ou instruções a ser executado quando determinada condição. Só uma deve ser executada.3 O S E P * a t o n = + a i d e m .0 1OSEP enifed # >h. e/ou operadores relacionais." n\f% :he saton sad aidem An\"(ftnirp ."f%"(fnacs .)aton& .1odnamoc ) oãsserpxe (fi { } } .)aidem .2 O S E P * a t o n = + a i d e m .Aula Passada Comandos Condicionais Problema: Escreva um programa que lê dois números inteiros (a e b) e imprime como saída o maior deles.)aton& . • • Temos duas saídas possíveis. composta por expressões aritméticas. .2odnamoc .

a tni { )(niam tni >h. a execução do programa passa para o comando seguinte ao bloco de comandos." n\d% :he oremun roiam On\"(ftnirp ) b > a (fi ." n\d% :he oremun roiam On\"(ftnirp { ) a => b (fi } ." n\d% :he roemun roiam On\"(ftnirp } . Comandos Condicionais Comandos Condicionais 2 } . como evitá-la? } .a& .b .)" :soremun so moc ertnEn\"(ftnirp .)b ."d%d%"(fnacs .a tni { )(niam tni >h.)b& .oidts<edulcni# Resposta: O programa anterior realiza duas comparações." n\d% :he oremun roiam On\"(ftnirp { ) b > a (fi .b .)a . sendo que uma delas é desnecessária. tem valor diferente de zero.oidts<edulcni# Resposta: Problema: Comandos Condicionais Comandos Condicionais • • • Comando if: O bloco de comandos é executado apenas se a expressão é verdadeira.)b& ."d%d%"(fnacs . ou seja." n\d% :he oremun roiam On\"(ftnirp { ) a => b (fi } { ) b > a (fi ." n\d% :he roemun roiam On\"(ftnirp esle .)b .0 nruter .)a .0 nruter } . Quando o bloco de comandos possui apenas um comando não é necessário o uso de { }.)" :soremun so moc ertnEn\"(ftnirp . Quando a expressão é falsa.)b .)a .a& ..

Comandos Condicionais Comandos Condicionais Faça um programa que imprime o maior entre 3 números inteiros distintos (a. ou seja. considere que todos os alunos entregaram todos os exercícios de laboratório.)c& . c). Exercício: Comandos Condicionais Escreva um programa que calcula a média final dos alunos de MC102 das turmas P e R. O else é opcional ( if pode ter ou não um else.a& ." n\d% :he oremun roiam On\"(ftnirp )b > c && a > c (fi . } .b& .)b ." n\d% :he oremun roiam On\"(ftnirp )c > b && a > b (fi . b. Solicite ao usuário apenas as notas de prova.0 nruter ."d%d%"(fnacs . mas todo else tem um if ).)c . tem valor igual a zero.oidts<edulcni# Exercício: 3 .a tni { )(niam tni >h.Comandos Condicionais Comando else: • • • • Deve sempre estar precedido de um if.b . Imprima como saída a media final do aluno e uma mensagem dizendo se o aluno foi aprovado ou está de exame." n\d% :he oremun roiam On\"(ftnirp )c > a && b > a (fi .c . O bloco de comandos é executado apenas se a expressão é falsa.)" :soremun so moc ertnEn\"(ftnirp . Quando o bloco de comandos possui apenas um comando não é necessário o uso de { }.)a .

O programa deve realizar apenas duas comparações.a& .)" :soremun so moc ertnEn\"(ftnirp ." n\d% :he oremun roiam On\"(ftnirp ) c > a (fi { ) b > a (fi .0 nruter } .Comandos Condicionais Problema: Faça um programa que imprime o maior entre 3 números inteiros distintos. Comandos Condicionais } . Cada else está relacionado ao if que se encontra no mesmo bloco.b .b& ."d%d%"(fnacs .)a .c ." n\d% :he oremun roiam On\"(ftnirp ) c > b (fi { esle } ." n\d% :he oremun roiam On\"(ftnirp esle ." n\d% :he oremun roiam On\"(ftnirp esle .)c& . Exercício: Comandos Condicionais Escreva um programa que lê 3 valores inteiros e imprime como saída os mesmos valores em ordem crescente.oidts<edulcni# Comandos Condicionais Comando Condicionais Aninhados: • • A quantidade de if-else aninhados depende da vontade do programador.)c .)b .a tni { )(niam tni >h. 4 .)c .

o(s) valor(es) da(s) raíz(es) da equação. B. se existirem. 5 . e C de uma equação do segundo grau. Caso não existam raízes reais o programa deve informar o usuário deste fato. e imprime.Comandos Condicionais Exercício: Escreva um programa em linguagem C que solicita ao usuário os coeficientes A.

UNIVERSIDADE FEDERAL DE OURO PRETO INSTITUTO DE CIÊNCIAS EXATAS E BIOLÓGICAS DEPARTAMENTO DE COMPUTAÇÃO CIC107 – PROGRAMAÇÃO DE COMPUTADORES I
5ª Aula prática Estrutura de repetição “for” Seu formato é for (inicialização; condição; incremento) comando interno; e sua finalidade é repetir o “comando interno” enquanto a “condição” permanecer verdadeira. É semelhante à estrutura “while” da aula anterior, mas a estrutura “for” prevê campos específicos para “inicialização” e para estabelecer “incremento”. É especialmente projetada para executar uma ação repetida sob controle de um contador que é incrementado em cada iteração (repetição). Ela trabalha da seguinte forma: 1. inicialização é executada; visa, geralmente, a atribuição de valor a uma variável contadora; 2. condição é verificada; se é verdadeira a repetição continua, senão a repetição é encerrada e o “comando interno” não é mais executado; 3. comando interno é executado. Na verdade, pode ser um comando composto, ou bloco de comandos, entre chaves { }; 4. finalmente, incremento é executado e o processo retorna para o passo 2 acima. Exemplo 1 : programa para calcular o fatorial de um número. #include <iostream> using namespace std; main() { int x, fat; cout << "Digite um número inteiro: "; cin >> x; fat = 1; for ( int i=2; i<=x; i=i+1 ) fat = fat * i; cout << "fatorial: " << fat << endl; system("pause"); } Exemplo 2 : programa que imprime todos os divisores de um número #include <iostream> using namespace std; main() { int x; cout << "Digite um número: "; cin >> x; for ( int i=x; i >= 1; i=i-1 ) if ( x%i = = 0 ) cout << i << " é divisor de " << x << endl; system("pause"); } Observações: 1. estamos designando como incremento algo que, na verdade, pode ser um decremento, como no

exemplo 2 acima; 2. a instrução de incremento i=i+1 pode ser escrita como i++; também a instrução i=i-1 pode ser escrita como i--; 3. a estrutura “for” é muito mais flexível do que apresentado aqui. Quem quiser conhecer todas as possibilidades deve consultar um livro ou um tutorial; Exemplo 3 : programa que escreve uma mensagem com a seguinte estrutura: sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho … #include <iostream> using namespace std; main() { int linhas; cout << "Quantas linhas: "; cin >> linhas; for (int lin=1; lin<=linhas; lin++) { for (int col=1; col<=lin; col++) cout << "sonho "; cout << endl; } system("pause"); } Exercícios: 3)Crie um programa para imprimir a tabela de conversão de graus Celsius para Farenheit e Kelvin. A tabela deve abranger as temperaturas de 0oC a 100o C. 4)O valor aproximado do número π pode ser calculado usando-se a série: S = 1/13 - 1/33 + 1/53 - 1/73 + 1/93 - ... sendo π = (S *32)1/3. Escreva um programa para ler um número inteiro n, calcular e imprimir uma aproximação para o valor de π usando os n primeiros termos da série. a) Altere o programa do exemplo 3 para imprimir o dobro do número de linhas especificado, formando uma configuração como exemplificado abaixo para número de linhas igual a 4. sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho b) Altere o programa do exemplo 3 para imprimir o número de linhas especificado, com a seguinte configuração: sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho sonho

........

;

) " n\ odalucirtam atse OAN onula O n\" (ftnirp
esle ; …

)

9 06 440 == AR | |

) " n\odalucirtam atse onula O n\" (ftnirp | | 71 424 0 == AR || 6 60 240 == AR (fi
;

Escreva um programa que solicita ao usuário que digite o seu RA e em seguida o programa retorna se o usuário está ou não matriculado na disciplina MC102.

) A R & , " d % "(fnacs ; A R tni
Solução:

Agora seu programa deve dizer o nome do aluno caso ele esteja matriculado.

Problema:

Problema:

Decisão Múltipla

Decisão Múltipla

Em linguagem C:

Decisão Múltipla

Decisão Múltipla

1
sod namoc ed ocolb : tluafed sodnamoc ed ocolb : Nrolav esac … sodn amoc ed ocolb : 2rolav esac sodn amoc ed ocolb : 1rolav esac
) }

oãs serpxe (hctiws

{

Decisão Múltipla
Definição: O comando é uma estrutura condicional de decisão múltipla que testa o valor de uma expressão e desvia o fluxo de execução do programa de acordo com o resultado do teste. Solução:

Decisão Múltipla

Decisão Múltipla
: Exercício:

Decisão Múltipla

• • •

A expressão deve ter valor numérico. Começa a executar o bloco de comandos a partir do que for igual ao valor da expressão. Só para de executar os comandos quando ou chega ao fim do . encontra um é opcional e vem sempre seguido de ; é opcional e é executado quando nenhum for igual a expressão.
h ct i w s kaerb esac esac

Escreva um programa que a partir do RA imprime o nome do usuário, se ele estiver matriculado em MC102, caso contrário o programa avisa que o usuário não está matriculado. P.s.: Considere apenas os seguintes alunos: Ana 042066 Camila 042417 Leo 044609 Outro Leo 044635

;

;) " n \ o d a l u c i r t a m a ts e o n u l a O n \ " (ftnirp : 9 0 6 4 4 0 e s a c … : 7 14 24 0 esac 6 60 24 0 esac

) " n\ odalucirtam at se O AN onula On\ " (ftnirp : t l u a f e d

:

;

) A R & , " d % "(fnacs ; A R tni
) ;kaerb

AR (hctiws
{ }

h ctiws

tluafed

kaerb

hctiws

• •

2

Decisão Múltipla
Exercício: Escreva um programa que solicita ao usuário que digite um caracter e em seguida o programa imprime se esse caracter é ou não uma vogal.

3

Comandos Repetitivos
Problema: • Escreva um programa que imprime os 3 primeiros números ímpares. • Escreva um programa que imprime os 100 primeiros números ímpares. • Escreva um programa que imprime os n primeiros números ímpares, onde n é indicado pelo usuário.

. A execução continua até que a condição de parada seja falsa.Comandos Repetitivos Comando do-while : O comando do-while é uma instrução de repetição onde a condição de parada é testada após a execução do bloco de comandos.

comando 2.Comandos Repetitivos Em linguagem C: do { comando 1. } while( condição de parada ). . … comando n.

y. x = m. r. y = n.Comandos Repetitivos Exemplo: int main() { int x. do { r = x % y. m = 76. } . y = r. return 0. }while( r != 0 ). n = 42. x = y.

.Comandos Repetitivos Exercício: Escreva um programa em linguagem C que imprime os 100 primeiros números ímpares.

cont = 1. } while (cont <= 100). cont++. num).h> int main () { int num = 1. num += 2. do { printf (“%d\t”. } .Comandos Repetitivos Solução: #include <stdio.

Comandos Repetitivos Exercício: Escreva um programa em linguagem C que imprime os n primeiros números ímpares. .

Comandos Repetitivos
Solução:
#include <stdio.h> int main () { int num = 1, cont = 1, n; printf(“Entre com n ”); scanf(“%d”, &n); do { printf (“%d\t”, num); num += 2; cont++; } while (cont <= n); }

Comandos Repetitivos
Exercício: Construa um programa que imprime a soma de todos os valores positivos digitados pelo usuário até que ele digite um numero negativo.

Comandos Repetitivos
Solução:
int n, soma = 0; do { printf ( "Digite um numero positivo para ser somado ou negativo para sair: " ); scanf ( "%d" , &n ); if ( n >= 0 ) soma = soma + n; }while ( n >= 0 ) ; printf ( "A soma eh %d\n" , soma );

Comandos Repetitivos
Comando while : O comando while é uma instrução de repetição onde a condição de parada é testa antes da execução do bloco de comandos. A execução continua até que a condição de parada seja falsa. Possui 4 etapas básicas: • • • • Inicialização da variável de controle. Teste da condição de parada. Execução do bloco de comandos. Atualização da variável de controle.

Comandos Repetitivos
Em linguagem C: inicialização while( condição de parada ); { comando 1; comando 2; … comando n; atualização }

Comandos Repetitivos
Solução:
int n, soma = 0; printf ( "Digite um numero positivo, ou negativo para sair: "); scanf ( "%d" , &n ); while ( n >= 0 ) { soma = soma + n; printf ( "Digite um numero positivo, ou negativo para sair:" ); scanf ( "%d" , &n ); } printf ( "A soma eh %d\n" , soma );

Comandos Repetitivos Problema: Qual é o melhor ? do-while ou while ? Analise o problema da soma dos números positivos. .

Comandos Repetitivos Problema: Reescreva o algoritmo para imprimir os n números ímpares utilizando o comando while. .

cont = 0. scanf(“%d”.Comandos Repetitivos Solução: #include <stdio.h> int main () { int num = 1. while (cont < n). cont++. num). num += 2. } } . printf(“Entre com n ”). n. { printf (“%d\t”. &n).

. Este programa deve rodar até que o usuário digite 0 (zero).Comandos Repetitivos Problema: Escreva um programa que informa se um número inteiro é par ou é ímpar.

scanf ("%d". &n).Comandos Repetitivos Solução: int n. } while (n != 0). . else printf ("%d eh par\n". n). n). do { printf (“Entre um valor positivo (ou 0 para sair):"). if (n % 2 == 1) printf ("%d eh impar\n".

r = y . • Escreva um programa que imprime os n primeiros números ímpares. y .1 odnamoc . • Escreva um programa que imprime os 100 primeiros números ímpares.2 odnamoc .m = x .n odnamoc … { od 1 . eli h w-od Comandos Repetitivos Em linguagem C: Exemplo: Comandos Repetitivos . x tni { )( niam tni .y = x .r . 6 7 = m . é uma instrução de repetição O comando onde a condição de parada é testada após a execução do bloco de comandos.0 nruter { od } . A execução continua até que a condição de parada seja falsa. onde n é indicado pelo usuário.n = y .Comandos Repetitivos e lihw-od Comandos Repetitivos Comando : Problema: • Escreva um programa que imprime os 3 primeiros números ímpares. 2 4 = n .) 0 =! r ( elihw } .y % x = r .) ada rap ed oãçidnoc ( elihw } .

n . ”d%“(fnacs .)n & .1 = tnoc . )0 0 1 = < tnoc( elihw } .” t \ d % “ ( f t n i r p { od . + +t n o c .Escreva um programa em linguagem C que imprime os 100 primeiros números ímpares.o idts < edulcni # . ”t\d%“( ftnirp { od .) m u n .)n = < tnoc( elihw } .2 = + mun . Exercício: Exercício: Comandos Repetitivos Comandos Repetitivos Solução: Comandos Repetitivos Comandos Repetitivos 2 } . ) m u n . + +t n o c .1 = tnoc . oi d t s < e d u l c n i # Solução: Escreva um programa em linguagem C que imprime os n primeiros números ímpares. } .2 = + mun .1 = m u n tni { ) ( nia m tni > h .) ” n m o c e r t n E “( ftnirp .1 = mun tn i { ) ( ni a m t n i > h.

" n \ d % h e a m o s A " ( ftnirp . n tni Em linguagem C: .n odnamoc } • • • • Inicialização da variável de controle. Teste da condição de parada. "d%" ( fnacs . Solução: Comandos Repetitivos Comandos Repetitivos e lihw Comando : oãçazilauta .n + a mo s = amos ) 0 = > n ( fi … 3 . Possui 4 etapas básicas: eli h w .0 = a m o s . ) 0 = > n ( elihw } Comandos Repetitivos . Atualização da variável de controle.) " :rias arap ovitagen uo odam o s res arap o vitisop oremun mu etigiD" ( ftnirp { od .Comandos Repetitivos Exercício: Construa um programa que imprime a soma de todos os valores positivos digitados pelo usuário até que ele digite um numero negativo.2 odnamoc . A execução continua até que a condição de parada seja falsa.) a m o s . { .) n & .1 odnamoc é uma instrução de repetição O comando onde a condição de parada é testa antes da execução do bloco de comandos. Execução do bloco de comandos.) adarap ed oãçidnoc (elihw oãçazilaicini .

" n \ d % h e a m o s A " ( ftnirp } . e lihw eli h w-od . 0 = tno c .) n < tnoc( elihw . n tni Reescreva o algoritmo para imprimir os n números ímpares utilizando o comando while.)n & . "d%" ( fnacs . ”t\d%“( ftnirp { .0 = a m o s .) m u n . Problema: Comandos Repetitivos Problema: Comandos Repetitivos Comandos Repetitivos 4 .) ” n m o c e r t n E “( ftnirp .) n & .) n & .2 = + mun .} } .) a m o s .n + a mo s = amos { ) 0 = > n ( elihw . "d%" ( fnacs .o vitisop oremun mu etigiD" ( ftnirp . ”d%“(fnacs .) ":rias arap ovitagen uo .o idts < edulcni # Solução: Solução: Comandos Repetitivos ou ? Analise o Qual é o melhor ? problema da soma dos números positivos.1 = mun tni { ) ( ni a m t n i > h.) " :rias arap ovitagen uo .n . + +t n o c .o vitisop oremun mu etigiD" ( ftnirp .

{ od . Este programa deve rodar até que o usuário digite 0 (zero)." n \ r a p m i h e d % " ( ftnirp ) 1 = = 2 % n ( fi . Problema: Comandos Repetitivos Solução: Comandos Repetitivos 5 . ) n & . ) n . " n\r a p h e d %" ( ftnirp esle . ) 0 =! n( e l i h w } .) ":)ri as ar ap 0 uo( ovi tisop rol av m u ert nE“ ( ftnirp .n tni Escreva um programa que informa se um número inteiro é par ou é ímpar. ) n ." d % " ( f n a c s .

se for verdadeira o bloco de comandos é executado. ) m u n . ) n & .1 odnamoc é uma simplificação do comando O comando .Comandos Repetitivos Aula passada: Etapas do laço: • • • Inicialização: Comandos Repetitivos Condição de parada: Bloco de comandos: • Atualização: Comandos Repetitivos rof Comando : Em linguagem C: .” t \ d % “ ( f t n i r p . onde a inicialização da variável de controle. + +t n o c Comandos Repetitivos 0 = tnoc n < tnoc … } .) ” n moc ertnE “( ftnirp . eli h w { )o ã ç a z i l a u t a .n . ” d % “ (f n a c s .)n < tnoc( elihw .2 odnamoc . rof elihw .2 = + mun .n odnamoc } O comportamento é o mesmo do comando : após a inicialização a condição de parada é testada.2 = + mun . a condição de parada e atualização da variável de controle são especificados no próprio comando.” t \ d % “ ( f t n i r p { . o ã ç a z i l a i c i n i ( r o f . ) m u n .0 = tnoc .1 = m u n tni 1 . a variável de controle é atualizada e a condição de parada é testada novamente e o comando se repete até que a expressão da condição de parada seja falsa. a d a r a p e d o ã ç i d n o c . + +t n o c .

n . Onde n é fornecido pelo usuário.” d % “ ( f t n i r p { ) + + i . 0 0 1 < i .) ” n moc ertnE “( ftnirp .0 nruter } . ) n & . ) 1 + i * 2 .i t n i { ) ( niam tni Comandos Repetitivos Solução: Comandos Repetitivos Exercício: Escreva um programa em linguagem C que calcula o somatório de 1 até n. 0 = i (r o f 2 . ) 1 + i * 2 .” d % “ ( f t n i r p { ) + +i .i t n i { ) ( niam tni } . . ” d % “ (f n a c s .0 nruter } .Comandos Repetitivos Exemplo: Comandos Repetitivos Exercício: Escreva um programa em linguagem C que imprime os n primeiros números ímpares utilizando o comando . rof } . n < i . 0 = i ( r o f .

Exercício: Exercício: Comandos Repetitivos Comandos Repetitivos 3 } .) n .i + amos = amos { ) + + i .) .) ” n moc ertnE “( ftnirp . n < i . 2 = i ( r o f . ” d % “ (f n a c s . . 0 = am os ..i tni { )( niam tni } . onde n é fornecido pelo usuário.” d % “ ( f t n i r p } .0 nruter n .0 nruter .kaerb ) 0 = = i % n (fi { ) + +i .n . ) n & .)n & . ”d%“(fnacs ” n m o c e r t n E “( ftnirp .n . ” o m i r P h e O A N d % “( ftnirp esle . ” o m i r P h e d % “( ftnirp n = = i (fi ) } . 0 = i (r o f Escreva um programa em linguagem C que determina se valor n informado pelo usuário é ou não um número primo. n < i .i tni { ) ( niam tni Solução: Solução: Comandos Repetitivos Comandos Repetitivos Escreva um programa que imprime todos os números primos entre 2 e n.) . ) a m o s .

Exercício: Comandos Repetitivos 4 } . n < i .) ) + +i . j .) . i " t \ d % "( f t n i r p ) . } { ." n \ d % = d % x d % " ( f t n i r p ) + + j .) j * i .i . n t n i Solução: Solução: Comandos Repetitivos Comandos Repetitivos Escreva um programa em linguagem C que imprima todas as tabuadas entre 2 e n. )" :ovitisop orietni oremu n m u moc ertnE "( ftnirp j .. j . onde n é informado pelo usuário. < j i j .kaerb i = = j (fi } ) 0 = = j % i (fi { ) ++ .n tni .i . ) n & . i " n\:d% od adaubaT n\"( ftnirp { ) ++ . 2 = i (r o f .) . ) n & ." d % " ( f n a c s " n m o c e r t n E "( f t n i r p . 2 = i ( r o f . 0 1 = < j .i t n i . 2 = j (r o f . 1 = j (r o f . " d % " (f n a c s . i n = < i .

.Exercícios Exercício: Diga qual será a saída do programa a seguir.

} } printf("%d\n".Exercícios int r = 0. r = 0. while( n > 0 ) { r += n % 10. r). . if( n == 0 && r > 9) { n = r. n /= 10. n = 98.

Exercícios Exercício: Repita o exercício anterior mas considere que n vale agora: a) b) c) 5 45 123 .

. A seqüência termina com o número 0 (zero).Exercícios Exercício: Escreva um programa que lê uma seqüência de números inteiros e imprime qual o maior e qual o menor valor dessa seqüência.

scanf("%d". &n).Exercícios int n. maior = menor = n. if( n < menor ) menor = n. menor. &n). } printf("maior: %d e o menor: %d\n". scanf("%d". printf("Entre com um numero ou zero para terminar: "). while(n != 0 ) { if( n > maior ) maior = n. . maior. printf("Entre com um numero ou 0 para sair: "). menor). maior.

.Exercícios Exercício: Escreva um programa que imprime a soma de todos os números inteiros entre A e B (incluindo A e B). onde A e B são fornecidos pelo usuário.

h> int main() { int A. &A. for (i = A. } . return 0.Exercícios #include<stdio. &B). B. printf("Entre com A e B: "). scanf("%d%d". soma. soma = 0. soma). printf("A soma eh %d\n". i. i++) soma += i. i <= B.

Exercícios Exercício: Escreva um programa que lê um valor informado pelo usuário e imprime se este valor é ou não uma potência positiva de 2. .

pot = 1. &n).\n". while( pot < n ) pot *= 2. pot. n). . printf("Entre com o numero: ").\n". scanf("%d". n).Exercícios int n. else printf("%d NAO eh potencia de 2. if( pot == n) printf("%d eh potencia de 2.

.Exercícios Exercício: Altere o programa anterior para que ele execute até que o usuário digite um valor negativo.

\n"). pot. scanf("%d". while( n > 0 ) { pot = 1. while( pot < n ) pot *= 2. if( pot == n) printf("eh potencia de 2.Exercícios int n. printf("Entre com o numero: "). scanf("%d". &n). &n). } . printf("Entre com o numero: ").\n"). else printf("NAO eh potencia de 2.

. & .)“ :sartel 4 ed sarvalap moc e rtnE“( .opas Solução: Vetores Vetores Problema: Refaça o programa anterior para palavras ou frases com 20. rahc { ) ( niam tni Vetores Um vetor é um tipo de dado utilizado para representar uma certa quantidade de variáveis do mesmo tipo.) ” c % c % c % c % “( .4L . 2L 1L 4L 3L 2L 0 1L ftnirp ftnirp fnacs 1 .” c % c % c % c % “( . & . ) & . . nruter .asac lata -. Ex. e 50 caracteres. .2L . 4L 3L 1L .Vetores Exercício : Escreva um programa em linguagem C que lê palavras com 4 letras e as imprime de trás para frente. Definição: } .atal sapo -. 30. & .: casa -.3L .

Vetores Exemplos : Vetores Importante: • • • O primeiro elemento de um vetor é o de índice 0 (zero). < .] [ . Ex. 001 sosep Onde: . = (r o f =] + [ & ”c % “( . é o número de variáveis que será criado (tamanho do vetor).] [ . é o nome que será utilizado para referenciar o conjunto de variáveis.1 i sosep :sieváirav ed o remún • . Utilize vetores e laços. float.Vetores Em Linguagem C: . Exercício: Escreva um programa em linguagem C que lê palavras com 10 letras e as imprime de trás para frente. =] [ 1 .] [ Vetores 0 5 sartel 01 saton taolf rahc tni ] sieváirav ed ore m ún [ rodacifit nedi opit + + 2 . 0.) ] [ 6 sartel .] [ 2 sosep 5 saton + +i N 2 i 0 5 saton i :rodacifitnedi • ) *] [ . char. Acessar uma posição inválida de um vetor pode fazer seu programa “Abortar”. = ][ . entre outros. Num vetor de 100 elementos o último elemento é o de índice 99. 0 saton fnacs :opit • é o tipo das variáveis que devem ser criadas.: int.

o programa deve rodar até que o usuário digite um RA negativo.M A T = i ( r o f . Exercício: Vetores Vetores 3 . Exercício: Escreva um programa em linguagem C que lê RA’s e as notas de no máximo 100 alunos. ” c % “ ( f t n i r p ) . ] M A T [ s a r t n i .} . ) ]i [ s a r t e l & . l a t o t . ” c % “ ( f n a c s ) + +i . ” d % “ (f n a c s . ) ]i [ s a r t e l . M A T < i . x u a .x u a = ] ecidni [s a r { ) 0 > x u a ( el i h w . ) ” : a t o n a m o c e r t n E “ (f t n i r p . Utilizando o código do programa anterior. escreva um novo programa que permite ao usuário consultar a nota de um aluno digitando o seu RA. + +e ci d n i .) ” : e s a r f a m o c e r t n E “( ftnirp .0 n r u t er } .-i . ] M A T [s a t o n t a o l f } 00 1 MAT en ifed# { )(n i a m tni . ) x u a & . ” f % “ (f n a c s . ) ] e ci d n i [ s a t o n & .] M A T[sartel r a h c { )( niam tni 0 1 MAT enifed# Solução: Solução: Vetores Vetores Obs. 1 . ” d % “ (f n a c s .0 nruter .i t n i . 0 = e ci d n i . O programa deve ler e armazenar um novo RA e uma nova nota até que o usuário digite um RA negativo. ) x u a & . )” : ) r i a s a r a p o v i t a g e n u o ( A R o m o c e r t n E “ (f t n i r p . )” : ) r i a s a r a p o v i t a g e n u o ( A R o m o c e r t n E “ (f t n i r p .: O trecho de código que lê os RA’s e as notas é o mesmo do programa anterior. 0 = i ( r o f . 0 = > i .

kaerb ) x u a = = ] e c i d n i [ s a r (fi ) + + ecidni .)” :)rias arap ovitagen uo( AR o moc ertnE“(ftnirp . 0 = ecidni (r o f { ) 0 > xua ( elihw .)xua & . ” d % “(fnacs . ecidni = latot .)] ecidni[ s aton .) ” n \ o d a r t n o c n e m u a n A R “( ftnirp esle .)xua & .Solução: Vetores 4 } .lat ot < ecidni . ” n \ f 2 .)” :)rias arap ovitagen uo( AR o moc ertnE“(ftnirp . % : h e a t o n A “( ftnirp ) l a t o t < e c i d n i (fi . ” d % “(fnacs .

atal sapo -. Ex.: casa -.Vetores Exercício : Escreva um programa em linguagem C que lê palavras com 4 letras e as imprime de trás para frente.asac lata -.opas .

L2. &L4). &L2. scanf(“%c%c%c%c”. printf(“%c%c%c%c”. L4. &L3. L3. &L1. L3. L1).Vetores Solução: int main() { char L1. return 0. printf(“Entre com palavras de 4 letras: “). L2. } . L4.

e 50 caracteres.Vetores Problema: Refaça o programa anterior para palavras ou frases com 20. . 30.

.Vetores Definição: Um vetor é um tipo de dado utilizado para representar uma certa quantidade de variáveis do mesmo tipo.

• número de variáveis: é o número de variáveis que será criado (tamanho do vetor). .Vetores Em Linguagem C: tipo + identificador + [ número de variáveis ]. • identificador: é o nome que será utilizado para referenciar o conjunto de variáveis. float. Onde: • tipo: é o tipo das variáveis que devem ser criadas.: int. char. Ex. entre outros.

notas[0] = 1. char letras[50]. i < N. i++) pesos[i] = 1. scanf(“%c”. notas[5 + 2] = notas[5] * pesos[2]. for(i = 0. . &letras[6]).0.Vetores Exemplos : int notas[10]. float pesos[100].

Acessar uma posição inválida de um vetor pode fazer seu programa “Abortar”.Vetores Importante: • • • O primeiro elemento de um vetor é o de índice 0 (zero). Num vetor de 100 elementos o último elemento é o de índice 99. .

Vetores Exercício: Escreva um programa em linguagem C que lê palavras com 10 letras e as imprime de trás para frente. Utilize vetores e laços. .

} . letras[i]). printf(“Entre com a frase: ”). int i. &letras[i]). for(i = 0. i >= 0. for(i = TAM .1. return 0. i < TAM.Vetores Solução: #define TAM 10 int main() { char letras[TAM]. i--) printf(“%c”. i++) scanf(“%c”.

Vetores Exercício: Escreva um programa em linguagem C que lê RA’s e as notas de no máximo 100 alunos. O programa deve ler e armazenar um novo RA e uma nova nota até que o usuário digite um RA negativo. .

&notas[indice]). indice = 0.Vetores Solução: #define TAM 100 int main() { float notas[TAM]. } . total. } return 0. printf(“Entre com a nota: ”). &aux). printf(“Entre com o RA (ou negativo para sair): ”). scanf(“%d”. int ras[TAM]. &aux). scanf(“%d”. printf(“Entre com o RA (ou negativo para sair): ”). while(aux > 0) { ras[indice] = aux. aux. indice++. scanf(“%f”.

o programa deve rodar até que o usuário digite um RA negativo. escreva um novo programa que permite ao usuário consultar a nota de um aluno digitando o seu RA.Vetores Exercício: Utilizando o código do programa anterior. Obs.: O trecho de código que lê os RA’s e as notas é o mesmo do programa anterior. .

Vetores Solução: total = indice. &aux). scanf(“%d”. } .2f\n”. indice++ ) if( ras[indice] == aux ) break. &aux). if( indice < total ) printf(“A nota eh: %. while( aux > 0 ) { for( indice = 0. scanf(“%d”. printf(“Entre com o RA (ou negativo para sair): ”). notas[indice]). else printf(“RA naum encontrado\n”). indice < total. printf(“Entre com o RA (ou negativo para sair): ”).

0 nruter } … { ) 0 > xua( elihw .Aula Passada Problema : Escreva um programa em linguagem C que lê os RA’s e 4 notas de no máximo 100 alunos. Definição: } . O programa deve ler e armazenar um novo RA e as suas notas até que o usuário digite um RA negativo.] M A T[sar tni . O programa deve ler e armazenar um novo RA e as suas notas até que o usuário digite um RA negativo.] M A T[ 1 saton taolf { )( niam tni Matrizes Uma matriz é uma generalização multidimensional de um vetor.lat ot . ” d % “(fnacs . em outras palavras. Solução: 00 1 MAT enifed# Aula Passada Matrizes Problema: Escreva um programa em linguagem C que lê os RA’s e n notas de no máximo 100 alunos.)xua & .xua . onde n é definido pelo usuário.) ” : ) r i a s a r a p o v i t a g e n u o ( A R o m o c e rt n E “( ftnirp .] M A T[ 2s aton . ] M A T[ 3sat on .] M A T[ 4 saton . uma matriz é um vetor de vetores.0 = ecidni . 1 .

float. 1 + ] 1 [ ] 5 [s a t o n = ] 2 [ ] 5 [s a t o n . ) ] 0 [ ] 6 [ o t x e t & . Ex. No caso de matrizes bidimensionais. é o nome que será utilizado para referenciar o conjunto de variáveis. 5 = ] j [ ] i [s a t o n ) + + j . 1 = ] 0 [ ] 0 [s a t o n Matrizes 2 . 0 = i ( r o f :rodacifitnedi • . . 0 = j (r o f :nd … 2d . são o número de variáveis que serão criados em cada dimensão. o primeiro elemento de uma matriz é o de índice 0 (zero).Matrizes Em Linguagem C: . M < j . entre outros. a primeira dimensão representa a linha e a segunda a coluna. ” c % “ (f n a c s • é o tipo das variáveis que devem ser criadas. ] 0 1 [ ] 0 1 [s a t o n tni Onde: :opit Matrizes Importante: • • • Como nos vetores. Na memória do computador. N < i . Durante a compilação o compilador se encarrega de determinar qual o verdadeiro endereço dos campos da matriz. 0 .: int. matrizes são armazenadas de forma linear como se fossem vetores.1d • ) + +i . Exemplo: A B A D G B E H C F I C D E F G H I • . char. ]s a n u l o c [ ] s a h n i l [ o t x e t r a h c .] nd [ … ] 2d [ ] 1d [ + rodacifit nedi + opit Matrizes Exemplos : .

O programa deve ler e armazenar um novo RA e as suas notas até que o usuário digite um RA negativo."d%"(fnacs )++j . 0 = i ( r o f .)]j[]i[B& . n . " d % "(fnacs .i .0 = j( rof )++i .) 1 + j ..]MAT[]MAT[A tni Solução: } } .0 = i( rof .n < i .)m& .j .j ."d%d%"(fnacs .m < j .n < i . ] M A T [ ] M A T [ s at o n t a o l f Solução: Escreva um programa em linguagem C que solicita ao usuário duas matrizes A e B de dimensões n e m (definidas pelo usuário) e imprime a matriz resultante C da soma de A e B. Exercício: Matrizes Matrizes Matrizes Matrizes 3 . " d % " ( f n a c s . 0 = j ( r o f .)" sezirtam sad seosnemid sa moc ertnE"(ftnirp .)]j[]i[A& .m < j .0 = i( rof . onde n é definido pelo usuário.)" :)rias arap ovitagen uo( AR o moc ertnE"(ftnirp { ) + +i .n . n < j . ) ]j [ ]i [ s at o n & .n& .n < i .]MAT[]MAT[C . " : d % a t o n a m o c e r t n E "( ftnirp { ) + +j ."t\d%"(ftnirp )++j .)"n\:zirtam ariemirp ad sotnemele so moc ertnE"(ftnirp .]j[]i[B + ]j[]i[A = ]j[]i[C )++j . M A T < i .0 = j( rof )++i .kaerb ) 0 < ]i [ a r ( fi . Exercício: Escreva um programa em linguagem C que lê os RA’s e n notas de no máximo 100 alunos.) " : s a t o n e d o r e m u n o m o c e r t n E "( ftnirp . ] M A T [ a r t n i .]MAT[]MAT[B .i .)"n\:zirtam adnuges ad sotnemele so moc ertnE"(ftnirp . " f % " ( f n a c s .0 = j( rof )++i .m .n < i .)]j[]i[C .m < j ."d%"(fnacs )++j .)"n\:he etnatluser zirtam A"(ftnirp .0 = i( rof .0 = i( rof .)n & . ) ]i [ a r & .m < j .0 = j( rof )++i .

o Sistema Operacional. Mas ao invés de utilizarmos o endereço da variável como referência. endereços de memória de outras variáveis.Relembrando Memória do Computador : Podemos entender a memória de um computador como um conjunto de células que armazenam informações. 01 = x tni 1027 Ponteiros . ao executar o nosso programa reserva uma posição de memória.osep * taolf . ai d e m * e l b u o d . fazemos uso do identificador(nome) que atribuímos a variável.o t x e t * r a h c aton * tni . 1024 1025 1026 1028 1029 1030 . Em Linguagem C: Exemplos : . possivelmente. Relembrando Memória do Computador : Quando criamos em nosso programa uma variável de um determinado tipo. 1025 x 1027 1028 10 Ponteiros Definição: Ponteiros ou Apontadores são tipos de variáveis que armazenam endereços de memória.rodacifitnedi* opit 1 . Cada célula da memória possui um endereço (número inteiro de 32 bits).

. )] 1[x . 1{ = ]3[x tni • • * & .} .p * tni 3 .x & = rtp . x * rtp* = rtp * . 05 = rtp * . )] [ .r t p * t n i 01 = x tni . .” d % “( ftnirp . ." n \ d % "( ftnirp 1 p .) x .x & = rtp .Existem dois “novos” operadores que são utilizados com ponteiros em C : Operadores de Ponteiros: Ponteiros Desenho para ficar mais fácil: 1025 x 01 .r t p * t n i 01 = x tni .) rtp .) ." n \ d % "( ftnirp .é utilizado para obter o conteúdo do endereço apontado." n \ d % "( ftnirp .rtp * = a t o n . .) p .2 . ]2[p = ] 1[p = ]0[p x=p . 2356 1027 ptr ? . 1025 … x 05 ptr 62 01 .é utilizado para obter o endereço de uma variável.” d % “( ftnirp .aton & = rtp 0 1 = a t o n .” d % “( ftnirp rtp * .r t p * t n i Qual é a saída ? Ponteiros Qual é a saída ? … Ponteiros Ponteiros 2 .

Ponteiros Média : . 4. P. O seu programa deve imprimir o resultado do cálculo do desvio padrão. Tire a raiz quadrada do resultado. 5.) 1 – n( / f i d = fid f i d( trqs = fid )++ .Ponteiros Exercício: Escreva um programa em linguagem C que solicita ao usuário os pesos e alturas de no máximo 100 pessoas. 0 = i ( r o f 0 = fid . etc…) Ponteiros Calcule a média dos valores Calcule o quadrado da diferença de cada valor em relação a média. Some todos os quadrados. Ponteiros Variância : . ) a i d e m – ] i [r o t e v( * ) a i d e m – ] i [r o t e v ( = + f i d ) + +i .) . 2. 0 = i (r o f n / aidem = aidem 0 = aidem 3 . 3. Desvio Padrão: . while.] [ . Em seguida o seu programa deve solicitar ao usuário que escolha entre calcular o Desvio Padrão dos pesos ou das alturas. Divida o valor da soma pelo número de elementos menos um. i rotev = + aidem i n < i .: Seu programa deveria ter no máximo 4 laços (for. n < i . . Desvio Padrão: 1.s.

Os programas ficaram muito maiores e bem mais difíceis. 3. Tem mais de uma semana que ninguém deixa um recado para mim no meu Orkut. Eu não entendo mais nada do que o professor fala. 4. 5. 6. .Procedimentos e Funções A aula de MC está ficando muito chata por quê ? 1. 2. Todas as anteriores. Eu não consigo resolver os exercícios de laboratório e os exemplos de aula. Não consigo enxergar para que servem as coisas que eu aprendo.

k Onde: Pn = n! An.k c) O número de combinações Cn.Procedimentos e Funções Problema : Escreva um programa em linguagem C que solicita dois valores (n. k) ao usuário e calcula: a) O número de permutações Pn b) O número de arranjos An.k)! Cn.k = n! / (n .k = n! / (k! * (n – k)!) .

Procedimentos e Funções Problema: Quantas vezes vamos escrever o código que calcula o fatorial de um número? fat = 1. i > 1.) fat *= i. i-. for( i = n. .

. exceto que uma função sempre retorna um valor. Funções são semelhantes aos procedimentos. que são executados quando o procedimento é chamado.Procedimentos e Funções Definição : Procedimentos são estruturas que agrupam um conjunto de comandos.

Procedimentos e Funções Desenho para ficar mais fácil : Programa Instrução Procedimento Instrução Procedimento Instrução Instrução Instrução Instrução Instrução .

tipo identificador … . } Lista de Parâmetros: tipo identificador.Procedimentos e Funções Em C: tipo NomeDaFuncao( lista_de_parâmetros ) { instruções.

} . } void ImprimeTexto() { printf(“Ola Mundo”). int B) { return A + B.Procedimentos e Funções Exemplo : int SomaDoisNumeros(int A.

Procedimentos e Funções Exemplo : int main() { int r. 50). } . r = SomaDoisNumeros(30. ImprimeTexto(). return 0.

Seu procedimento ou função deve se chamar pot. .Procedimentos e Funções Exercício: Escreva um procedimento ou função em linguagem C que recebe como parâmetros dois valores A e B e calcula o valor de AB.

i < B. } . for( i = 0. double B) { double ret = 1. return ret. int i. i++ ) ret *= A.Procedimentos e Funções Potência : double pot(double A.

Procedimentos e Funções Exercício: Escreva um procedimento ou função que calcula o fatorial de um número inteiro. .

for( i = n.Procedimentos e Funções Fatorial : int Fatorial(int n) { int fat = 1. int i. } .) fat *= i. return fat. i-. i > 1.

k)! Cn.k c) O número de combinações Cn.k Onde: Pn = n! An.k = n! / (n . k) ao usuário e calcula: a) O número de permutações Pn b) O número de arranjos An.k = n! / (k! * (n – k)!) .Procedimentos e Funções Exercício: Escreva um programa em linguagem C que solicita dois valores (n.

2.k Onde: Pn = n! An. 1 > i . Todas as anteriores. k) ao usuário e calcula: a) O número de permutações Pn b) O número de arranjos An. Funções são semelhantes aos procedimentos. Problema : Procedimentos e Funções Escreva um programa em linguagem C que solicita dois valores (n. 5. Não consigo enxergar para que servem as coisas que eu aprendo. Eu não consigo resolver os exercícios de laboratório e os exemplos de aula. 6. Tem mais de uma semana que ninguém deixa um recado para mim no meu Orkut. 3.i = * t a f ) .k c) O número de combinações Cn.k)! Cn. Eu não entendo mais nada do que o professor fala.Procedimentos e Funções A aula de MC está ficando muito chata por quê ? 1. 4.1 = taf 1 . Os programas ficaram muito maiores e bem mais difíceis. que são executados quando o procedimento é chamado.-i . . n = i ( r o f .k = n! / (n .k = n! / (k! * (n – k)!) Procedimentos e Funções Problema: Quantas vezes vamos escrever o código que calcula o fatorial de um número? Definição : Procedimentos e Funções Procedimentos são estruturas que agrupam um conjunto de comandos. exceto que uma função sempre retorna um valor.

Procedimentos e Funções Desenho para ficar mais fácil : Programa Procedimentos e Funções Em C: Procedimento Instrução Procedimento Instrução Instrução Instrução Instrução Instrução Procedimentos e Funções Exemplo : Exemplo : } .0 3( s o r e m u N s i o D a m o S = r .)”odnuM alO“(ftnirp { )(otxeTemirpmI diov 2 .A tni(soremuNsioDamoS tni .seõçurtsni Procedimentos e Funções { } } .)0 5 .B + A nruter { )B tni .r t n i { ) ( niam tni ) sortemârap_ed_atsil (oacnuFaDemoN opit Lista de Parâmetros: Instrução . ) (o t x e T e m i r p m I .0 nruter .

n = i ( r o f .A = * ter ) + + i .i t n i .t a f n r u t e r .i t n i .-i .1 = ter elbuod { ) B e l b u o d . A e l b u o d (t o p e l b u o d Fatorial : . 0 = i (r o f . . Potência : Procedimentos e Funções Procedimentos e Funções Exercício: Escreva um procedimento ou função que calcula o fatorial de um número inteiro.1 = taf tni { )n tni(lairotaF tni .i = * t a f ) . Seu procedimento ou função deve se chamar pot.t e r n r u t e r Procedimentos e Funções 3 } . 1 > i .Procedimentos e Funções Exercício: Escreva um procedimento ou função em linguagem C que recebe como parâmetros dois valores A e B e calcula o valor de AB. B < i .

k c) O número de combinações Cn.k = n! / (k! * (n – k)!) 4 .k = n! / (n .k Onde: Pn = n! An.Procedimentos e Funções Exercício: Escreva um programa em linguagem C que solicita dois valores (n. k) ao usuário e calcula: a) O número de permutações Pn b) O número de arranjos An.k)! Cn.

Problema 2: Escreva um procedimento ou função em linguagem C que retorna a soma e o produto de dois valores A e B.Procedimentos e Funções Problema 1: Escreva um procedimento ou função em linguagem C que troca dois valores A e B. .

o valor da variável utilizada como parâmetro não é alterado. qualquer alteração no conteúdo apontado será refletida no conteúdo da variável utilizada como parâmetro. Passagem por Referência: Quando a função é chamada o endereço do parâmetro passado por referência é atribuído à um ponteiro. ou seja.Procedimentos e Funções Passagem de Parâmetros: • Passagem por Valor: Quando a função é chamada o parâmetro passado por valor é copiado. • . ou seja.

int* B) { A = 1. X. *B = 2. Y). FuncaoInutil(X. Y = 0. &Y).Procedimentos e Funções Exemplo : void FuncaoInutil(int A. return 0. printf(“%d %d”. } . } int main() { int X = 0.

Exercício 3: Escreva um procedimento ou função em linguagem C que retorna a soma e o produto de dois valores A e B. Exercício 2: Escreva um procedimento ou função em linguagem C que recebe dois valores A e B. .Procedimentos e Funções Exercício 1: Escreva um procedimento ou função em linguagem C que troca dois valores A e B. calcula a soma e guarda o resultado em A.

Procedimentos e Funções Solução: void troca(int* A. aux = *A. } . *B = aux. int* B) { int aux. *A = *B.

Procedimentos e Funções Solução: void SomaEmA(int* A. } . int B) { *A = *A + B.

int B. int* soma. *prod = A * B.Procedimentos e Funções Solução: void SomaProduto(int A. int* prod) { *soma = A + B. } .

. em seguida você deve imprimir os N primeiros valores do vetor.Procedimentos e Funções Exercício : Escreva um procedimento ou função em linguagem C que recebe um vetor de números inteiros V de tamanho 100. e um inteiro N.

Procedimentos e Funções Solução: void ImprimeVetor(int V[100]. i < N. i++) printf(“%d ”. V[i]). for (i = 0. } . int N) { int i.

e um inteiro N por referência. . em seguida você deve ler valores inteiros da entrada até que o usuário digite -1.Procedimentos e Funções Exercício : Escreva um procedimento ou função em linguagem C que recebe um vetor de números inteiros V de tamanho 100. Ao final todos os valores diferentes de -1 devem estar armazenados em V e o total de valores deve estar em N.

&aux). int* N) { int aux. scanf(“%d”. *N = 0. while (aux != -1) { V[*N] = aux. (*N)++. &aux). } } .Procedimentos e Funções Solução: void LeVetor(int V[100]. scanf(“%d”.

A sua função deve retornar 1 se V contém o valor X e zero caso contrário. e um número inteiro X.Procedimentos e Funções Exercício : Escreva uma função em linguagem C que recebe um vetor de números inteiros V de tamanho 100. . um inteiro N que contém o número de posições preenchidas de V.

porque o valor não foi encontrado. .Procedimentos e Funções Algoritmo : • • • • • Percorra todos os valores do Vetor Compare cada valor com o número procurado Se um dos valores for igual então retorne 1 Senão continue procurando Se chegar ao fim da busca retorne zero.

i++) { if( V[i] == X ) return 1. int N.Procedimentos e Funções Busca Linear: int BuscaLinear(int V[100]. } return 0. for (i = 0. int X) { int i. i < N. } .

Procedimentos e Funções Problema : E se os vetores do exercício anterior estivessem sempre ordenados? Seria necessário verificar todos os elementos para determinar se X está em V? .

Repita enquanto esq for menor que dir. Senão dir recebe meio menos 1.Procedimentos e Funções Algoritmo : • • • • • • • • Marque os extremos direito (dir) e esquerdo (esq) do vetor. Compare o valor procurado com o valor central (meio) Se for igual retorne saia do laço. senão retorne 0. se o valor for maior que o valor de meio. Ao sair do laço se valor for igual a meio retorne 1. Senão. então esq recebe meio mais 1. . Atualize o valor do meio.

meio = (esq + dir)/2. esq = 0. dir = N – 1.Procedimentos e Funções Busca Binária : X = 3. esq 1 esq 1 2 2 7 meio 7 15 15 23 dir 23 56 57 58 70 72 78 meio 56 57 58 70 72 dir 78 esq meio dir 1 2 7 15 23 56 57 58 70 72 78 esq meio dir 1 2 7 15 23 56 57 58 70 72 78 .

1. return 0. else dir = meio .1. meio = (esq + dir) / 2. . while (esq < dir) { if ( X == V[meio] ) break. dir = N . } if ( X == V[meio] ) return 1. meio = (esq + dir) / 2. else if ( X > V[meio] ) esq = meio + 1.Procedimentos e Funções Busca Binária: esq = 0.

Procedimentos e Funções Problema : Não há como garantir que o usuário sempre digitará um vetor ordenado. E agora? Como devemos fazer para que seja possível utilizar a busca binária sempre? .

.Procedimentos e Funções Exercício : Escreva uma função em linguagem C que retorna a posição no vetor (não é o valor) do menor elemento. A função recebe como parâmetros um vetor V de 100 elementos e um inteiro N que indica o número de elementos de V.

Procedimentos e Funções Solução: int MenorElemento(int V[100]. menor = 0. for(i = 1. i < N. } . return menor. i++) if(V[i] < V[maior]) menor = i. int N) { int i.

.Procedimentos e Funções Algoritmo : • • Remova o menor elemento do vetor (V) e insira na primeira posição livre do vetor auxiliar (Ordenado). Repita este processo até acabarem os elementos do vetor V.

3 58 20 2 78 15 56 23 28 6 19 20 78 15 56 23 2 6 19 28 .Procedimentos e Funções Ordenação por Seleção (Selection Sort) : N = 11. 3 20 78 15 56 23 2 1 19 28 6 N = 10. 3 1 N = 9. M = 0. M = 2. M = 1.

while(N > 0) { i = MenorElemento(V.Procedimentos e Funções Ordenação por Seleção (Selection Sort) : void SelectionSort(int V[100]. Ordenado[M] = V[i]. int N. M++. V[i] = V[N . int Ordenado[100]) { int M = 0.1]. N). i. N--. } } .

Procedimentos e Funções Problema : Como ordenar um vetor sem alterar os dados do vetor original V ? .

Procedimentos e Funções Algoritmo : • • Percorra o vetor (V) Para cada elemento (aux) de V. então troque aux com o anterior. Repita as trocas até que aux chegue na primeira posição. • • • . Se o valor de aux for menor que do elemento anterior. Senão saia do laço. insira uma cópia de aux na primeira posição livre do vetor auxiliar (Ordenado).

2 2 1 15 1 2 .Procedimentos e Funções Ordenação por Inserção (Insertion Sort) : M = 0. i = 2. 2 2 15 15 2 1 15 15 15 1 3 6 23 57 2 15 1 3 6 23 57 2 15 1 3 6 23 57 M = 2. 2 M = 1. i = 1. i = 0.

1 1 1 2 2 2 2 3 3 3 15 15 6 6 1 6 15 15 3 6 23 57 . i = 4. i = 3.Procedimentos e Funções Ordenação por Inserção (Insertion Sort) : M = 3. 1 1 1 2 2 2 2 15 3 3 15 3 15 15 1 3 6 23 57 M = 4.

&Ordenado[j]). i. M++. for (j = M . for (i = 0. int Ordenado[100]) { int M = 0. else break. j. j >= 0. k. } } .Procedimentos e Funções Solução : void InsertionSort( int V[100]. i++) { Ordenado[M] = V[i]. k = M.1. i < N. int N. j--) if (Ordenado[k] < Ordenado[j] ) Troca(&Ordenado[k--].

Procedimentos e Funções Problema : Como ordenar um vetor sem o uso de um vetor auxiliar (Ordenado) ? .

Procedimentos e Funções Algoritmo : • • • • • • Para cada elemento i do vetor V. Se o valor de i + 1 for menor que i Então troque i + 1 com i. . Repita todo o processo até que todos os elementos do vetor tenham sido comparados. Senão incremente o valor de i. Repita este processo até i chegue ao fim do vetor.

i = 5. i = 3. i = 1. 57 30 30 30 30 30 30 30 8 30 57 8 8 8 8 8 8 30 8 8 57 15 15 15 15 15 15 15 15 15 57 56 56 56 56 56 56 56 56 56 57 23 23 23 23 23 23 23 23 23 57 2 2 2 2 2 2 2 2 2 57 57 57 . i = 1. i = 6. i = 2.Procedimentos e Funções Ordenação por Troca (Bubble Sort) : i = 0. i = 0. i = 4.

Procedimentos e Funções Solução : void BubbleSort( int V[100]. j++ ) if ( V[j] < V[j + 1] ) Troca( &V[j].1. int N) { int j. i. i++ ) { for ( j = 0. i < N .1. j < N . for ( i = 0. &V[j + 1] ). } } .

A tni( litu nIoacnuF .2 = B* 1=A niam diov tni { } { } Exercício 3: Escreva um procedimento ou função em linguagem C que retorna a soma e o produto de dois valores A e B. Procedimentos e Funções Passagem de Parâmetros: • Passagem por Valor: Quando a função é chamada o parâmetro passado por valor é copiado. ) Y & . ou seja. • Procedimentos e Funções Exemplo : ) Procedimentos e Funções Exercício 1: Escreva um procedimento ou função em linguagem C que troca dois valores A e B. ou seja. 0 = X tni . Problema 2: Escreva um procedimento ou função em linguagem C que retorna a soma e o produto de dois valores A e B.” d % d % “( ftnirp . Exercício 2: Escreva um procedimento ou função em linguagem C que recebe dois valores A e B. X (l i t u n I o a c n u F 0 = Y .0 nruter . 1 .) Y . . X . o valor da variável utilizada como parâmetro não é alterado. B *tni .Procedimentos e Funções Problema 1: Escreva um procedimento ou função em linguagem C que troca dois valores A e B. calcula a soma e guarda o resultado em A. Passagem por Referência: Quando a função é chamada o endereço do parâmetro passado por referência é atribuído à um ponteiro. qualquer alteração no conteúdo apontado será refletida no conteúdo da variável utilizada como parâmetro. )( .

A* = xua xua tni .Procedimentos e Funções Solução: ) Procedimentos e Funções Solução: ) Procedimentos e Funções Solução: ) B tni .x u a = B * . { { } } Procedimentos e Funções 2 . em seguida você deve imprimir os N primeiros valores do vetor. Escreva um procedimento ou função em linguagem C que recebe um vetor de números inteiros V de tamanho 100.amos *tni . B + A* = A* { } dorp *tni .A tni(otudorPamoS diov B * t n i . A *tni( A m E a m o S diov Exercício : . A * t n i (a c o r t d i o v . .B tni . e um inteiro N.B* = A* .B * A = dorp* B + A = amos* .

) ]i [ V .0 = N* . ” d % “(fnacs .xua tni . e um número inteiro X. um inteiro N que contém o número de posições preenchidas de V. N t n i . ” d % “ ( f t n i r p ) + +i . ” d % “(fnacs . 0 = i ( r o f .=! xua( elihw . Ao final todos os valores diferentes de -1 devem estar armazenados em V e o total de valores deve estar em N.)xua & .i t n i . N < i . e um inteiro N por referência.Procedimentos e Funções Solução: ) Procedimentos e Funções Exercício : Escreva um procedimento ou função em linguagem C que recebe um vetor de números inteiros V de tamanho 100. 3 .)xua & . + + ) N *( xua = ] N *[V )1 . { } { } { } Procedimentos e Funções Exercício : Procedimentos e Funções Escreva uma função em linguagem C que recebe um vetor de números inteiros V de tamanho 100. em seguida você deve ler valores inteiros da entrada até que o usuário digite -1. ] 0 0 1 [ V t n i (r o t e V e m i r p m I d i o v Solução: ) N * t ni . A sua função deve retornar 1 se V contém o valor X e zero caso contrário. ] 0 0 1 [ V t ni ( r o t e V e L d i o v .

N < i .i t n i . senão retorne 0. ] 0 0 1 [ V t n i ( r a e n i L a c s u B t n i ) + +i .Procedimentos e Funções Algoritmo : • • • • • Percorra todos os valores do Vetor Compare cada valor com o número procurado Se um dos valores for igual então retorne 1 Senão continue procurando Se chegar ao fim da busca retorne zero. então esq recebe meio mais 1. Compare o valor procurado com o valor central (meio) Se for igual retorne saia do laço. Senão. Repita enquanto esq for menor que dir. ) X t ni . 0 = i ( r o f . 1 nruter ) X = = ]i [ V ( fi . Atualize o valor do meio. se o valor for maior que o valor de meio. N t n i . porque o valor não foi encontrado. Busca Linear: Procedimentos e Funções Procedimentos e Funções Problema : E se os vetores do exercício anterior estivessem sempre ordenados? Seria necessário verificar todos os elementos para determinar se X está em V? Algoritmo : • • • • • • • • Procedimentos e Funções Marque os extremos direito (dir) e esquerdo (esq) do vetor. 0 nruter { } { } 4 . Ao sair do laço se valor for igual a meio retorne 1. Senão dir recebe meio menos 1.

kaerb esle 2 7 15 23 57 58 70 72 78 { 2 ) r i d + q s e ( = oi e m .0 nruter . )rid < qse( elihw 2 / )rid + qse ( = oiem .1 + oiem = qse oiem[ V > X ( fi esle . 2 / )rid + qse ( = oiem 1 . 1 .Procedimentos e Funções Busca Binária : esq 1 esq 1 2 meio 56 . E agora? Como devemos fazer para que seja possível utilizar a busca binária sempre? Exercício : Escreva uma função em linguagem C que retorna a posição no vetor (não é o valor) do menor elemento. 1 – N = r i d . ) ] .oiem = rid ) ] . 0 = qse .N = rid . / Procedimentos e Funções Busca Binária: . 0 = q s e . A função recebe como parâmetros um vetor V de 100 elementos e um inteiro N que indica o número de elementos de V. 3 = X dir Procedimentos e Funções 5 . ) ] meio 7 15 dir 23 56 57 58 70 72 78 esq meio dir 1 2 7 15 23 56 57 58 70 72 78 } 1 2 7 15 23 56 57 58 70 72 78 Procedimentos e Funções Problema : Não há como garantir que o usuário sempre digitará um vetor ordenado.1 nruter o i e m [ V = = X ( fi esq meio dir o i e m [ V = = X ( fi .

01 = N ) 0 > N( elihw .) .]001[V tni(otnemelEroneM tni .Ordenação por Seleção (Selection Sort) : Solução: Procedimentos e Funções Procedimentos e Funções Ordenação por Seleção (Selection Sort) : • • Algoritmo : Remova o menor elemento do vetor (V) e insira na primeira posição livre do vetor auxiliar (Ordenado).N [ V = ]i [ V . ]i [ V = ] M [ o d a n e d r O N .i . Repita este processo até acabarem os elementos do vetor V.-.0 = M . Procedimentos e Funções Procedimentos e Funções 6 } } 91 6 82 32 65 51 87 2 85 02 3 . N t ni .1 = M .N .2 = M .9 = N 1 . ] 0 0 1 [ V t ni ( t r o S n o i t c e l e S d i o v 2 32 65 51 87 02 3 . 0 = r o n e m . 0 = M t n i { 6 82 91 1 )] 0 0 1 [ o d a n e d r O t n i .i t n i { ) N tni .++M . ronem nruter )] )+ + . . V( otnemelEroneM = i 82 91 6 2 32 65 51 87 02 3 { . ] 1 .i = r o n e m r o i a m [ V < ]i [ V ( f i i N < i . 1 = i (r o f .11 = N } .

Senão saia do laço.0 = i . 51 2 1 51 2 M = 4. 51 51 3 51 2 M = 3. i = 2. 2 1 51 1 2 2 1 2 2 2 7 . i = 1. i = 3. insira uma cópia de aux na primeira posição livre do vetor auxiliar (Ordenado). i = 4.Procedimentos e Funções Problema : Como ordenar um vetor sem alterar os dados do vetor original V ? Algoritmo : • • Procedimentos e Funções • • • Percorra o vetor (V) Para cada elemento (aux) de V. então troque aux com o anterior. Procedimentos e Funções Ordenação por Inserção (Insertion Sort) : 75 32 6 3 1 51 2 . 51 51 3 3 2 2 1 1 75 32 6 3 1 51 2 M = 1.0 = M Procedimentos e Funções Ordenação por Inserção (Insertion Sort) : 75 75 32 32 6 6 3 3 1 51 51 6 51 6 6 3 3 3 2 2 2 1 1 1 75 32 6 3 1 51 51 51 1 2 M = 2. Se o valor de aux for menor que do elemento anterior. Repita as trocas até que aux chegue na primeira posição.

Repita todo o processo até que todos os elementos do vetor tenham sido comparados.0 = i } } .k [ o d a n e d r O & ( a c o r T ) ]j [ o d a n e d r O < ] k [ o d a n e d r O ( fi ) . ]i [ V = ] M [ o d a n e d r O .2 = i 2 32 65 51 8 75 03 .2 32 65 51 8 03 75 . { ) + +i .3 = i 2 32 65 51 75 8 03 .1 = i 75 75 2 2 32 32 65 65 51 51 8 8 03 . N t ni . 0 = > j .0 = i 03 .i . Se o valor de i + 1 for menor que i Então troque i + 1 com i. N < i .]-. ] 0 0 1 [ V t ni ( t r o S n o i t r e s n I d i o v Solução : • • • • • • Algoritmo : Para cada elemento i do vetor V. Procedimentos e Funções Procedimentos e Funções Ordenação por Troca (Bubble Sort) : Como ordenar um vetor sem o uso de um vetor auxiliar (Ordenado) ? Problema : Procedimentos e Funções Procedimentos e Funções 8 75 2 32 65 51 03 8 . Senão incremente o valor de i. 0 = i ( r o f k .4 = i 2 32 65 75 51 8 03 .6 = i 2 75 32 65 51 8 03 .1 = i . ) ]j [ o d a n e d r O & . { )] 0 0 1 [ o d a n e d r O t n i .M = j ( r o f M = k . Repita este processo até i chegue ao fim do vetor. j .kaerb esle M .-j . 1 .5 = i 2 32 75 65 51 8 03 . 0 = M t n i .++ .

]j [ V & ( a c o r T ) ] 1 + j [ V < ]j [ V ( fi j . ]001[ V tni ( troSelbbuB diov . 1 . ) ] 1 + j [ V & . .1 . 0 = i ( r o f i j tni . { ) N tni .0 = j ( rof ) ++ { ) + +i .N < j .Solução : Procedimentos e Funções 9 } } .N < i .

” a s a c “ = ] 0 1 [r o t e v r a h c ’0\‘ .)” :emon ues moc ertnE“(ftnirp . . ” s % “ (f n a c s .ft nirp f n a c s s% ’t\‘ ’n\‘ .Cadeias de Caracteres Problema : Escreva um programa em linguagem C que lê uma palavra da entrada e imprime o número de caracteres desta palavra. Dúvida : Cadeias de Caracteres Quando parar de ler os caracteres da palavra? Cadeias de Caracteres Definição : Cadeias de caracteres (Strings) são seqüências de letras. utilizamos funções e s % ortem ârap o moc adazil itu od nauq .: para :. números ou símbolos onde o último caracter é o caracter (da mesma família do . ... Como usar : Cadeias de Caracteres Par ler ou para imprimir na tela uma cadeia de como parâmetro das caracteres. ). Ex. )r o t e v . ” s % : h e e m o n u e s O “ ( f t n i r p . ] 0 1 [r o t e v r a h c 1 rah c Na linguagem C utilizamos vetores do tipo armazenar cadeias de caracteres. )r o t e v .xE .fnacs A função lê todos os caracteres até encontrar um caracter igual a espaço ou fim de linha.

oidts i rotev 0 n 0 ftnirp ftnirp fnacs 0 n i n i > – Retorna o números de caracteres da cadeia de caracteres. = . ” o r r a c “ (p m c r t s 0 = = )” a s a c “ . nruter .: 1 .++ )'0\' =! ]++ [ ( elihw . = .) .: 2 .“ a s a c “ (p m c r t s ’0\‘ 4 = = )" a s a c “ ( n e l r t s pmcrts • nelrts • } .) " :arvalap a moc ertnE"( .h): – Compara caracter a caracter duas cadeias e retorna o resultado dessa comparação. Ex. "d% he seretcarac ed oremun O"( .“ a s a c “ (p m c r t s 1 = = ) ” o r r a c “ .= = )" a s a c “ . Ex. Cadeias de Caracteres Solução : Cadeias de Caracteres Funções Importantes (string. .] [ rahc { )( nia m tni < edulcni# n rotev 00 1 rotev h. tni . sem contar o . " s % "( .Cadeias de Caracteres Pergunta : Qual o tamanho do menor vetor que devemos declarar para armazenar uma cadeia de caracteres com 10 letras? Exercício : Cadeias de Caracteres Escreva um programa em linguagem C que lê uma palavra da entrada e imprime o número de caracteres desta palavra.) .

Cadeias de Caracteres 3 .: Cadeias de Caracteres Funções Importantes (string. P.r o t e v ( y p c r t s tacrts • Copia uma string para dentro de outra. r o t e v (t a c r t s . ) ” + a v u “ .Cadeias de Caracteres Pergunta : Qual o valor é retornado na chamada da seguinte função: Cadeias de Caracteres Funções Importantes (string.: Ex. ) r o t e v .: arara 1. Ex.“asaC“(pmcrts .r o t e v ( y p c r t s – ypcrts • ipmcrts • ? == )”orrac“ . 2 r o t e v (y p c r t s . a primeira string recebe o seu conteúdo seguido do conteúdo da segunda string.h): – Compara caracter a caracter duas cadeias ignorando se as letras são maiúsculas ou minúsculas.” o r R a c “ ( i p m c r t s 0 = = )” a S A c “ . e retorna o resultado dessa comparação.: Uma palavra é dita ser palíndrome se a seqüência de seus caracteres da esquerda para a direita é igual a seqüência de seus caracteres da direita para a esquerda.s. Ex. e retorna 1 se esta cadeia é uma palíndrome e zero caso contrário.h): – Concatena duas strings. ) ” o r r a c “ .= = )" A s a c “ .“ a s a C “( i p m c r t s . r o t e v (t a c r t s . ) ” + a n a n a b “ . Ex.: Exercício : Escreva uma função em linguagem C que recebe uma cadeia de caracteres de tamanho máximo 100. ) " a r e p “ . “ a s a C “ ( i p m c r t s 1 = = )” o r r a c “ .

s % . a (p m c r t s ( fi { )]0 5[c r a h c . a .1 nruter ) 0 = = ) x u a . e as imprime na tela em ordem alfabética. c . a (p m c r t s ( fi { esle . Exercício : Cadeias de Caracteres 4 } } . a. s % .} } .i t n i . b. s % . " s % . ) a . n < i . a . " s % . s % .’ 0 \ ‘ = ] n [ x u a . s % " ( f t n i r p esle . c . s % " ( f t n i r p ) 0 > ) c . b. b ( p m c r t s (fi { esle . a. ) b .] 1 .]0 5[a r a h c( medro diov . b . ) a . " s % . c. ]0 5[b r a h c . s % . n . c ( p m c r t s (fi { esle } Cadeias de Caracteres } . ] 0 0 1 [x u a r a h c { )]0 0 1[ arvalap r a h c( emordnilap tni Solução : Solução : Cadeias de Caracteres Cadeias de Caracteres continua no próximo slide Continuação : Escreva um procedimento em linguagem C que recebe 3 cadeia de caracteres de tamanho máximo 50.a r v a l a p (p m c r t s ( fi . " s % . s % " ( f t n i r p ) 0 > ) c . s % . ) c.i – n[ arvalap = ] i[x u a ) + +i . s % " ( f t n i r p ) 0 > ) c . s % " ( f t n i r p esle . b ( p m c r t s (fi { ) 0 > ) b . 0 = i ( r o f . s % " ( f t n i r p ) 0 > ) a . " s % .0 nruter esle . c. " s % . b . ) c. ) b .) arv alap( nelrts = n .

Cadeias de Caracteres Problema : Escreva um programa em linguagem C que lê uma palavra da entrada e imprime o número de caracteres desta palavra. .

Cadeias de Caracteres Dúvida : Quando parar de ler os caracteres da palavra? .

: char vetor[10] = “casa”. . ).. números ou símbolos onde o último caracter é o caracter ‘\0’ (da mesma família do ‘\n’. ‘\t’ ..Cadeias de Caracteres Definição : Cadeias de caracteres (Strings) são seqüências de letras. Ex. Na linguagem C utilizamos vetores do tipo char para armazenar cadeias de caracteres.

Cadeias de Caracteres Como usar : Par ler ou para imprimir na tela uma cadeia de caracteres. scanf(“%s”. printf(“O seu nome eh: %s”.: char vetor[10]. quando utilizada com o parâmetro %s lê todos os caracteres até encontrar um caracter igual a espaço ou fim de linha. printf(“Entre com seu nome: ”). A função scanf. . utilizamos %s como parâmetro das funções scanf e printf. vetor). vetor). Ex.

Cadeias de Caracteres Pergunta : Qual o tamanho do menor vetor que devemos declarar para armazenar uma cadeia de caracteres com 10 letras? .

.Cadeias de Caracteres Exercício : Escreva um programa em linguagem C que lê uma palavra da entrada e imprime o número de caracteres desta palavra.

printf("Entre com a palavra: ").Cadeias de Caracteres Solução : #include <stdio. } . n). printf("O numero de caracteres eh %d". return 0. n = 0. i = 0. n. scanf("%s". vetor).h> int main() { char vetor[100]. int i. while(vetor[i++] != '\0') n++.

“casa”) == 0 strcmp(“carro”.: strcmp(“casa“. Ex.: strlen(“casa") == 4 strcmp– Compara caracter a caracter duas cadeias e retorna o resultado dessa comparação.Cadeias de Caracteres Funções Importantes (string. “carro”) == 1 strcmp(“casa“. Ex. “casa") == -1 • . sem contar o ‘\0’.h): • strlen – Retorna o números de caracteres da cadeia de caracteres.

Cadeias de Caracteres Pergunta : Qual o valor é retornado na chamada da seguinte função: strcmp(“Casa“. “carro”) == ? .

“casA") == -1 strcpy – Copia uma string para dentro de outra. “carro”) == 1 strcmpi(“Casa“.Cadeias de Caracteres Funções Importantes (string.: strcpy(vetor. strcpy(vetor2. “carro”). • .h): • strcmpi – Compara caracter a caracter duas cadeias ignorando se as letras são maiúsculas ou minúsculas. Ex.: strcmpi(“Casa“. e retorna o resultado dessa comparação. Ex. vetor). “cASa”) == 0 strcmpi(“caRro”.

strcat(vetor. “banana + ”).Cadeias de Caracteres Funções Importantes (string. “pera"). strcat(vetor.h): • strcat – Concatena duas strings. . “uva + ”).: strcpy(vetor. a primeira string recebe o seu conteúdo seguido do conteúdo da segunda string. Ex.

Ex. e retorna 1 se esta cadeia é uma palíndrome e zero caso contrário.: arara .: Uma palavra é dita ser palíndrome se a seqüência de seus caracteres da esquerda para a direita é igual a seqüência de seus caracteres da direita para a esquerda. P.Cadeias de Caracteres Exercício : Escreva uma função em linguagem C que recebe uma cadeia de caracteres de tamanho máximo 100.s.

} . i < n. aux[n] = ‘\0’. aux) == 0 ) return 1. i++ ) aux[i] = palavra[n – i .1]. n. int i. if( strcmp(palavra. else return 0.Cadeias de Caracteres Solução : int palindrome(char palavra[100]) { char aux[100]. n = strlen(palavra). for( i = 0.

.Cadeias de Caracteres Exercício : Escreva um procedimento em linguagem C que recebe 3 cadeia de caracteres de tamanho máximo 50. e as imprime na tela em ordem alfabética.

%s". else printf("%s. else { if( strcmp(a.%s. c) > 0 ) printf("%s.b).%s".c.Cadeias de Caracteres Solução : void ordem(char a[50]. char b[50].%s".c). c) > 0 ) printf("%s. a. b) > 0 ) { if(strcmp(b.%s. a. } continua no próximo slide .b). c. char c[50]) { if( strcmp(a.b.a.%s.

c) > 0 ) printf("%s.a). a) > 0 ) printf("%s.c). else { if(strcmp(b. else printf("%s.%s. c. b.%s".b. b. } } } .Cadeias de Caracteres Continuação : } else { if(strcmp(c.a.%s".%s".%s.%s.a).c.

Exercícios Exercício: Diga qual será a saída do programa a seguir. .

printf ("a = %d\n". a). a). printf ("a = %d\n". return 0.Exercícios #include <stdio. } . f(a). a). } int main() { int a. a = 1.h> void f(int a) { a = 2. printf ("a = %d\n".

Exercícios Exercício: E qual a saída deste programa? .

printf ("a = %d\n". f(&a). } int main() { int a.Exercícios #include <stdio. a = 1. return 0. printf ("a = %d\n". printf ("a = %d\n". } . a). *a). a).h> void f(int *a) { *a = 2.

a função também recebe um valor inteiro X. A sua função deve retornar a soma de todos os elementos da matriz na linha X. recebe também dois números inteiros N e M que indicam respectivamente o número de linhas e de colunas da matriz.Exercícios Exercício: Escreva uma função em linguagem C que recebe uma matriz de números inteiros com no máximo 50 linhas e 50 colunas. .

j++) soma += Matriz[X][j]. int X) { int soma. } . j. int N. for (j = 0. int M. j < N. return soma. soma = 0.Exercícios int somaLinha(int Matriz[50][50].

Exercícios Exercício: Considere o vetor com 11 elementos abaixo e diga quantas comparações de igualdade realizam os algoritmos de Busca Linear e Busca Binária. na tentativa de se encontrar no vetor os valores: a) 3 b) 25 c) 70 1 2 7 15 23 56 57 58 70 72 78 .

int S[100]). int N). Como saída. . BubleSort (int V[100]. int* B).Exercícios Exercício: Utilizando (não precisa implementar) as funções e procedimentos vistos em aula. SelectionSort(int V[100]. int * N). Troca(int* A. Você pode utilizar se achar necessário os seguintes procedimentos: LeVetor (int V[100]. ImprimeVetor (int V[100]. int N. int S[100]). InsertionSort(int V[100]. Escreva um programa em linguagem C que solicita a usuário um vetor com no máximo 50 números inteiros maiores que zero. int N. int N). seu programa deve imprimir o vetor em ordem crescente e decrescente.

printf (“Entre com o vetor").Exercícios #include <stdio. &n). ImprimeVetor(v. BubbleSort(v. i < (n/2). i. } . ImprimeVetor(v. n. i++) Troca(&v[i]. for( i = 0. n). n). n). return 0. printf (“A saida eh:\n"). LeVetor(v. &v[n-1-i]).h> int main() { int v[100].

cada string deve aparecer apenas uma vez no vetor. . Seu programa deve remover do vetor qualquer string duplicada. ou seja.Exercícios Exercício: Escreva um procedimento em linguagem C. que recebe um vetor de strings. e um inteiro por referência indicando o número de strings no vetor. int* N). O procedimento deve ter a seguinte assinatura: RemoveDup(char* Vetor[100].

Vetor[j]) == 0 ) { strcpy(Vetor[j].Exercícios #include <sting. int* N) { int i. j. j--. i++) for( j = i + 1. j < *N. (*N)--. i < n.1]). } } . j++) if( strcmp(Vetor[i]. Vetor[(*N) .h> RemoveDup(char* Vetor[100]. for( i = 0.

)1X – 2X( * )1X – 2X( = XD taolf { )2Y taolf .1Y .1Y .1X taolf(aicnatsiD taolf >h.3X taolf .)2Y .3X .2Y taolf .htam<edulcni# 1 .2X .2X taolf .3Y .1X(aicnatsiD = 1D taolf .2X .)2Y .1X(aicnatsiD = 2D taolf . Utilize a função abaixo.2X taolf .3D nruter .)3Y .1Y taolf .Registros Exercício : Escreva uma função em C que recebe as coordenadas de 3 pontos no plano e retorna a maior distância entre eles. Solução : Registros Registros Problema : E se os pontos estivessem no espaço? E se você precisasse calcular a maior distância entre N pontos? Definição : )3Y taolf .1Y taolf .1X taolf(tsiDroiaM taolf Registros são tipos de variáveis definidos pelo programador que agrupam outros tipos de dados numa só estrutura.1D nruter ) 3D > 1D && 2D > 1D ( fi Registros } { } . .2D nruter ) 3D > 2D && 3D > 2D ( fi .3X(aicnatsiD = 3D taolf . Chamamos cada item de um registro de membro.)1Y – 2Y( * )1Y – 2Y( = YD taolf .)YD + XD(trqs nruter .

Y taolf . Y. que armazene as coordenadas de um ponto no espaço. .Registros Em C : Como usar : . Y são seus membros.Y taolf .} { Registros 2 .} { D2otnoP tcurts fedepyt . Solução : D3otnoP tcurts fedepyt .2 p . 1 p * 2 = Y.X taolf . 1 p . ] 0 0 1 [s o t n o p D 2 o t n o P .Z taolf . 0 = Y. 0 = X. 1 + X.X taolf . 1 p = X. 2 p . 2 p . Demos ao tipo desse Registro o nome de Ponto2D e X.1p D2otnoP Registros Registros Exercício : Defina um tipo Registro chamado Ponto3D. ] 0 [s o t n o p No exemplo acima criamos um Registro para armazenar as informações de um ponto no plano. 0 = X. 1 p .

xua taolf . e a quantidade de pontos no vetor N e retorna a maior distância entre P e qualquer ponto de V. 2 P( = Z D t a o l f .1Y taolf .N < i . Exercício : Exercício : Registros Registros Solução : Registros Registros 3 .1X taolf(aicnatsiD taolf Reescreva a função Distancia abaixo utilizando o tipo Ponto3D definido no exercício anterior para que a mesma calcule a distância entre dois pontos no espaço.]001[V D3otnoP .)1X – 2X( * )1X – 2X( = XD taolf { )2Y taolf . ) Z . ) Z D + Y D + X D (t r q s n r u t e r .P(aicnatsiD = roiam .)1Y – 2Y( * )1Y – 2Y( = YD taolf . um vetor de pontos no espaço V. } . 1 P – X . 1 P – X .P D3otnoP(aicnatsiDroiaM taolf Solução : } .2X taolf . 2 P( * ) Y . 1 P – Y .} .2P( * ) Z . 2 P ( = X D t a o l f { ) 2 P D 3 o t n o P .roiam nruter } . Utilize as estruturas e funções dos exercícios anteriores.xua = roiam ) xua < roiam ( fi .1 = i (rof . ) Y . ) X .i tni { )N tni .)YD + XD(trqs nruter . 2 P( * ) X .)]i[V .)]0[V . 1 P D 3 o t n o P (a i c n a t s i D t a o l f Escreva uma função em C que recebe um ponto no espaço P. 1 P – Y . 1 P – Z . 2 P ( = Y D t a o l f . 1 P – Z.P(aicnatsiD = xua { )++i .

otnemicsaN ataD .aiD tni .oxeS rahc .ogidoC tni 4 etneicaP tcurts fedepyt .seM tni .]05[emoN rahc .]05[emonerboS rahc .eduaSonalP tni . 0 = Y > -r t p .Registros Exercício : Defina um tipo Registro para armazenar os dados de um paciente de um convênio médico.1P D3otnoP . Ex.} ’>-‘ { .1P & = rtp .onA tni .: ’.r t p * D 3 o t n o P . 0 = X > -r t p . O registro deve armazenar pelo menos: • • • • • • • Código Nome Sobrenome Data nascimento Tipo sanguíneo Sexo Tipo de plano de saúde Solução : Registros Registros Detalhe : Quando você tem um ponteiro para uma estrutura (registro) ao invés de utilizarmos utilizamos para acessar o membros.} { ataD tcurts fedepyt .]4[eugnaS rahc .‘ .

Utilize a função abaixo. float X2.Registros Exercício : Escreva uma função em C que recebe as coordenadas de 3 pontos no plano e retorna a maior distância entre eles. #include<math.h> float Distancia(float X1. } . float Y1. float Y2) { float DX = (X2 – X1) * (X2 – X1). float DY = (Y2 – Y1) * (Y2 – Y1). return sqrt(DX + DY).

float Y3) { float D1 = Distancia(X1. float X2. Y2). X3. float D3 = Distancia(X3. float Y1. float X3. X2. if ( D1 > D2 && D1 > D3 ) return D1. return D3. if ( D2 > D3 && D2 > D3 ) return D2. float Y2. Y3).Registros Solução : float MaiorDist(float X1. X2. Y1. float D2 = Distancia(X1. Y1. } . Y2). Y3.

Registros Problema : E se os pontos estivessem no espaço? E se você precisasse calcular a maior distância entre N pontos? .

Chamamos cada item de um registro de membro.Registros Definição : Registros são tipos de variáveis definidos pelo programador que agrupam outros tipos de dados numa só estrutura. .

. }. No exemplo acima criamos um Registro para armazenar as informações de um ponto no plano. Y são seus membros. float Y. Demos ao tipo desse Registro o nome de Ponto2D e X.Registros Em C : typedef struct Ponto2D { float X.

p2.X + 1.X = p1.Y = 2 * p1.X = 0. p1.Y = 0. p1.Registros Como usar : Ponto2D p1.X = 0. p2. . p2. pontos[0]. Ponto2D pontos[100].Y.

Registros Exercício : Defina um tipo Registro chamado Ponto3D. . que armazene as coordenadas de um ponto no espaço.

float Y. .Registros Solução : typedef struct Ponto3D { float X. }. float Z.

Registros Exercício : Reescreva a função Distancia abaixo utilizando o tipo Ponto3D definido no exercício anterior para que a mesma calcule a distância entre dois pontos no espaço. float Y2) { float DX = (X2 – X1) * (X2 – X1). float X2. return sqrt(DX + DY). } . float Distancia(float X1. float DY = (Y2 – Y1) * (Y2 – Y1). float Y1.

X) * (P2. return sqrt(DX + DY + DZ). Ponto3D P2) { float DX = (P2.Z) * (P2.Z – P1. } .Z). float DY = (P2.Y) * (P2.X – P1. float DZ = (P2.Y – P1.X – P1.Y).Registros Solução : float Distancia(Ponto3D P1.Y – P1.Z – P1.X).

e a quantidade de pontos no vetor N e retorna a maior distância entre P e qualquer ponto de V. um vetor de pontos no espaço V. Utilize as estruturas e funções dos exercícios anteriores.Registros Exercício : Escreva uma função em C que recebe um ponto no espaço P. .

V[i]). for( i = 1. float aux. } . if ( maior < aux ) maior = aux. maior = Distancia(P. i < N. } return maior.Registros Solução : float MaiorDistancia(Ponto3D P. i++) { aux = Distancia(P. int N) { int i. Ponto3D V[100]. V[0]).

Registros Exercício : Defina um tipo Registro para armazenar os dados de um paciente de um convênio médico. O registro deve armazenar pelo menos: • • • • • • • Código Nome Sobrenome Data nascimento Tipo sanguíneo Sexo Tipo de plano de saúde .

char Sangue[4]. . char Sobrenome[50]. char Nome[50]. int PlanoSaude. }. }. int Ano. Data Nascimento. char Sexo. typedef struct Paciente { int Codigo.Registros Solução : typedef struct Data { int Dia. int Mes.

ptr->Y = 0.Registros Detalhe : Quando você tem um ponteiro para uma estrutura (registro) ao invés de utilizarmos ‘.’ utilizamos ‘->’ para acessar o membros. Ex. ptr->X = 0. Ponto3D *ptr. ptr = &P1.: Ponto3D P1. .

.Arquivos Problema : Como manter persistentes os dados utilizados e/ou gerados por um programa de computador ? Solução : Armazenar os dados de entrada em arquivos.

• . Arquivos Binários: Os dados são gravados na forma binária (do mesmo modo que estão na memória).: Um número inteiro de 32 bits com 8 dígitos ocupará 64 bits no arquivo.Arquivos Tipos de Arquivo : • Arquivos de Texto: Os dados são gravados como caracteres de 8 bits. Ex. Ex.: Um número inteiro de 32 bits com 8 dígitos ocupará 32 bits no arquivo.

32891319.A+ .Arquivos Exemplos : Os dois trechos de arquivo abaixo possuem os mesmo dados : • • Arquivo Binário: Renato ÌÌÌÌÌ·áõ A+ Ì Arquivo Texto: Renato.

Arquivos Modos de abertura de Arquivo : Existem 3 modos de se abrir um arquivo: • • • Leitura Escrita Edição .

Arquivos Abrindo e fechando arquivos em C : Um arquivo em C é representado pelo tipo FILE*.: FILE* arquivo = fopen(“nome. Ex. .txt”. “wb”). fclose(arquivo). Quando queremos abrir um arquivo utilizamos a função fopen e para fechá-lo usamos a função fclose.

Ex.c”. se o arquivo não existir dá erro. – “r” : Leitura.c” Modo de abertura: Determina como o arquivo deve ser aberto. – “a” : Edição. os principais são: – “w” : Escrita.: “lab11. . A função fopen retornará um ponteiro para o arquivo ou 0 (zero) caso ocorra algum problema na abertura. se o arquivo existir cria um novo. se o arquivo não existir dá erro. “c:/temp/lab1.Arquivos A função fopen: A função fopen recebe duas strings como parâmetros: • • Nome do Arquivo: Caminho relativo do arquivo.

Arquivos A função fclose: A função fclose recebe o ponteiro do arquivo a ser fechado.txt”. .: A string “wb” indica que queremos abrir um arquivo binário para escrita.: FILE* arquivo = fopen(“nome. fclose(arquivo). Obs. Sempre que quisermos abrir um arquivo binário acrescentamos o caracter b na string do modo de abertura. “wb”). Ex.

fprintf : Idêntica ao printf.Arquivos Lendo e escrevendo em Arquivos Texto : Para ler ou escrever em um Arquivo Texto. só que recebe o ponteiro para o arquivo como primeiro parâmetro. utilizamos as funções. . fscanf e fprintf: • • fscanf : Idêntica ao scanf. Importante: fscanf deve ser usado apenas com arquivos abertos para leitura e fprintf com arquivos abertos para escrita. só que recebe o ponteiro para o arquivo como primeiro parâmetro.

txt”. *escrita. leitura = fopen(“leitura. if( leitura == 0 ) { printf(“Nao abriu o leitura.txt”).h> int main() { char texto[100]. “r”). return 0. FILE *leitura. } escrita = fopen(“escrita. } to be continued .txt”. if( escrita == 0 ) { printf(“Nao abriu o escrita.txt”). “w”). return 0.Arquivos Exemplo: include<stdio.

Arquivos fscanf(leitura. fprintf(escrita. “%s”. } return 0. fclose(leitura). texto). “%s”. . fclose(escrita). texto).

Em seguida o seu programa deve gravar esses dados num arquivo texto chamado “dados.txt”. .Arquivos Exercício : Escreva um programa em C que solicita ao usuário o nome(string). telefone(inteiro) e tipo sanguíneo(string).

telefone(inteiro) e tipo sanguíneo(string).Arquivos Exercício : Escreva um programa em C que lê de um arquivo chamado “dados.txt” e imprime na tela os seguintes dados do usuário: nome(string). .

utilizamos sizeof para descobrir o tamanho.Arquivos Lendo e escrevendo em Arquivos Binários : Arquivos binários nos permitem ler e escrever estruturas ou mesmo vetores de estruturas de uma vez. • Arquivo: Ponteiro para o arquivo. . Utilizamos as funções. Ambas recebem os mesmos parâmetros: • Ponteiro: Um ponteiro para estrutura (ou vetor) que será lido ou escrito no arquivo. • Quantidade: Número de estruturas (maior que 1 quando for vetor). fread e fwrite. • Tamanho: Inteiro que indica o tamanho da estrutura.

Arquivos
Exemplo: int val; fread(&val, sizeof(int), 1, leitura); fwrite(&val, sizeof(int), 1, escrita); int vetor[100]; fread(vetor, sizeof(int), 100, leitura); fwrite(vetor, sizeof(int), 100, escrita);

Arquivos
Exercício : Escreva um programa em C que solicita ao usuário o número de pacientes e os seguintes dados para cada paciente nome(string), telefone(inteiro) e tipo sanguíneo(string). Em seguida o seu programa deve gravar o número de pacientes e na seqüência os dados de todos os pacientes num arquivo binário chamado “dadosbin.txt”.

Arquivos
Exercício : Escreva um programa em C que lê de um arquivo chamado “dadosbin.txt” o número de pacientes e em seguida os seus dados e imprime na tela os mesmos.

Arquivos
Problema : Como manter persistentes os dados utilizados e/ou gerados por um programa de computador ? Solução : Armazenar os dados de entrada em arquivos. • Tipos de Arquivo : •

Arquivos

Arquivos de Texto: Os dados são gravados como caracteres de 8 bits. Ex.: Um número inteiro de 32 bits com 8 dígitos ocupará 64 bits no arquivo. Arquivos Binários: Os dados são gravados na forma binária (do mesmo modo que estão na memória). Ex.: Um número inteiro de 32 bits com 8 dígitos ocupará 32 bits no arquivo.

Arquivos
Exemplos : Os dois trechos de arquivo abaixo possuem os mesmo dados :
Modos de abertura de Arquivo :

Arquivos

Existem 3 modos de se abrir um arquivo: • • • Leitura Escrita Edição

+A,91319823,otaneR A Ì +A

õá·ÌÌÌÌÌ otaneR :oirániB oviuqrA
rquivo Texto:

• •

1

Arquivos

Arquivos

Nome do Arquivo: Caminho relativo do , arquivo. Ex.:

Arquivos

ftnirp

ftnirpf

indica que queremos abrir um arquivo binário para escrita. Sempre que quisermos abrir um arquivo binário acrescentamos o caracter b na string do modo de abertura.

: Idêntica ao , só que recebe o ponteiro para o arquivo como primeiro parâmetro. : Idêntica ao , só que recebe o ponteiro para o arquivo como primeiro parâmetro.

fnacs

:ftnirpf

fnacsf

fnacsf

; )ovi u qra(esolcf ; ) ” b w “ ,” t x t . e m o n “ ( n e p o f = o v i u q r a * E L I F

” b w “ gnirts A :.sbO

eso lcf

A função fechado. Ex.:

eso lcf

A função

:

Lendo e escrevendo em Arquivos Texto : Para ler ou escrever em um Arquivo Texto, utilizamos as funções, e

recebe o ponteiro do arquivo a ser

”c.1bal/pmet/:c“ ”c.11bal“

Modo de abertura: Determina como o arquivo deve ser aberto, os principais são: : Escrita, se o arquivo existir cria um novo. : Leitura, se o arquivo não existir dá

nepof

Um arquivo em C é representado pelo tipo FILE*. Quando queremos abrir um arquivo utilizamos a função fopen e para fechá-lo usamos a função fclose. Ex.:

A função parâmetros:

nepof

Abrindo e fechando arquivos em C :

A função

:

recebe duas strings como

”w“ ”r“

;)oviuqra(esolcf ;)”bw“ ,”txt.emon“(nepof = oviuqra *ELIF

Arquivos

2

arutiel“( nepof = arutiel .sodad“ } { . )a r u t i e l (e s o l c f .sodad“ ”txt. ) 0 = = a t i r c s e (fi . a r u t i e l * E L I F .”s%“ .) ” w “ .0 nruter . ) o t x e t . ”t xt . telefone(inteiro) e tipo sanguíneo(string). Exercício : Arquivos Arquivos 3 ”txt. at i r c s e * . a t i r c s e o u i r b a o a N “( ftnirp } .) ” t x t .)”r“ . a r u t i e l o u i r b a o a N “( ftnirp { ) 0 = = a r u t i e l (fi . telefone(inteiro) e tipo sanguíneo(string). Em seguida o seu programa deve gravar esses dados num arquivo texto chamado .0 nruter .oidt s < e d u l c n i Exemplo: Exercício : Arquivos Arquivos Escreva um programa em C que lê de um arquivo chamado e imprime na tela os seguintes dados do usuário: nome(string).] 00 1[ otxet rahc { )( niam tni > h.atircse“( nepof = atircse } .)otxet . ”tx t.deunitnoc eb ot .0 nruter . atircs e(f tnirpf . ” s % “ . a r u t i e l (f n a c s f Escreva um programa em C que solicita ao usuário o nome(string).)” t x t . ) atircs e(esolcf .

0 0 1 . utilizamos sizeof para descobrir o tamanho. • Quantidade: Número de estruturas (maior que 1 quando for vetor).Arquivos Lendo e escrevendo em Arquivos Binários : Arquivos binários nos permitem ler e escrever estruturas ou mesmo vetores de estruturas de uma vez. ) a r u t i e l .r o t e v ( e t i r w f . 0 0 1 . ) t n i ( f o e z i s . l a v & (d a e r f Arquivos 4 . ) t n i ( f o e z i s . ”txt. • Arquivo: Ponteiro para o arquivo.nibsodad“ Exercício : Escreva um programa em C que lê de um arquivo chamado o número de pacientes e em seguida os seus dados e imprime na tela os mesmos.r o t e v ( d a e r f .nibsodad“ . e Ambas recebem os mesmos parâmetros: • Ponteiro: Um ponteiro para estrutura (ou vetor) que será lido ou escrito no arquivo. ”txt. ) a t i r c s e . 1 . ] 0 0 1 [r o t e v t n i . 1 . ) a t i r c s e .l a v t n i Arquivos Exercício : Escreva um programa em C que solicita ao usuário o número de pacientes e os seguintes dados para cada paciente nome(string). ) t n i ( f o e z i s . Em seguida o seu programa deve gravar o número de pacientes e na seqüência os dados de todos os pacientes num arquivo binário chamado . • Tamanho: Inteiro que indica o tamanho da estrutura. Utilizamos as funções. ) t ni( f o e zi s . . ) a r u t i e l . e ti r w f daerf Arquivos Exemplo: .l a v & ( e t i r w f . telefone(inteiro) e tipo sanguíneo(string).

1 = i (r o f .Recursividade Exercício : Escreve uma função que recebe como parâmetro um inteiro positivo N e retorna a soma de todos os números inteiros entre 0 e N.i t n i N tni( oirotamoS tni N tni( oirotamoS tni .. Solução: ) Recursividade Recursividade Exercício : Refaça o exercício anterior.i = + p s e r i N = < i . 1 nruter . e lihw od .. mas desta vez não utilize nenhum tipo de laço ( . 0 = pser . .rof Solução: ) . ) pser nruter 1 = = N (fi esle { } { } Recursividade 1 .) ) 1 – N(oirotamoS + N( nruter ) ++ .). etc.e lihw .

resolução mais simples e conhecida. Dois tipos: • • Direta Indireta Recursividade Exemplo Numérico : ) Recursividade Exemplo Numérico : Para N == 4. temos: .1 + 2 nruter . 1 nruter ) 1 = = N (fi esle } { 2 . 6 + 4 nruter .” Recursão : Recursividade É o processo de resolução de um problema. 3 + 3 nruter .1 nru ter 1 = = N 2 == N 3 == N 4 == N .)) 1 – N(oirotamoS + N( nruter N tni(oirotamoS tni .Recursividade Definição : “Uma função ou procedimento é dito recursivo ( ou apresenta recursividade ) se for definido em termos de si próprio. reduzindo-o em um ou mais sub-problemas com as seguintes características: • • idênticos ao problema original.

+ +t n o c 01 / N = N . N tni(lairotaF tni { Reescreva a função abaixo tornando-a recursiva: Exercício : Exercício : Recursividade Recursividade Solução: Solução: Recursividade Recursividade 3 } . .1 nruter 0 1 < ) N (s b a (fi { { ) N t n i ( s o ti gi D t n i ) N tni( sotigiD tni .) ) 0 1 / N (s o ti g i D + 1 ( n r u t e r esle ) { )9 > ) N ( sba ( elihw 1 = tnoc tni . tnoc nruter } } .) ) 1 – N( lairotaF * N( nruter esle .} . . 1 nruter ) 1 = = N (fi ) Escreva uma função recursiva que recebe como parâmetro um inteiro N maior que zero e retorna o valor do fatorial de N.

: N pode ser negativo. X t a o l f(a i c n e t o P t a o l f Solução: Escreva uma função recursiva que recebe como parâmetros um número real X e um inteiro N e retorna o valor de XN.1 nruter 0 = = N (fi { N t n i .esle ) .) N (s b a . X(a i c n e t o P * X( n r u t e r esle ) .)) 1 .N .) ) 1 . Recursividade Recursividade 4 } } . ) Exercício : Obs. X (a i c n e t o P * X ( / 1 n r u t e r 0 < N (fi { .

Recursividade Exercício : Escreve uma função que recebe como parâmetro um inteiro positivo N e retorna a soma de todos os números inteiros entre 0 e N. .

resp = 0.Recursividade Solução: int Somatorio(int N) { int i. for( i = 1. } . return resp. i <= N. i++ ) resp += i.

etc.. mas desta vez não utilize nenhum tipo de laço (for.Recursividade Exercício : Refaça o exercício anterior.. do while.). . while.

} .Recursividade Solução: int Somatorio(int N) { if( N == 1 ) return 1. else return (N + Somatorio(N – 1)).

Recursividade Definição : “Uma função ou procedimento é dito recursivo ( ou apresenta recursividade ) se for definido em termos de si próprio.” .

resolução mais simples e conhecida.Recursividade Recursão : É o processo de resolução de um problema. Dois tipos: • • Direta Indireta . reduzindo-o em um ou mais sub-problemas com as seguintes características: • • idênticos ao problema original.

else return (N + Somatorio(N – 1)).Recursividade Exemplo Numérico : int Somatorio(int N) { if( N == 1 ) return 1. } .

.Recursividade Exemplo Numérico : Para N == 4. return 4 + 6. temos: N == 4 N == 3 N == 2 N == 1 return 1. return 3 + 3. return 2 + 1.

.Recursividade Exercício : Escreva uma função recursiva que recebe como parâmetro um inteiro N maior que zero e retorna o valor do fatorial de N.

Recursividade Solução: int Fatorial(int N) { if( N == 1 ) return 1. else return (N * Fatorial(N – 1)). } .

} . while( abs( N ) > 9) { N = N / 10. } return cont.Recursividade Exercício : Reescreva a função abaixo tornando-a recursiva: int Digitos( int N ) { int cont = 1. cont++.

Recursividade Solução: int Digitos(int N) { if( abs( N ) < 10 ) return 1. else return (1 + Digitos(N / 10)). } .

Recursividade Exercício : Escreva uma função recursiva que recebe como parâmetros um número real X e um inteiro N e retorna o valor de XN. . Obs.: N pode ser negativo.

1)). else return (X * Potencia(X. abs(N) . } } . int N) { if( N == 0 ) return 1. else { if( N < 0 ) return 1 / (X * Potencia(X. N .Recursividade Solução: float Potencia(float X.1)).

B nruter } { { } 1 . esses cálculos serão repetidos para cada chamada. cada chamada recursiva é independente uma da outra. • Gasto de memória excessivo: Cada chamada recursiva aloca memória para as variáveis locais e para os parâmetros.) 2 . 1 = B .2 = i ( rof . pm et = A .n nruter ) 1 = < n ( fi pm et .n (i c c a n o b i F n r u t e r n tni ( iccanobiF tni . sendo que na forma iterativa isso ocorre apenas uma vez.0 = A tni . ) ++ i . n nruter 1 = < n ( fi ) esle { } .Recursividade Exercício : Reescreva a função abaixo tornando-a recursiva: ) Recursividade Solução: Recursividade Problema : Para o problema anterior qual das duas soluções era mais eficiente? Quando não usar Recursão: Recursividade • Repetição do processamento: Em geral. Caso ocorram os mesmos cálculos para duas chamadas recursivas independentes. A =+ B ) n tni ( iccanobiF tni . B = pmet .n = < i . i .n ( i c c a n o b i F + ) 1 . .

{ . ] + + Ai [ A = ]i [ C ) B n = = Bi ( f i e s l e .o i e m . ) x .} ) ] . Bi + Ai < i .r o t e v ( n i B a c s u B n r u t e r ) ] o i e m [r o t e v < x ( f i e s l e . 0 = Ai . ] 0 1 [ B t n i . )rid < qse( e l i h w 2 / )rid + qse ( = oiem . ] 0 1 [ A t n i ( a l a c r e t n I d i o v { . ] 0 0 1 [r o t e v t n i ( n i B a c s u B t n i Busca Binária: ) Intercalação: Recursividade Recursividade 78 Ordenação por Intercalação (Merge Sort): 78 78 2 2 78 2 72 72 2 72 72 1 1 1 1 57 57 57 56 57 56 Recursividade Recursividade 56 23 56 12 23 23 23 12 12 12 2 } } .kaerb ) ] o i e m [ V = = X ( fi { .1 nruter o i e m [ V = = X ( fi } . x = = ] o i e m [r o t e v n r u t e r ) q s e = < r i d (fi 2 / ) ri d + q s e ( = o i e m t n i .r o t e v ( n i B a c s u B n r u t e r ) ] o i e m [r o t e v > x ( f i e s l e .oiem = rid . ) x .]++ Bi [ B = ] i [ C esle . q s e . B n t ni . q s e t n i .0 nruter . 1 . 1 nrut er esle . )] 0 1 [ C t n i . A n t n i . 1 + o i e m . 2 / )rid + qse ( = oiem 1 . esle . ] + + Ai [ A = ]i [ C ) ] Bi [ B < ] Ai [ A ( f i e s l e . r i d . 0 = i ( r o f 0 = Bi .1 + oiem = qse oiem[ V > X ( fi esle ) ] . 1 .N = rid . r i d t n i .]++Bi[B = ]i[C A n = = Ai ( fi ) { ) + +i .i t n i . 0 = qse x t n i .

o i e m . ) o i e m .Merge Sort: Recursividade http://freeweb. v( t r o S e g r e M . v ( a l a c r e t n I .1 + o i e m . ) mif .htm?p Recursividade 3 } } . oici ni t n i .com/nessunoforever/flash/hanoi/index. { ) mif < o i c i n i ( fi oi em tni . ) m if .supereva. oicini . { ) mi f t ni . oici n i . ] 0 1 [ v tn i ( troSegreM tni . v ( t r o S e g r e M 2 / ) mi f + o i c i n i ( = o i e m .

B += A. i. i++) { temp = B. temp. if ( n <= 1) return n. . i <= n. } return B. B = 1. } A = temp. for ( i = 2.Recursividade Exercício : Reescreva a função abaixo tornando-a recursiva: int Fibonacci ( int n ) { int A = 0.

else return Fibonacci(n .1) + Fibonacci(n .2).Recursividade Solução: int Fibonacci( int n ) { if ( n <= 1) return n. } .

Recursividade Problema : Para o problema anterior qual das duas soluções era mais eficiente? .

sendo que na forma iterativa isso ocorre apenas uma vez. Caso ocorram os mesmos cálculos para duas chamadas recursivas independentes. esses cálculos serão repetidos para cada chamada. cada chamada recursiva é independente uma da outra.Recursividade Quando não usar Recursão: • Repetição do processamento: Em geral. . • Gasto de memória excessivo: Cada chamada recursiva aloca memória para as variáveis locais e para os parâmetros.

Recursividade Busca Binária: esq = 0.1. } if ( X == V[meio] ) return 1. else if ( X > V[meio] ) esq = meio + 1. meio = (esq + dir) / 2. dir = N . else dir = meio . . meio = (esq + dir) / 2. while (esq < dir) { if ( X == V[meio] ) break. return 0.1.

meio .Recursividade int BuscaBin(int vetor[100]. else if( x > vetor[meio] ) return BuscaBin(vetor.1. meio + 1. int dir. int x) { int meio = (esq + dir) / 2. } . else if( x < vetor[meio] ) return BuscaBin(vetor. x). int esq. esq. else return 1. dir. x). if( dir <= esq ) return vetor[meio] == x.

Recursividade Intercalação: void Intercala(int A[10]. iA = 0. int C[10]) { int i. i < iA + iB. int nA. int nB. for(i = 0. else if( A[iA] < B[iB] ) C[i] = A[iA++]. else if( iB == nB ) C[i] = A[iA++]. iB = 0. } } . int B[10]. else C[i] = B[iB++]. i++) { if( iA == nA ) C[i] = B[iB++].

Recursividade Ordenação por Intercalação (Merge Sort): 78 78 78 78 2 2 2 2 72 72 72 72 1 1 1 1 57 56 57 57 23 56 56 56 12 23 12 23 23 12 12 57 .

meio + 1. if ( inicio < fim ) { meio = (inicio + fim ) / 2. meio. fim ). int inicio. meio ). inicio. MergeSort (v. int fim ) { int meio. MergeSort (v. inicio. } } . Intercala (v.Recursividade Merge Sort: int MergeSort ( int v[10]. fim ).

com/nessunoforever/flash/hanoi/index.supereva.htm?p .Recursividade http://freeweb.

Alocação Dinâmica Problema : Como evitar o desperdício de memória quando alocamos vetores? Como criar um vetor do tamanho que será necessário ao usuário? Como devolver ao sistema regiões de memória que não são mais necessárias? Quem somos? De onde viemos? Para onde vamos? .

.Alocação Dinâmica Solução: 1. 3. 2. Determinar o quanto de memória será necessário. Devolver ao sistema a região de memória após o seu uso. Solicitar ao sistema a quantidade necessária de memória.

Alocação Dinâmica Função malloc: <ponteiro> = malloc ( <tamanho em bytes> ). • • . • Recebe como parâmetro o número de bytes necessários (tamanho da memória). Retorna um ponteiro para a região de memória alocada dinamicamente pelo sistema. Se o sistema não conseguir alocar uma região com o tamanho especificado (por falta de espaço) a função malloc retorna zero.

• • . A mesma região de memória só pode ser desalocada uma vez. Apenas regiões de memória alocadas com malloc podem ser desalocadas com free.Alocação Dinâmica Função free: free ( <ponteiro para região de memória> ). • Recebe como parâmetro o ponteiro para região de memória alocada dinamicamente e devolve a região alocada ao sistema.

. scanf(“%d”. n.h> #include<stdio. if( vetor == 0 ) { printf(“Erro: Memoria insuficiente”). vetor = malloc(n * (sizeof(int))). return -1. &n). } else ..h> int main() { int *vetor. printf(“Entre com o tamanho do vetor: ”).Alocação Dinâmica #include<stdlib..

s.: O programa não deve limitar o tamanho do vetor.s.s.s.: Apesar de não ser necessário utilize um vetor. P.: Após ser utilizada a memória deve ser devolvida. P.Alocação Dinâmica Exercício : Escreva um programa em linguagem C que solicita ao usuário um vetor de notas (números reais) e imprime a média aritmética das notas. . P. P.: Não deve ocorrer desperdício de memória.

P.: O programa não deve limitar o número de alunos. P.s.: Não deve ocorrer desperdício de memória.: Após ser utilizada a memória deve ser devolvida.s.s. P. .Alocação Dinâmica Exercício : Escreva um programa em linguagem C que solicita ao usuário o RA (inteiro) e a média final (real) de todos os seus alunos e imprime todos os alunos que estão de exame.: Utilize um vetor de registros (estruturas) para armazenar os dados dos alunos. P.s.

Solicite ao usuário o número de elementos da lista e crie a mesma preenchendo o campo val com a posição do elemento na lista. . typedef struct Elemento { int val. }Elemento.Alocação Dinâmica Exercício : Escreva um programa em linguagem C que utiliza a estrutura abaixo para criar lista. Numa lista o campo prox recebe o endereço do próximo elemento da lista. struct Elemento* prox. Depois imprima a lista.

Devolver ao sistema a região de memória após o seu uso.) >airómem ed oãiger arap orietnop< ( eerf 1 . Determinar o quanto de memória será necessário.) >setyb me ohnamat< ( collam = >orietnop< . Apenas regiões de memória alocadas com malloc podem ser desalocadas com free. Solicitar ao sistema a quantidade necessária de memória.Alocação Dinâmica Problema : Como evitar o desperdício de memória quando alocamos vetores? Como criar um vetor do tamanho que será necessário ao usuário? Como devolver ao sistema regiões de memória que não são mais necessárias? Quem somos? De onde viemos? Para onde vamos? Solução: Alocação Dinâmica 1. • • • • . Retorna um ponteiro para a região de memória alocada dinamicamente pelo sistema. • Recebe como parâmetro o ponteiro para região de memória alocada dinamicamente e devolve a região alocada ao sistema. 2. A mesma região de memória só pode ser desalocada uma vez. Se o sistema não conseguir alocar uma região com o tamanho especificado (por falta de espaço) a função malloc retorna zero . Alocação Dinâmica Função malloc : Função free: Alocação Dinâmica • Recebe como parâmetro o número de bytes necessários (tamanho da memória). 3.

s.1. P.: Não deve ocorrer desperdício de memória.s.: Após ser utilizada a memória deve ser devolvida.rotev* tni { )(niam tni >h. P.xorp *otnemelE tcurts . P.)n& .nruter .: Não deve ocorrer desperdício de memória.oidts<edulcni# >h. Alocação Dinâmica Exercício : Escreva um programa em linguagem C que utiliza a estrutura abaixo para criar lista.: O programa não deve limitar o número de alunos.. Numa lista o campo prox recebe o endereço do próximo elemento da lista.n .s.)” :rotev od ohnamat o moc ertnE“(ftnirp .lav tni { otnemelE tcurts fedepyt .)))tni(foezis( * n(collam = rotev .)”etneicifusni airomeM :orrE“(ftnirp { ) 0 == rotev (fi .s.: Apesar de não ser necessário utilize um vetor.: O programa não deve limitar o tamanho do vetor..: Após ser utilizada a memória deve ser devolvida.Alocação Dinâmica Exercício : Alocação Dinâmica Escreva um programa em linguagem C que solicita ao usuário o RA (inteiro) e a média final (real) de todos os seus alunos e imprime todos os alunos que estão de exame.s. P.s. P.s. .”d%“(fnacs . P. P. P. 2 .s. esle } .bildts<edulcni# Alocação Dinâmica Exercício : Escreva um programa em linguagem C que solicita ao usuário um vetor de notas (números reais) e imprime a média aritmética das notas. Depois imprima a lista.otnemelE} .: Utilize um vetor de registros (estruturas) para armazenar os dados dos alunos. Solicite ao usuário o número de elementos da lista e crie a mesma preenchendo o campo val com a posição do elemento na lista.

.Exercícios Exercício: Diga qual será a saída do programa a seguir.

Exercícios #include <stdio. else { f(a – 1). } . printf (“. b = 4. return 0. b). b). f(a. a).h> void f(int a. %d". } } int main() { int a = 12. int b) { if( a <= b ) printf (“%d".

.Exercícios Exercício: Escreva uma função recursiva em linguagem C que recebe como parâmetros dois inteiros X. Y (onde X é sempre menor que Y) e retorna a soma de todos os valores entre X e Y (incluindo X e Y).

Exercícios int Somatorio(int X. int Y) { if( Y <= X ) return X. else return Y + Somatorio(Y – 1). } .

Seu programa deve solicitar ao usuário o nome do arquivo texto a ser lido e deve utilizar alocação dinâmica.5 2. Arquivo de entrada: 3 1. e que os valores consecutivos são os seus valores. Ex.5 4.5 4. Considere que a primeira informação do arquivo é o valor que indica o tamanho dos vetores.Exercícios Exercício: Escreva um programa em Linguagem C que lê dois vetores de números reais de um arquivo texto e informa ao usuário se os vetores lidos são iguais.7 1.5 2.7 .

cujo nome é informado pelo usuário: • Utilize registros para resolver este exercício. idade) e grava estas informações em um arquivo texto. • A seguir. os dados de cada paciente devem ser gravados em uma linha do arquivo. • A primeira informação a ser gravada no arquivo deve ser o número de pacientes.Exercícios Exercício: Escreva um programa em linguagem C que solicita ao usuário dados de alguns pacientes (nome. . separados por espaços. peso. sobrenome.

• O nome do arquivo deve ser solicitado ao usuário • Utilize registros e alocação dinâmica para resolver este exercício • Lembre-se de que a primeira informação do arquivo é o número de pacientes. idade). sobrenome.Exercícios Exercício: Escreva um programa em linguagem C que lê de um arquivo texto os dados de alguns pacientes (nome. . calcula o peso médio destes pacientes e imprime os nomes completos daqueles pacientes que estiverem acima da média. peso.

Sign up to vote on this title
UsefulNot useful