Você está na página 1de 36

Semana 1

Material baseado em Gersting, J. Fundamentos matemticos para a cincia da computao. 5. ed. Rio de Janeiro: LTC, 2004. Contedo da Semana - Apresentao do contedo da disciplina e critrios de avaliao - Lgica; Lgica de programao Objetivo Instrucional Ao final desta semana o aluno dever ser capaz de: Reconhecer e trabalhar com os smbolos formais que so usados nas lgicas proposicional e de predicados Achar o valor-verdade de uma expresso na lgica proposicional Usar a lgica de predicados para representar sentenas da Lngua Portuguesa Lgica est relacionada ao pensamento racional e ordenado. Na Filosofia ela se preocupa em estudar porque pensamos do jeito que pensamos. Como arte ou tcnica ela nos induz a usar corretamente as leis do pensamento. a arte do bem pensar. Silogismos: Todo homem mortal. Scrates homem. Portanto, Scrates mortal. A exemplo de qualquer outra cincia, a Computao depende da Matemtica para obter um vocabulrio preciso, uma notao poderosa, abstraes teis e um raciocnio rigoroso. O objetivo da Lgica Computacional (e de Programao) melhorar nosso entendimento da linguagem, das ferramentas e dos processos de raciocnio da Matemtica que so usados na Computao. A Lgica Formal delineia o mtodo organizado e cuidadoso de pensar que caracteriza qualquer investigao cientfica ou qualquer outra atividade de raciocnio. Geralmente nos expressamos, em Portugus, atravs de interrogaes e exclamaes, mas, para comunicar fatos ou informaes, usamos sentenas. Tecnicamente, uma sentena (ou proposio) uma frase que pode ser apenas verdadeira ou falsa. Considere o seguinte: a. Dez menor do que sete. b. Como vai voc? c. Ela muito talentosa. d. Existem formas de vida em outros planetas do universo. A frase (a) uma sentena porque falsa. Como o item (b) uma pergunta, no pode ser considerado nem verdadeiro nem falso. No tem valor-verdade e, portanto, no uma sentena. Na frase (c) a palavra ela uma varivel e a frase no verdadeira nem falsa, pois ela no est especificada; portanto, (c) no uma sentena. A frase (d) uma sentena porque verdadeira ou falsa; independentemente de sermos capazes de decidir qual dos dois.

Conectivos e Valores-Verdade Para enriquecermos nossas conversas no nos limitamos ao uso de simples sentenas. Ao contrrio, as combinamos com o uso de conectivos a fim de criarmos sentenas compostas, cujo valor-verdade depende dos valores-verdade de cada sentena que o compe e dos conectivos usados. Um conectivo comum a palavra "e". Se combinarmos as duas sentenas verdadeiras "elefantes so grandes" e "bolas so redondas" devemos considerar a sentena resultante "elefantes so grandes e bolas so redondas" como verdadeira. Na lgica, usamos o smbolo "^" para denotar o conectivo lgico "e" e letras maisculas para denotar as sentenas (ao que chamaremos de smbolos proposicionais). Valores-verdade so atribudos aos smbolos proposicionais. Concordamos, ento, que se A e B so verdadeiras, A ^ B (leia-se "A e B") deve ser considerada verdadeira. A expresso A ^ B chamada a conjuno de A e B; e A e B so chamados os fatores da expresso. Podemos resumir os efeitos das conjunes atravs do uso da tabela-verdade apresentada a seguir. Em cada linha da tabela-verdade os valores-verdade so atribudos aos smbolos proposicionais e o valor-verdade resultante da composio da expresso , ento, mostrado.

A B A^B -----------V V V V F F F V F F F F ----------Outro conectivo a palavra "ou", denotada pelo smbolo "v". A expresso A v B (leia-se "A ou B") chamada disjuno de A e B e Ae B so chamados de parcelas da expresso. Se A e B forem ambos verdadeiros, A v B dever ser considerada verdadeira, nos dando a primeira linha da tabela-verdade para a disjuno. A B AvB -----------V V V V F V F V V F F F ----------As sentenas podem ainda ser combinadas na forma "se sentena 1, ento sentena 2". Se A denota a sentena 1 e B denota a sentena 2, a sentena composta deve ser denotada por A B (leia-se "A implica B"). O conectivo lgico aqui a implicao e indica que a verdade de A implica ou leva verdade de B. Existem outras maneiras de expressar A B na linguagem quotidiana, tal como "A condio suficiente para B", "A somente se B", "B conseqncia de A". Na expresso A B, A constitui a sentena antecedente e B a sentena conseqente.

Exemplo: A sentena "Fogo uma condio necessria para fumaa" pode ser reformulada como "Se h fumaa, ento h fogo". O antecedente "h fumaa", e o conseqente "h fogo". A B AB -------------V V V V F F F V V F F V -------------A tabela-verdade para a implicao menos bvia do que para a conjuno e disjuno. Para compreendermos sua definio, vamos supor que seu colega de quarto diga "Se eu me formar nesta primavera, vou tirar frias na Flrida." Se ele, de fato, se formar na primavera e tirar suas frias na Flrida, a sentena foi verdadeira. Se A e B forem ambas verdadeiras, consideraremos a implicao A B verdadeira. Se o seu colega se formar e no tirar as frias na Flrida, seu comentrio consistiu em uma sentena falsa. Quando A verdadeira e B falsa, consideramos A B falsa. Suponhamos agora que seu colega no se formou. Independentemente de ele tirar ou no frias na Flrida, no poderemos acus-lo de ter formulado uma sentena falsa e lhe daremos o benefcio da dvida. Por conveno, aceitamos A B como verdadeira se A for falsa, independentemente do valor-verdade de B. Outro exemplo: "Se amanh fizer Sol, ento eu vou praia". Chegou o dia de amanh, fez Sol e eu estou na praia. A sentena verdadeira. Ou seja, antecedente V e conseqncia V, a sentena verdadeira. Imaginem que deu Sol e eu no fui praia. Eu menti. A sentena falsa. Ou seja, antecedente verdadeiro e conseqncia falsa, a sentena falsa. Agora, faamos o seguinte: e se choveu e mesmo assim eu fui praia? Eu menti? No! Reparem que, fazendo Sol, eu disse que eu obrigatoriamente iria praia (sol praia). No entanto, podem existir outros motivos, alm de fazer Sol, que me motivem a ir praia. Ou seja, chover tambm poderia ser um dos motivos que me levariam a ir praia. Ou no. Se choveu e eu no fui praia, tal sentena tambm seria verdadeira, pois eu no entrei em contradio em relao frase original. Ou seja, antecedente falso e conseqncia verdadeira, sentena verdadeira. E antecedente falso e conseqncia falsa, sentena verdadeira. Normalmente, as proposies so representadas por letras minsculas (p, q, r, e outras). p: 2 um nmero primo (V) Como poderamos negar esta afirmao? ~ p: 2 no um nmero primo (F)

O smbolo da negao , portanto, "~". A tabela-verdade da negao : A ~A -------V F F V --------

O ltimo tipo a Implicao Bicondicional (representada por ""), cuja tabelaverdade : A B AB -------------V V V V F F F V F F F V -------------Note que o bicondicional p q precisamente verdadeira quando ambas as implicaes p q e q p so verdadeiras, por causa disto, a terminologia "p se e somente se q" usada para este bicondicional. Exemplo: Consideremos p uma declarao: voc pode tomar o vo se e somente se voc comprar um bilhete. Esta declarao verdadeira apenas se p e q so ambos verdadeiros ou ambos falsos.

Semana 2
Contedo da Semana - Paradigmas de Linguagens de Programao - Lgica de programao. Exerccios - Representao de algoritmos. Tipos primitivos. Constantes. Variveis. Paradigmas de Linguagens de Programao As Primeiras Geraes de Linguagens Linguagem de Mquina - (1.a Gerao) Linguagem de Montagem (Assembly) - (2.a Gerao) Paradigma Estruturado (3.a Gerao) Ada (DoD, EUA - sistemas de tempo real) C: Dennis Ritchie (incio da dcada de 1970) FORTRAN: FORmula TRANslation (cientfica, 1957)

Pascal (Wirth, 1971): recursos modernos, como nfase em tipos e estruturas de dados BASIC COBOL (comercial) Paradigma Orientado a Objetos C++ (Bjarne Stroustrup, Bell Labs) Java: Sun Microsystems (incio da dcada de 1990) SmallTalk (Alan Kay) C# (Microsoft, .NET Framework) Paradigma Declarativo (4.a Gerao): Inteligncia Artificial

Lgica de Programao Existem 3 tipos de lgica de nosso interesse: a Linear, a Estruturada e a Modular (funes e sub-rotinas). Os conectivos lgicos E, OU e NO (ou, mais comumente, seus equivalentes em ingls AND, OR e NOT) so oferecidos pela maioria das linguagens de programao. Esses conectivos, de acordo com as tabelas-verdade que definimos, agem sobre combinaes de expresses verdadeiras e falsas a fim de produzir um valorverdade final. Desses valores provm a capacidade de tomada de deciso fundamental ao controle do fluxo de programas de computadores. Desta forma, em um desvio condicional de um programa, se o valor-verdade de uma determinada expresso for verdade, o programa ir executar um trecho de seu cdigo; se o valor for falsidade, o programa executa, em seguida, outro trecho de seu cdigo. Se a expresso condicional for substituda por uma expresso mais simples equivalente, o valor-verdade da expresso e, portanto, o controle do fluxo do programa, no sero afetados, mas o novo cdigo torna-se mais simples de ser entendido e poder ser executado mais rapidamente. Algoritmos
Begin at the beginning, ... and go till you come to the end: then stop. -- Lewis Carroll

Os algoritmos constituem o corao da Cincia da Computao. A principal tarefa ao se escrever um programa para computador consiste em arquitetar um algoritmo (procedimento) para produzir a soluo. Algoritmo um procedimento para resolver um problema em termos de aes a serem executadas e a ordem na qual estas aes so conduzidsa. Os algoritmos so normalmente descritos em uma forma intermediria entre uma descrio puramente verbal na forma de pargrafos e um programa de computador (que, se executado, iria realizar os passos do algoritmo) escrito em uma linguagem de programao. Esta forma intermediria para descrio de algoritmos chamada de pseudocdigo. Um algoritmo escrito em pseudocdigo no deve ser difcil de entender, mesmo que voc no saiba nada a respeito de programao de computadores.

Exemplo de Pseudocdigo: Se a nota do aluno for maior ou igual a 6.0 Escreva "Aprovado"

Passos para a construo de um algoritmo: a) Identificar o problema; b) Identificar os dados a serem dornecidos; c) Identificar as sadas de dados que devem ser obtidas (soluo); d) Determinar que transformaes devem ser feitas pelo algoritmo para transformar entradas em sadas (processamento); e) Construir o algoritmo com o diagrama de blocos (ou fluxograma); f) Testar a soluo.

Os algoritmos podem, tambm, ser representados de forma grfica, atravs de smbolos padronizados (fluxogramas ou diagramas de blocos)

Simbologia para Diagramas de Blocos:

Exemplo de Algoritmo Clculo da Mdia das Notas de um Aluno

Entradas: notas bimestrais Sada: mdia aritmtica Processamento: soma das notas dividida pelo nmero de notas

Exerccios 1) Construa um algoritmo que calcule as razes de uma equao do 2.o grau (ax + bx + c), sendo que os valores de a, b e c so fornecidos pelo usurio. 2) Construa um algoritmo que calcule o valor do comprimento da circunferncia, a partir do valor fornecido do raio.

Semana

Estruturas de controle do fluxo de programao. Tipos primitivos. Variveis. Constantes. Operadores aritmticos. Operadores relacionais. Prioridades de execuo. Exerccios Estruturas de Controle do Fluxo de Programao So trs os recursos de controle do fluxo de um programa de computador: o sequencial, a deciso (ou condicional, ou de seleo), e a repetio. Com estes trs recursos poderemos representar qualquer algoritmo, e resolver qualquer problema passvel de algoritmizao.

Tipos

Primitivos

(Linguagem

C)

A manipulao de informao pelo computador feita atravs de quatro tipos primitivos, usados na construo de algoritmos e posterior codificao:

Inteiro: informao numrica do conjunto dos nmeros inteiros. Real: conjunto dos nmeros reais. Caracter: caracteres alfanumricos > (0...9) + (a...z) + (caracteres especiais, como #, $, %, @, etc). Variveis So locais de memria onde um valor pode ser armazenado para uso por um programa. Toda varivel deve ter atributos do tipo nome, tipo, tamanho e valor. - Inicializao: importante! Constantes No podem ter seu valor modificado (constante) Operadores Aritmticos Adio (+) Subtrao (-) Multiplicao (*) Diviso (/) Potenciao - pow(x,y) Radiciao - sqrt(x) Resto da diviso (%): 9%4 resulta em 1 Quociente de diviso inteira (/): 9/4 resulta em 2 Incremento (++) Decremento (--) Operadores Pr e Ps-Fixados: Exemplo: peras = 4; frutas = --peras; /* frutas = 3 e peras = 3 */ frutas = peras--; /* frutas = 4 e peras = 3 */ Operadores Relacionais Utilizados para a comparao entre dois valores de mesmo tipo primitivo. == < > >= <= != Prioridade de Execuo Precedncia maior para menor: 1) 2) 3) 4) parnteses mais internos pow sqrt */% +-

Semana 4
Operadores lgicos. Comando de atribuio. Comandos de entrada/sada.

Operadores Lgicos Uso de relaes, variveis ou constantes do tipo lgico. not (negao): ! and (conjuno): && or (disjuno): || Comando de Atribuio Atribui varivel o valor fornecido direita da expresso. Exemplo: x = 4; Podemos usar ainda: +=, -=, *=, /= Exemplo: x += y o mesmo que x = x + y Comandos de Entrada e Sada Receber dados do teclado (entrada padro): scanf() Mostrar dados na tela (sada padro): printf()

Semana 5
Programao Estruturada

Como visto anteriormente, qualquer programa de computador pode ser escrito com o uso de apenas trs tipos de estruturas de controle do fluxo de programao: sequencial, deciso (ou seleo) e repetio. A utilizao destas estruturas deve seguir algumas regras com o objetivo de evitar cdigo confuso e sem controle sistemtico. A este conjunto de regras chamamos Programao Estruturada. Regras da Programao Estruturada: 1) Comece com o diagrama de blocos simples (incio - ao - fim);

2) Qualquer retngulo de ao pode ser substitudo por dois retngulos em sequncia - regra de empilhamento; 3) Qualquer retngulo de ao pode ser substitudo por qualquer outro controle (sequncia, condicional, repetio) - regra de aninhamento;

4) As regras 2 e 3 podem ser aplicadas de acordo com o desejo do analista, e em qualquer ordem.

Representaes em Diagramas de Blocos dos Componentes da Programao Estruturada 1) Sequncia

2) Deciso (ou Seleo) a) Simples

b) Composta

c) Mltipla

3) Repetio a) Com teste no incio

b) Com teste no fim

c) Com varivel de controle

Exerccios sobre Estruturas de Controle de Fluxo de Programao. 1) Escrever o algoritmo de resoluo da Equao de 2.o Grau. 2) Construa um algoritmo que calcule o salrio lquido de um funcionrio. O programa recebe atravs do teclado o salrio bruto de um determinado funcionrio, caso este seja inferior a R$ 300,00 descontado 5% em impostos, se o salrio variar de R$ 300,00 at 1.200,00 descontado 10% em impostos, se esse for

superior a R$ 1.200,00 descontado 15% em impostos. Ao final, o programa deve exibir o salrio lquido do funcionrio. 3) Faa um algoritmo que l trs valores reais e informa se estes podem ou no formar os lados de um tringulo, e qual tipo de tringulo seria: Eqiltero,Issceles ou Escaleno.

Semana 6
1 avaliao Estrutura Geral de Programas em Linguagem C Processo 1) 2) 3) 4) de Desenvolvimento de Programas Edio Compilao Linkedio Execuo

O compilador verifica o cdigo e a sintaxe; se ok, ele cria um arquivo intermedirio '.OBJ'. A partir do '.OBJ' o linkeditor cria um arquivo executvel (OBJ + LIB = EXE). ** Ateno para a configurao das variveis de ambiente ('LIB=' > bibliotecas; 'INCLUDE=' > header files > '.h')

Tipos de Erro em Programao a) Erro Lgico: o programa no d o resultado esperado b) Erro de Sintaxe: regras da linguagem violadas Palavras Reservadas da Linguagem C A linguagem C possui um total de 32 palavras reservadas, conforme definido pelo padro ANSI, que so: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

Primeiros Programas em Linguagem C


Um programa em Linguagem C uma lista de instrues que o computador pode executar (uma ou mais funes, sendo 'main' obrigatria - sempre inicia com ela). As funes tm um 'header' (nome da funo e lista de argumentos), bloco de instrues ({...}), instrues elementares terminadas com ';', e comentrios (// ou

/* Programa Exemplo

...

*/).

/* Programa-exemplo para programao em C */ #include <stdio.h> #include <stdlib.h> #include <string.h> main() { printf("Alo mundo!\n"); system("pause"); } A funo system () executa comando interno do sistema operacional (ou .exe, .com, .bat). O pr-processador e suas diretivas (#include) examinam o cdigo e inserem o que for necessrio no programa original. Os arquivos .h so chamados de arquivos de incluso ou de cabealho (header files). < > insere na pasta "include". " " insere na pasta atual. Exerccios de Programao

1. Escreva um programa que recebe um nmero qualquer e mostra o seu dobro. 2. Dadas as medidas de uma sala, informe sua rea. 3. Dado um valor em Real e a cotao do Dlar, converta esse valor para Dlares.

Semana 7
Estruturas de controle: estruturas de seleo simples e composta. Exerccios. Seleo Simples Para testar uma condio antes de executar um ao.

if (condio) {comandos}; if (mdia >= 6) { printf("Bom aluno!"); }

Seleo Composta Quando duas alternativas dependem da mesma condio. if (condio) {comandos} else {outros comandos);

if (mdia >= 6) { printf("Aprovado"); } else { printf("Reprovado"); }

/* Equacao do 2.o Grau */ #include<stdio.h> #include<stdlib.h> #include<math.h> main () { float a, b, c, delta, x1, x2; printf ("\t\tResolucao da Equacao do Segundo Grau"); printf ("\n\n\nInforme o valor de a: "); scanf ("%f", &a); printf ("Informe o valor de b: "); scanf ("%f", &b); printf ("Informe o valor de c: "); scanf ("%f", &c); delta=pow(b,2)-4*a*c; if (delta<0) { printf ("\nDelta e igual a %.2f", delta); printf ("\n\nDelta Negativo, impossivel calcular.\n\n"); } else { if(delta == 0) { printf("Raizes iguais! \n");} else {printf("Raizes diferentes! \n"); } x1=((-b)+sqrt(delta))/(2*a); x2=((-b)-sqrt(delta))/(2*a); printf ("\nx1=%.2f e x2=%.2f\n\n", x1, x2); } system ("pause"); }

Semana 8
Estruturas de controle: estruturas de seleo encadeada (homognea e heterognea) e mltipla escolha. Seleo Encadeada Agrupamento de vrias selees, pois existe um nmero maior de possibilidades de ao. a) Seleo Encadeada Heterognea Estruturas de seleo no seguem um padro lgico. if (condio1) {

if (condio2) {comando1;} } else {if (condio3) {comando2;} else {if (condio4) {comando3;} else {comando2;}

}
b) Seleo Encadeada Homognea Estruturas de seleo seguem um padro lgico. Se ento se if (condio1) { if (condio2) { if (condio3) { comando; } } }

Se seno se

if (x=y) {comando1;} else if (x=z) {comando2;} else if (x=w) {comando3;} Encadeamentos homogneos podem ser simplificados numa estrutura de seleo de mltipla escolha. c) Seleo de Mltipla Escolha Quando um conjunto de valores discretos precisa ser testado e aes diferentes so associadas a esses valores. switch (ch) { case '1': printf("Opo 1 foi selecionada"); break; case '2': printf("Opo 2 foi selecionada"); break; default:

printf("Nenhuma opo selecionada"); } /* Exemplo de Menu */ #include <stdio.h> #include <stdlib.h> main () { char ch; printf("MENU de Escolhas\n\n"); printf("1. Opcao a \n"); printf("2. Opcao b \n\n"); printf(" Entre com sua escolha: ch = getchar(); switch(ch) { case '1': printf(">> Opcao 1 foi selecionada\n\n"); break; case '2': printf(">> Opcao 2 foi selecionada\n\n"); break; default: printf(">> Nenhuma opo selecionada\n\n"); } system("pause"); } Exemplos de Programas /* Programa de adivinhaao */ #include <stdio.h> #include <stdlib.h> main() { int magic; /* nmero mgico */ int guess; /* palpite do usurio */ magic = rand(); /* gera nmero mgico */ printf("Adivinhe o numero magico: "); scanf("%d", &guess); if (guess == magic) { printf("** Certo! **"); printf(" %d eh o numero magico!\n", magic); }

\n\n");

else { printf("Errado!"); if (guess > magic) printf("Muito alto!\n"); else printf("Muito baixo!\n"); } system("pause"); } Exerccios 1. Numa papelaria, at 100 folhas, a cpia Xerox custa R$ 0,25 por folha, e acima de 100 folhas custa R$ 0,20 por folha. Dado o total de cpias, informe o total a ser pago. 2. Dada a idade de um nadador, informe sua categoria: infantil (at 10 anos), juvenil (at 17 anos), ou snior (acima de 17 anos). 3. Dados 3 nmeros distintos, exiba-os em ordem crescente.

Semana 9
Sequncias de Escape \n = nova linha \a = beep \b = backspace \f = form feed (avano de pgina) \r = return (enter) \t = tabulao horizontal \\ = barra invertida \' = aspas simples \" = aspas duplas \? = interrogao Especificadores de Formato %d = inteiro decimal %f = real (ponto flutuante) %o = inteiro octal %x = hexadecimal %c = caractere em formato ASCII %s = string de caracteres %p = valor ponteiro Especificadores de Comprimento e Preciso Exemplo: printf ("%6.2f", 285978.0012) mostrar 285978.00 Constantes Simblicas

#define PI 3.14159 #define EU "Renato" #define FALSE 0 Funes de Biblioteca cos(x) - math.h pow(x,y) - math.h (x^y) Tipos de Variveis caractere: char (texto ou inteiro de 1 byte, preciso de -128 a 127) inteiro: int (de -32.768 a 32.767) ponto flutuante: float (-2147483648 a 2147483647, ou 6-7 dgitos de preciso) Comandos de Entrada e Sada Single-character I/O (recebe apenas o primeiro caractere ou inteiro digitados) var = getchar(); putchar(var); String I/O char nome[30]; gets(nome); puts(nome); Formatted I/O printf("%c", var) para caractere scanf("%c", &var) para caractere printf("%s", var) para string scanf("%s", var) para string Exemplos: printf ("%s ... %d ...", "Venus", 67); printf ("%c", 'J'); printf ("%s %c", "Jota", '.'); Caracteres grficos: \xdd Exemplo: \xDC, \xC9, \xCD, \xBB

Semana 10
Estruturas de controle: Estruturas de repetio com teste no incio (enquanto). Exerccios. while(condio) comando; Conceitos a serem trabalhados:

- Contador e incremento - Acumulador - Critrio de parada Exemplo 1 Escrever 5 vezes a expresso "fatec" na sada padro. #include <stdio.h> #include <stdlib.h> main() { int cont=0; while (cont < 5) { printf("FATEC... \n"); cont++; } system("PAUSE"); } Exemplo 2 Escrever um programa que apresente uma contagem regressiva de 10 a 0. #include <stdio.h> #include <stdlib.h> main() { int cont=10; while (cont >= 0) { printf("%d \n", cont); cont--; } printf("10, 9, 8, 7 ... Ignition sequence start ... 6, 5, 4, 3, 2, 1, 0 \n ... All engines running... \n Liftoff! We have a liftoff! \n .\n ..\n ... \n .... \n ..... \n"); system("PAUSE"); } Exemplo 3 Escrever um programa que imprima na tela a tabuada do 5.

Para a tabuada de qualquer nmero:

Exemplo 4 Condio de sada com caractere. #include <stdio.h> #include <stdlib.h> #include <string.h> main() { int x; int cont=0; char letra;

while (letra=getchar() != 'q') { printf("FATEC... \n"); fflush(stdin); cont++; } printf("Parando ... \n"); printf("Repeticoes = %d. \n", cont); system("PAUSE"); } Exemplo 5 Condio de sada com caractere e acumulador. #include <stdio.h> #include <stdlib.h> #include <string.h> main() { int x; int cont=0; int total=0; char letra; while (letra=getchar() != 'q') { printf("Digite um numero: \n"); scanf("%d", &x); fflush(stdin); cont++; total = total + x; } printf("Parando ... \n"); printf("Repeticoes = %d e total = %d. \n", cont, total); system("PAUSE"); }

Exemplo 6

Repeties Encaixadas

Estruturas de repetio podem estar subordinadas umas s outras (encaixadas), para formar estruturas mais complexas. Vejamos o exemplo a seguir: Exemplo 7

#include <stdio.h> #include <stdlib.h> main() { int cont=1, i=1, j=1; printf("Digite o numero de ramos: \n"); scanf("%d", &cont); while (i<=cont) { j=1; while (j<=i) { printf("*"); j++; } printf("\n"); i++; } system("pause"); } Exemplo 8 Dado um nmero natural 'n', desenhe um quadrado 'n x n'.

Semana 11
Estruturas de controle: Estruturas de repetio com teste no final (faa ... enquanto). Exerccios. Estruturas de repetio com teste no final Executa um comando pelo menos uma vez antes do teste de condio. No se sabe quantas repeties acontecero. til para garantir consistncia da entrada de dados ou repetir um processo com confirmao do usurio.

do { comando; } while(condio); Como exemplo, podemos dar nova oportunidade para o usurio do programa da Equao do 2.o Grau, quando ele digitar o valor de 'a' igual a zero:

do { printf("Digite o valor de \'a\' : \n"); scanf("%f", &a); } while (a < 0); Exemplos -------#include <stdio.h> #include <stdlib.h> #include <string.h> main() { int x; int cont=0; int total=0; char letra; do { printf("Digite um numero: \n"); scanf("%d", &x); fflush(stdin); cont++; total = total + x; printf("Digite uma letra: \n"); } while (letra=getchar() != 'q'); printf("Parando ... \n"); printf("Repeticoes = %d e total = %d. \n", cont, total); system("PAUSE"); } -------#include <stdio.h> #include <stdlib.h> #include <string.h> main() { int x; int cont=0; int total=0; char letra; float media;

do { printf("Digite uma nota: \n"); scanf("%d", &x); fflush(stdin); cont++; total = total + x; printf("Digite uma letra qualquer ou \'q\' para encerrar: \n"); } while (letra=getchar() != 'q'); printf("Parando ... \n"); printf("Repeticoes = %d e total das notas = %d. \n", cont, total); media = total/cont; printf("Media da turma = %f. \n", media); system("PAUSE"); } -------#include <stdio.h> #include <stdlib.h> #include <string.h> main() { int cont=1; char senha; do { printf("Digite a senha: \n"); scanf("%c", &senha); fflush(stdin); cont++; if(senha=='f') { printf("Certa! \n"); break; } if(cont > 3) { printf("Senha incorreta - procure a agencia mais proxima. \n"); system("PAUSE"); exit(1); } } while (1); system("PAUSE"); } --------

/* Caixa Eletronico */ #include <stdio.h> #include <stdlib.h> main() { float s=1000.00, v; int op; do { printf("\n 1. Deposito"); printf("\n 2. Saque"); printf("\n 3. Saldo"); printf("\n 4. Sair"); printf("\n Opcao? "); scanf("%d", &op); switch(op) { case 1: printf("\n Valor do deposito? "); scanf("%f", &v); s=s+v; break; case 2: printf("\n Valor do saque? "); scanf("%f", &v); s=s-v; break; case 3: printf("\n Saldo atual = R$ %.2f \n", s); break; default: if(op!=4) printf("\n Opcao Invalida! \n"); } } while (op!=4); printf("Fim das transacoes. \n\n"); system("pause"); } Tabela ASCII

/* Gerando a Tabela ASCII */ # include <stdio.h> #include <stdlib.h> main() { int a=0; printf("Gerando Tabela ASCII ... \n\n"); do{ printf(" (%d, %c) \n", a,a); a++; }while(a<=255); system("pause"); }

Semana 12
2 avaliao Estruturas de controle: Estruturas de repetio com varivel de controle. Exerccios. Estruturas de repetio com varivel de controle for(inicializao; condio; incremento) comando;

Exemplo - testando uma senha no mximo 3 vezes: #include <stdio.h> #include <stdlib.h> #include <string.h> main() { char senha[20]; int x; for(x=1; x<=3; ++x) //repare a compactao de cdigo da Linguagem C { printf("Digite a senha: "); gets(senha); if (strcmp(senha, "passwd") == 0) { printf("OK! \n"); system("pause"); break; } else { printf("Tente novamente! \n");}

system("pause"); } } Outro exemplo - Maisculas e Minsculas #include #include #include #include <stdio.h> <stdlib.h> <string.h> <ctype.h>

main() { char min, mai; int cont; cont=0; for(cont=1; cont<=10; cont++ ){

min = getchar(); mai = toupper(min); putchar(mai); } system("pause"); }

Semana 13
Comandos de Desvio

return: retorno de uma funo goto: desvio para outro trecho do programa goto rtulo; ... rtulo:

break: termina um case num switch, ou fora o trmino imediato de um lao /* Break com "for" */ #include <stdio.h> #include <stdlib.h> main() { int x; for ( x = 1; x <= 10; x++ ) { if ( x == 5 ) { break; } printf( "%d ", x ); } printf( "\nSaiu do loop quando x == %d\n", x ); system ("pause"); }

exit(cdigo de retorno): para sair de um programa em execuo continue: fora a prxima iterao do lao, pulando o cdigo intermedirio /* Continue com "for" */ #include <stdio.h> #include <stdlib.h>

main() { int x; for ( x = 1; x <= 10; x++ ) { if ( x == 5 ) { continue; } printf( "%d ", x ); system ("pause"); } printf( "\nUsado o Continue para evitar o valor 5\n" ); system ("pause"); }

Semana 14
Repetio ou Iterao: while Exerccios: /* Mdia da Classe com repetio controlada por contador */ #include <stdio.h> #include <stdlib.h> main() { int contador; int nota; int total; int media; total = 0; contador = 1; while (contador <= 5) { printf ("Entre a nota: "); scanf ("%d", &nota); total = total + nota; contador = contador + 1; } media = total/5; /* Atenao: divisao inteira! */ printf( "A media da classe %d\n", media); system ("pause"); }

Repetio ou Iterao: do while

/* Exemplo de rand(): adivinhacao com repeticao */ #include <stdio.h> #include <stdlib.h> #include <time.h> main () { int iSecret, iGuess; /* inicializando semente randomica: */ srand ( time(NULL) ); /* gerando numero secreto: */ iSecret = rand() % 10 + 1; do { printf ("Adivinhe o numero (1 a 10): "); scanf ("%d",&iGuess); if (iSecret<iGuess) puts ("O numero secreto eh menor!"); else if (iSecret>iGuess) puts ("O numero secreto eh maior!"); } while (iSecret!=iGuess); puts ("Certo!!!"); system("pause"); }

Semana 15
Repetio ou Iterao: for for(x=1; x<=100; x++) printf("%d ", x); O for pode conter vrgulas: for(i=0, j=1; (i + j) < 100; i++, j++); printf ("%d", i + j); Pode ser usado com caracteres: for(ch='a'; ch <= 'z'; ch++); printf ("\n O valor ASCII de %c eh %d", ch, ch); Pode tambm usar funes em sua estrutura: for(ch=getch(); ch!= 'X'; ch=getch()); printf ("%c", ch + 1); Loop infinito: for( ; ; ); printf ("FATEC");

Exemplo #include <stdio.h> #include <stdlib.h> main () { int x; float z; for(x=100; x != 65; x=x-5) { z=x*x;

printf("O quadrado de %d eh %f \n", x, z); } system ("pause"); }

/* Calculo de juros compostos */ #include <stdio.h> #include <math.h> #include <stdlib.h> main() { float quantia; float principal = 1000.0; float taxa = 0.05; int ano; printf( "%4s%21s\n", "Ano", "Quantia em depsito" ); for ( ano = 1; ano <= 10; ano++ ) { quantia = principal * pow( 1.0 + taxa, ano ); printf( "%4d%21.2f\n", ano, quantia ); } system("pause"); }

Semana 16
3 avaliao

Exerccios
1) Escreva um programa de controle de senha que d 3 chances de acerto ao usurio; se ele no conseguir, avise que o carto foi bloqueado. 2) Use o comando continue num programa de diviso que respeite a restrio de diviso por zero. 3) Escrever um algoritmo que l 5 valores para a, um de cada vez, e conta quantos destes valores so negativos, escrevendo esta informao. 4) A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados sobre o salrio e nmero de filhos. A prefeitura deseja saber: a) mdia do salrio da populao; b) mdia do nmero de filhos;

c) maior salrio; d) percentual de pessoas com salrio at R$100,00. O final da leitura de dados se dar com a entrada de um salrio negativo. 5) Escreva um algoritmo que calcule a mdia dos nmeros digitados pelo usurio, se eles forem pares. Termine a leitura se o usurio digitar zero (0). 6) Escreva um programa que solicite ao usurio 3 nmeros inteiros a, b e c, em que a seja maior que 1. Seu programa deve somar todos os inteiros entre b e c que sejam divisveis por a. 7) Escreva um programa que leia 3 nmeros do teclado, e os imprima na tela na ordem inversa da entrada. 8) Escreva um programa que calcule a rea de vrios crculos de raio r, at que o usurio digite "n". 9) Escreva um programa que imprima na tela o caractere (ASCII) correspondente a determinado nemro decimal entre 50 e 75. 10) Escreva um programa que receba 10 nmeros inteiros do teclado e diga quantos so pares e quantos so mpares. 11) Escreva um programa que calcule a velocidade de queda de um corpo em funo do tempo, partindo da velocidade zero. 12 Escreva um programa que sorteie os nmeros necessrios para a Mega Sena. 13) Escreva um programa para calcular sua mdia final na disciplina de Programao I (as informaes esto no Plano de Ensino, no site da disciplina).

Você também pode gostar