Escolar Documentos
Profissional Documentos
Cultura Documentos
Tecnolgica - Maranho (IFET-MA) Departamento Acadmico de Informtica Curso Tcnico em Programao de Computadores
(com Linguagem C)
60 horas Prof. Msc. Gentil Cutrim Serra Jnior
gentil@cefet-ma.br Jun/2008
Algoritmos
EMENTA: Algoritmos, Tcnicas bsicas de programao, Tipos de dados e Instrues primitivas, Estruturas de seleo, Estruturas de repetio, Estruturas de dados homogneas, Aplicaes prticas do uso de vetores e matrizes, Estruturas de dados heterogneas, Programao Estruturada em Linguagem C, Utilizao de Subrotinas (Procedimentos e Funes).
OBJETIVOS: Apresentar aos alunos os conceitos bsicos de programao estruturada, levando-os a criar programas em uma linguagem de programao que manipulem tipos de dados homogneos e heterogneos. Mostrar o conceito de modularizao com passagem de parmetros.
Conceitos bsicos sobre algoritmos Fases da elaborao de um algoritmo Lgica de Programao Fluxograma Portugus Estruturado
Variveis, constantes e tipos de dados Operaes de entrada e sada de dados Uso do ponto e vrgula Operadores e expresses
IV - ESTRUTURAS DE REPETIO
Estrutura de um programa em C Tipos de dados Expresses Comandos de entrada e sada de dados Comandos de deciso Comandos de Repetio Matrizes Funes
Declarao de vetores/matrizes Operaes bsicas com vetores/matrizes Mtodos de pesquisa em vetores Classificao de elementos em vetores
Utilizao de sub-rotinas Procedimentos Escopo de variveis Parmetros Passagem de parmetros por valor e referncia Funes
Bibliografia
MANZANO, Jos, OLIVEIRA, Jayr. Algoritmos: Lgica para Desenvolvimento de Programao. So Paulo: RICA, 1996. SALIBA, Walter. Tcnicas de Programao. So Paulo: Makron Books, 1992. FERNANDES, Antnio, BOTINI, Joana. Construo de Algoritmos, Rio de Janeiro, SENAC Nacional, 1998. SCHILDT, Herbert. C Completo e Total. 3 Ed. So Paulo: Makron Books, 1995.
Introduo a Algoritmos
Unidade I
Conceitos Bsicos
Conceito de algoritmos
Algoritmo no computacional
Incio 1. Introduzir o carto; 2. Tirar o fone do gancho; 3. Ouvir o sinal de linha; 4. Teclar o nmero desejado; 5. Se ocupado 5.1 Colocar o telefone no gancho; 5.2 Ir para o passo 2; 6. Seno ocupado 6.1 Se atender 6.1.1 Conversar; 6.1.2 Colocar o fone no gancho; 6.1.3 Retirar o carto; 6.2 Seno atender 6.2.1 Colocar o fone no gancho; 6.2.2 Retirar o carto; Fim.
Algoritmos
Verificar existncia das ferramentas e estepe Folgar porcas com chave de rodas Colocar macaco Levantar carro at pneu sair do cho Retirar porcas com chave de rodas Retirar pneu Colocar estepe Colocar porcas apertando um pouco Abaixar carro Retirar macaco Apertar porcas Guardar ferramentas e pneu furado
Algoritmos
Conceitos de Fluxograma
Algoritmos
fim
Execuo
Exibio
Deciso
Fluxograma
Algoritmo Troca de Pneu em fluxograma Algoritmo Receita de Bolo em fluxograma Ferramenta Construtor
Algoritmos
Faa um algoritmo para receber dois nmeros, calcular e apresentar a multiplicao destes; Faa um algoritmo para realizar o clculo da mdia de duas notas de um aluno. Ao final, informe se o aluno foi ou no aprovado (se media>=7 ento aprovado, seno reprovado); Faa um algoritmo para receber dois nmeros informados pelo usurio e verificar se eles so iguais, se o primeiro maior ou menor em relao ao segundo; Faa um algoritmo para ler o preo e a quantidade de um produto e ento fornecer o total.
Algoritmos em Portugol
Algoritmos em uma pseudo-linguagem (Portugus Estruturado) "Portugol" derivado da aglutinao de Portugus + Algol (Algol o nome de uma linguagem de programao estruturada usada no final da dcada de 50) Algoritmos computacionais
seno
salario = salario * 1.40;
Construo de Algoritmos
Unidade II
Variveis
Locais da memria destinados a armazenar informaes temporrias Uma varivel possue: Nome Tipo de dados Contedo Endereo de memria
Variveis
Tipos de dados
Tipos de dados
Inteiro Admite somente nmeros inteiros Real Admite nmeros reais (com ou sem casas decimais) Literal/alfanumrico/texto/string Admite caracteres alfanumricos String (texto) Lgico Admite valor verdadeiro ou falso
Variveis
contedo
Nome
po Ti
de
do a
Variveis
350,697.45
ValorVenda
um n
co i
Variveis
V
Resp
ic g l
Variveis
li t
er al
Identificador
Nomes a Identificadores
Formado por uma combinao de caracteres alfanumricos Regras para criao de nomes de identificadores:
Comea por uma letra do alfabeto e o resto pode ser qualquer letra do alfabeto, ou qualquer dgito numrico ou um sublinhado (undescore) No usar palavras chaves da linguagem (se, entao, senao, inicio, fim, )
Nomes a Identificadores
Lembrete:
Exemplos:
nome_1; _a; Nota; nota; imposto_de_renda; !x; 4_nota; valor venda
Dicionrio de Dados
Exemplo:
nm id vl end
= = = =
Nome do cliente (literal) Idade do cliente (numrico) Valor da venda (numrico) Endereo do cliente (literal)
CONSTANTES
Locais da memria destinados a armazenar informaes fixas, inalterveis durante a execuo do programa
const <tipo> <nome> <contedo>;
1 Laboratrio
Faa um algoritmo para receber dois nmeros, calcular e apresentar a multiplicao destes. Faa um algoritmo para realizar o clculo da mdia de duas notas de um aluno. Ao final informe se o aluno foi ou no aprovado (se media>=7 ento aprovado, seno reprovado) Faa um algoritmo para receber dois nmeros informados pelo usurio e verificar se eles so iguais, se o primeiro maior ou menor em relao ao segundo. Faa um algoritmo para ler o preo e a quantidade de um produto e ento fornecer o total
Comandos de E/S
Comandos de E/S
numerico preco, quant, total;
inicio
imprimir(Digite o preo do produto); ler(preco); imprimir(Digite a quantidade); ler(quant); total := preco*quant; imprimir(O valor total , total);
fim
Comandos de E/S
Digite o preo do produto 154.45 Digite a quantidade do produto 3 O valor total 463.35
Exerccio
Escreva um algoritmo para calcular o consumo mdio de um automvel (medido em Km/l), dado que so informados pelo usurio a distncia total percorrida e a quantidade de combustvel consumido para percorr-la (medido em litros)
Atribuio
O contedo de uma varivel pode ser alterado a qualquer momento Para atribuir valores a variveis devemos usar o sinal de ou = Exemplos:
a = 2; b = 3; c = a + b;
Ponto e vrgula
O sinal de ponto e vrgula ";" indica a existncia de um prximo comando (passa para o prximo) Por no ser um comando, aps a palavra INICIO no se usa ";"
/* Linhas de Comentrios */
Podemos inserir em um algoritmo comentrios para aumentar a compreenso do mesmo, para isso basta que o texto fique entre /* */ essencial para um bom algoritmo Exemplo
Aspas
Quando queremos exibir uma mensagem para a tela ou impressora ela deve estar contida entre aspas duplas, caso contrrio, o computador ir identific-la como Identificador Desconhecido Exemplo: imprimir(Area Total=, area); /* informa a rea total */
Comando de Deciso SE
Unidade III
Estruturas de deciso
Executa uma seqncia de comandos de acordo com o resultado de um teste condicional A estrutura de deciso pode ser Simples ou Composta, baseada em um resultado lgico (condio)
Exemplo
se <condio> inicio <comando1>; <comandoN>; fim seno inicio <comando1>; <comandoM>; fim
SE Aninhados
Comando SE
Condio:
Expresso lgica
se ((x==2) and (y>4)) inicio fim
L1 = ? L2 = ? L3 = ?
Comando SE
Faa um algoritmo para ler o nome de um contribuinte e seu rendimento anual. O algoritmo dever ento informar ao usurio qual o valor do Imposto de Renda a pagar de acordo com a tabela abaixo.
www.receita.fazenda.gov.br
Expresses Aritmticas
O resultado da avaliao numrico Somente o uso de operadores aritmticos e variveis numricas so permitidos nessas expresses
Operador Tipo Prioridade
+ * / **
4 4 3 3 2 1
Expresses Aritmticas
A prioridade entre operadores define a ordem em que os mesmos devem ser avaliados dentro de uma mesma expresso Os parnteses podem definir prioridades Exemplos:
Expresses Aritmticas
Linearizao de expresses
{[
2 1 53 X = +Y 3 2
] }
(((2/3)+(5-3))-X)=1/2+Y
Operadores Especiais
Expresses Lgicas
Expresses Lgicas
... se ((sexo = 'f') and (sal < 5000)) sal = sal * 1.10; seno sal = sal *1.05;
Operadores Relacionais
Operadores Lgicos
Atuam sobre expresses lgicas retornando sempre valores lgicos como falso ou verdadeiro
Operador Operao Prioridade
3 2 1
Operadores Relacionais
Estruturas de Repetio
Unidade IV
Repetio Condicional
usada para repetir N vezes uma ou mais instrues. Tendo como vantagem o fato de no ser necessrio o conhecimento prvio do nmero de repeties Todas as variveis CONTADORES devem receber um valor inicial.
Enquanto
Forma Geral 1:
Forma Geral 2:
Enquanto
Comando Enquanto
Com Contador
Incremento
N=N+1; N=N-1;
Decremento
Sem Contador
6 5 4 3 2 1
5 4 3 2 1 0
Exemplo1
inicio numerico x, numero, soma; soma=0; x=10; enquanto (x>=1) faa inicio imprimir(digite nmero); leia(numero); soma=soma+numero; x=x-1; fim imprimir(somatrio , soma); fim
Exemplo2
inicio numerico x, numero, soma; soma=0; imprimir(quantos nmeros? ); leia(x); enquanto (x>=1) faa inicio imprimir(digite nmero); leia(numero); soma=soma+numero; x=x-1; fim imprimir(somatrio , soma); fim
Exemplos:
Exemplo3
principal() inicio numerico soma, salario; soma=o; salario=1; enquanto (salario>0) faa inicio imprimir(digite o salrio (digite 0 para sair)); ler(salario); soma=soma+salario; fim imprimir(soma); fim
Laboratrio2 - Construtor
Resoluo de exerccios
Lista de Exerccios 2
Repetio Condicional
Assim como a estrutura ENQUANTO, usada para repetir uma ou mais instrues Sua validao no final fazendo com que a repetio seja executada pelo menos uma vez
faa enquanto
faa inicio <comando1>; <comandon>; fim enquanto <condio>;
Exemplo1
principal () inicio soma, salario : numerico; soma:=0; faa imprimir(digite salrio (0 para sair); ler(salario); soma=soma+salario; enquanto (salario!=0); imprimir(soma); fim
Exemplo2
principal () inicio numerico par, contador; contador = 0; par = 0; faa imprimir(par); par := par+2; contador := contador+1; enquanto (contador<100); fim
Repetio Determinada
Na repetio determinada o algoritmo apresenta previamente a quantidade de repeties O contador (com incremento ou decremento) automtico
Exerccios
1)Faa um algoritmo para ler um valor X qualquer, calcular e imprimir Y, sendo:
Y = (x+1)+ (x+2)+ (x+3)+... (x+99)+ (x+100)
2) Faa um algoritmo para gerar 50 termos da seguinte PG: 3,9,27,81,... Imprima-os. LISTA DE EXERCCIOS 2 (Agora com os comandos faa enquanto)
Estruturas de Condio
A estrutura de condio equivale a um SE aninhado. Forma Geral: faa caso caso <condio1> <comando1>; caso <condioN> <comando2>; outros casos <comandoX>; fim
Linguagem C
Unidade V
LINGUAGENS DE PROGRAMAO
Permitem o desenvolvimento de programas. Possuem um poder de criao ilimitado, desde jogos, editores de texto, sistemas empresariais at sistemas operacionais. Existem vrias linguagens de programao:
Introduo
Dennis
1972
Idias B
Introduo
Inicialmente
(MSDOS/MS-Windows e Linux)
O Standard C ANSI
Surgiram diversas implementaes. Cdigos incompatveis Padro ANSI em 1983 Verso que segue a norma do American National Standard Institute (ANSI), e da International Standards Organization (ISO) Compiladores da Borland (primeiros a oferecer compatibilidade com essa norma Turbo C 2.0)
Caractersticas
A
pela conciso de suas instrues; pela facilidade de desenvolvimento de compiladores C; pela rapidez de execuo de programas; pelo poderoso conjunto de operadores e tipos de dados;
Caractersticas
por permitir a gerao de um cdigo bem otimizado e compacto; pela sua portabilidade; por apresentar facilidade de manipulao direta do hardware da mquina; pelo fato que o poderoso Unix foi escrito em C. Linux tambm.
if,else,break,case,for,while, continue,return,const,....
Detalhes importantes
Compilador
Sempre que o cdigo fonte for alterado ele deve ser re-compilado
Deve-se
Bibliotecas
Conjunto de funes para realizar tarefas especficas. Biblioteca padro C - ANSI - funes bsicas. As primeiras linhas do programa indicam as bibliotecas utilizadas
Organizao de um programa
Bibliotecas Declaraes globais Funes (comandos) Funo Principal (main) (comandos)
Um Programa Simples
#include <stdio.h>
/* */ um programa bem simples que imprime uma mensagem na tela.
Compilao
Pre-Processadores:
Compiladores
gcc (Linux)
Cuidado com algumas sujeiras que ficam no arquivo quando se usa Copiar-Colar
Compiladores
Dev C++
gratuito F9 (compila e executa) colocar getchar(); getchar(); no final para visualizar o resultado
Smbolos especiais
Delimitador de comandos ; Identificador de um elemento de uma matriz [ ] Comentrios /* */ Atribuio = Delimitador caracteres Delimitador de apenas um caractere ' '
Estrutura de um Programa
Um A
conjunto de funes
main
main () { declaraes; comando 1; comando 2; ... comando n; }
As outras funes
tipo nome (parmetros)
tipo da funo = tipo do valor que a funo retorna Por default (padro) o tipo de uma funo int
Exerccios
Faa um programa para receber dois nmeros, calcular e apresentar a multiplicao destes; Faa um programa para realizar o clculo da mdia de duas notas de um aluno. Ao final, informe se o aluno foi ou no aprovado (se media>=7 ento aprovado, seno reprovado); Faa um programa para receber dois nmeros informados pelo usurio e verificar se eles so iguais, se o primeiro maior ou menor em relao ao segundo.
int
famlia dos nmeros inteiros famlia dos nmeros pontoflutuantes (pseudo-reais) famlia dos caracteres
float double
char
Inteiros
de preciso
: : : 1 byte 2 bytes 4 bytes
Inteiros
Atributos
de representao
: :
positivos positivos e negativos
unsigned signed
unsigned short int : rep. sobre 8 bits [0, 255] signed short int : rep. sobre 7 bits
[-128, 127]
: rep. sobre 16 bits [0, 65535] signed int : rep. sobre 15 bits [-32768, 32767] unsigned long int : rep. sobre 32 bits [0, 4294967295] signed long int : rep. sobre 31 bits [-2147483648, 2147483647] unsigned int
Inteiros - Resumo
Seis
tipos de inteiros
todos signed
int; short int; long int; unsigned int; unsigned short int; unsigned long int;
Pseudo-Reais
(representao da forma: M * 10EXP)
[-3.4*10-38, 3.4*1038 ] double : representao sobre 15 bytes [-1.7*10-308, 1.7*10308 ] long double : representao sobre 19 bytes [-3.4*10-4932, 3.4*104932 ]
Caracteres
Um caracter representado por seu cdigo ASCII Ele pode ser manipulado como um inteiro Um caracter codificado sobre um byte podemos representar at 256 caracteres.
Caracteres
O
tipo : Char
char c,b; c = \65; b = c;
sizeof
Este operador retorna o tamanho da varivel ou tipo que est em seu operando. Por exemplo
sizeof(char) resultaria em 1.
E o tipo String?
No
Substituo:
char nome[20];
O Boolean no existe em C!
Pode
0 diferente de 0
Lgico
#include <stdio.h> main ( ) { int verdadeiro, falso; verdadeiro = (15 < 20); falso = (15 == 20); printf(Verdadeiro= %d,Falso= %d, verdadeiro, falso); }
Em sistemas 32 bits
1 1 1 2 2 4 4 4 4 4 8 10
unsigned int long 2,147,483,647 unsigned long float double long double
0 a 4,294,967,295 -2,147,483,648 a 0 a 4,294,967,295 3.4E+/-38 (7 dgitos) 1.7E+/-308 (15 dgitos) 1.2E+/-4932 (19 dgitos)
DECLARAO DE VARIVEIS
Identificadores
Um Um
identificador um meio para manipulao da informao nome que indica uma varivel
Identificadores
Formado Comea
por uma combinao de caracteres alfanumricos por uma letra do alfabeto ou um sublinhado, e o resto pode ser qualquer letra do alfabeto, ou qualquer dgito numrico (algarismo) ou um sublinhado.
Exemplos de identificadores
Exemplo:
4_nota;
Ateno (exemplo):
os compiladores ANSI usam variveis que comeam por um sublinhado, melhor ento no uslas No usar as palavras chaves da linguagem
Palavras Chaves
(so 32 palavras)
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
Declaraes
tipo lista-de-nomes-de-variveis
Exemplo:
Inicializao de Variveis
C
no faz automaticamente
Isto
pode ser feito no momento da declarao: int i=1,j=2, k=somar(4,5); short int l=1; char c=\0;
Operaes
Atribuio
Exemplo
Exemplos de Atribuio
i = (j = k) - 2; 5 3 (caso k=5)
Atribuio
mltipla:
a=b=c=8;
Adio/subtrao/multiplicao
expresso1 + expresso2 expresso1 - expresso2 expresso1 * expresso2
As
duas expresses so avaliadas, depois a operao realizada, e o valor obtido o valor da expresso
Pode
ter uma converso de tipos, depois da avaliao das expresses: float x,y; int z; x=y+z;
Diviso (1)
expresso1 / expresso2
Em
C, o / designa ao mesmo tempo a diviso dos inteiros e dos reais depende ento dos valores retornados pelas expresses
Isto
Se os dois so inteiros ento a diviso inteira, mas se um deles real ento a diviso real
Diviso
Caso
(2)
os dois operandos inteiros sejam positivos, o sistema arredonda o resultado da diviso a zero:
7 / 2 retorna 3 7.0 / 2 retorna 3.5 (float) 7 / 2 retorna 3.5 7 / (float) 2 retorna 3.5
O Resto %
Expresso1 % Expresso2
Retorna
o resto da diviso inteira 7 % 2 retorna 1 Caso um dois operadores negativo, o sinal do mdulo depende da implementao, mas geralmente o sinal do primeiro 7 % 2 retornam 1 -7 % 2 retornam -1 7 % -2 retornam 1
Operadores Relacionais
expresso1 op-rel expresso2 Onde op-rel um dos seguintes smbolos: Operador Semntica == igual != diferentes > superior >= superior ou igual < inferior <= inferior ou igual O resultado da comparao um valor lgico: 1 (se a comparao verdadeira) e 0 (seno)
Operadores Lgicos
&& || !
Exemplos:
e ou negao
Operador &
Incremento/decremento
x = x + 1; x++; ++x; s+=i; z = y++; z = ++y;
O
/* z = y e depois y++ */
decremento semelhante
Regra
v = v operador expresso v operador= expresso
Condicional
a = (b >= 3.0 ? 2.0 : 10.5 );
if (b >= 3.0) a = 2.0; else a = 10.5;
/* c=maior(a,b) */ /* c=menor(a,b)
Operadores
Entradas e Sadas
Sistema
Entrada de Dados
Processamento de dados
Sada de Dados
Sadas
printf("Bom
dia"); puts("Bom dia"); /* para imprimir um texto */ putch(a); /* para imprimir um char */
printf ("Meu nome : %s\ne tenho %d anos.",
nome, idade)
Entradas
gets(s);
/* leitura de string */ (O gcc no recomenda por que perigosa)
Comandos de E/S
main () { short int idade; printf (Digite a sua idade:\n); scanf (%d, &idade); printf(Voce tem %d anos, idade); }
Comandos de E/S
main () { short int idade; printf (Digite a sua idade:\n); fflush(stdin); // fflush - usar antes do scanf // usa-se // para comentrios em c++) scanf (%d, &idade); printf(Voce tem %d anos, idade); }
Converso de Tipos
%d %o %x %e %u %c %s %f notao notao notao notao notao notao notao notao de decimal (inteiro) octal hexadecimal cientfica sem sinal de caracter de string de float
Formatao
Cada
um desses caracteres de converso utilizado depois do % para indicar o formato da sada (da converso) entre os dois podemos entrar outros argumentos
Mas,
Formatao
+ n justificar a esquerda o sinal sempre aparente o comprimento mnimo da sada (seno brancos)
0n o comprimento mnimo da sada (seno 0s esquerda) n.m para separar as partes antes e depois da virgula total de n dgitos l para indicar um long
Laboratrio 1 (C)
Exemplo
#include <stdio.h> int main() { int a; long int b; short int c; unsigned int d; char e; float f; double g; a = 1023; b = 2222; c = 123; d = 1234; e = X; f = 3.14159; g = 3.1415926535898;
Exemplo
{ printf("a = %d\n", a); /* a = 1023 printf("a = %o\n", a); /* a = 1777 printf("a = %x\n", a); /* a = 3ff printf("b = %ld\n",b); /* b = 2222 printf("c = %d\n", c); /* c = 123 printf("d = %u\n", d); /* d = 1234 printf("e = %c\n", e); /* e = X */ */ */ */ */ */ */
Exemplo
{ printf("\n"); printf("a = %d\n", a); printf("a printf("a c = 5; d = 8; printf("a printf("a = %7d\n", a); = %-7d\n", a); = %*d\n", c, a); = %*d\n", d, a);
Exemplo
{
printf("\n"); printf("f = %f\n", f); printf("f = %12f\n", f); printf("f = %12.3f\n", f); printf("f = %12.5f\n", f); printf("f = %-12.5f\n", f);
Exemplo
As sadas so:
f f f f f
Exemplo
main( ) { short int idade; char nome[30]; printf ("Digite a sua idade:\n"); scanf ("%d", &idade); printf ("Digite o seu nome:\n"); scanf("%s", nome); printf("A idade de %s eh %d",nome, idade); }
O const
Para declarar variveis constantes podemos usar a palavra chave const const int N 20
Isto proibe que N seja modificado no programa
Estruturas de Controle
Blocos de instrues
{ declaraes; comando_1; } comando_n; Em um bloco pode-se declarar variveis, que ficam visveis somente nesse bloco
if...else (1)
if (condio) comando_1; [else comando_2;]
Exemplos:
if (a!=0) x=-b/a;
if...else (1)
#include <stdio.h> main () { float rend,imp; printf("\ndigite o rendimento: "); scanf("%f",&rend); if (rend <= 17215.08) imp = 0; else if (rend <= 34400.4) imp = rend * 0.15; else imp = rend * 0.275; printf("\nO imposto a pagar %7.2f\n",imp); }
if...else (2)
Qualquer
comando simples pode ser substitudo por um comando composto: if (d>0) { x1=(-b-sqrt(d))/2*a; x2=(-b+sqrt(d))/2*a; }
if...else (3)
Observao: o else refere-se ao ltimo if if (condio_1) instruo_1; else if (condio_2) instruo_2; else if (condio_3) instruo_3; else instruo_4;
if...else (4)
int a=3, b=2, c=1, d=0; if (a>b) if (c<d) b=2*a; else a=2*b;
observe como seria utilizando-se as chaves: if (a>b) { if (c<d) b=2*a; } else a=2*b;
if...else (5)
Observao: o else refere ao ltimo if seno tem que usar chaves (bloco) if (condio_1) { comando_1; if (condio_2) comando_2; } else if (condio_3) comando_3;
Observao
A condio no obrigatoriamente uma comparao. Pode ser qualquer expresso retornando um valor que pode ser comparado a zero
s switch
escolha mltipla
switch (expresso) { case constante_1: comandos; break; case constante_2: comandos; break; ... default: comandos }
switch (expresso) { case val_1: case val_n: comandos; break; case val_3: comandos; break; default: comandos; }
Instrues de Repetio
while
while (condio) comandos;
fim do while
condio!=0 ? no
sim
comandos
do...while (1)
do comandos; while (condio);
Os
do...while
do c=getch(); while (c==s)
(2)
comando
fim do do
sim
condio!=0 ?
no
for
comandos;
(1)
Exemplo:
for
expresso1
(2)
inicializao
fim do for
condio!=0 ?
sim
no
comandos expresso2
for
(3)
break
O break permite parar um lao de repetio (for, do, while) Se temos vrios nveis, o controle volta penltima estrutura de repetio
for(;;) { scanf(%c,&c); if (c == A) break;
/*interrompe o que deveria ser um lao eterno*/
}
printf(Fim do Loop!);
continue
Utilizado dentro de uma instruo for, while ou do O continue permite parar a iterao atual e passar iterao seguinte Exemplo: for (i=1;i<20;i++) { if (vet[i]<0) continue; comandos; }
Laboratrio 2 (C)
Exerccio
Faa um programa para ler o rendimento anual de um contribuinte. O programa dever ento informar ao usurio qual o valor do imposto de renda a pagar de acordo com a tabela abaixo. Faa para 3 funcionrios:
Laboratrio 2 (C)
Exerccio
Com base no exerccio anterior, imprima uma relao de renda (16000, 17000 ... 50000) com seu respectivo imposto e percentual efetivamente pago 16000 9999 8% 17000 8888 - 8,1%
Laboratrio 3 (C)
while <condio> do begin
<comandos>;
end;
Exerccios utilizando while, repeat e para Fazer todos os exerccios da Segunda Lista (em C)
Modularizao de Algoritmos
Unidade VII
Mdulos
Organizao de um programa
Bibliotecas Declaraes globais
main () {
Corpo Principal
}
Organizao de um programa
Bibliotecas Declaraes globais
Mdulo 1
...
Mdulo n
Corpo Principal do Programa
Alm das funes predefinidas nos arquivos header da biblioteca (no diretrio lib, usando o #include) Exemplos de funes predefinidas da biblioteca: stdio.h, math.h, stdlib.h O usurio pode definir outras funes
funes: (stdio.h)
Principalmente:
puts gets printf scanf
funes: (math.h)
abs fabs exp ceil floor pow pow10 hypot sqrt mdulo de inteiro mdulo de real exponencial arredondar ao max arredondar ao min xy 10x hipotenusa raiz quadrada double double int double double double double abs(int) fabs(double) exp(double) ceil(double) floor(double)
clreol apaga o resto da linha clreol () delline insline gotoxy kbhit putch getch herex herey apaga a linha atual insere uma linha
posiciona o cursor
testa se tecla
imprima um char c
leia char sem echo int posio x do cursor posio y do cursor int int
funes: (stdlib.h)
min max
type) retorna o min retorna o max type min(type, type) type max(type,
rand exit
random
nmero aleatrio
sada
precisa de <time.h>
funes graphics.h
rectangle
desenha um retngulo
As
Semntica
tipo:
o tipo do valor retornado pela funo
Exemplo
#include <stdio.h> int int { fatorial (int); //interface fatorial (int n) int i, resultado = 1; for ( i = 1; i <= n; i ++) resultado *= i; return resultado; } main ( ) { printf ( o fatorial de 4 = %d, fatorial(4) ); printf ( o fatorial de 3 = %d, fatorial(3) ); }
Exemplo
float media (float a, float b) { float resultado; /* var. locais */ resultado=(a+b)/2; return (resultado);
/* retornar o resultado ao chamador */
{ }
Exemplo
int { if (a<b) return (a); else return (b); } min (int a, int b)
Exerccio
Soluo (1)
#include <stdio.h> float serie (float , int ); float potencia (float , int) int fat (int); main( ) { float x; int termos; printf(entre com o numero de termos: ); scanf(%d, &termos); printf(entre com o valor de X: ); scanf(%f, &x); printf(O valor de srie = %f , serie(x, termos)); }
Soluo (2)
float serie (float x, int n) { int i; float for ( i = 1; resultado } resultado = 0; i <= n; i++) += potncia( x, i ) / fat( i );
return resultado;
Soluo (3)
float potencia (float base, int expoente)
{ int i; float resultado = 1; if (expoente == 0) return 1; for (i = 1; i <= expoente; i++) resultado *= base; return resultado; }
Soluo (4)
int { int i, resultado = 1; for (i=1; i<=n; i++) resultado *= i; return resultado; } fat (int n)
Procedimentos
Observao: no temos aqui o comando return (o tipo especial void no existia nas primeiras verses da linguagem)
Na chamada, parmetros
tem-se passagem de
o operador de endereamento
&
void somar (int x, int y, int * som) { *som = x+y; } void main () { int a=5, b=6, s; somar(a,b, &s); printf("%d + %d = %d",a,b,s); }
Declarao de Funes
Uma
funo f conhecida implicitamente por uma outra funo g se elas so definidas no mesmo arquivo, e se f definida antes de g desse caso e para controle preciso declarar as funes antes de us-las
Fora
Exemplo
void main (void) { int maior (int a, int b); maior (2,8); } int maior (int x, int y) { return (x>y?x:y); }
Funes Iterativas
exemplo do fatorial long int fat (long int n) { long int i,res=1; for (i=1;i<=n;i++) res=res*i; return (res); }
Funes Recursivas
exemplo do fatorial long int fat (long int n) { if (n == 1) return 1; else return (n*fat(n-1)); }
Exerccios
Escreva as funes real_dlar e dlar_real de converses Real-Dlar e vice-versa. Escreva as verses recursiva e iterativa da funo soma que retorna a soma dos n primeiros termos:
Matrizes
Vrias informaes dentro de uma mesma varivel Variveis Indexadas, Variveis Compostas, Vetores, Matrizes, Tabelas ou Arrays
Tabelas
O objetivo da estrutura de dados homogneos (tabela) agrupar um conjunto de informaes de mesmo tipo em uma mesma varivel
tabela pode ser multidimensional (matriz) ou unidimensional (vetor)
Uma
Exerccios
Faa um programa para realizar a soma de duas matrizes de dimenso 100x100. A partir de uma tabela(dada) que registra a temperatura mdia de todos os dias de um ano, elabore um algoritmo que calcule e escreva: a menor temperatura ocorrida no ano; a maior temperatura ocorrida no ano; a temperatura mdia anual; o nmero de dias no ano em que a temperatura foi inferior mdia anual
Declarao
float vet[10];
elementos so indexados de 0
a N-1
Dimenso
Na
Inicializao
#define N 4 int v[N]={1,2,3,4};
Operadores abrangentes
lembramos que:
x++ incrementa x mas retorna o valor inicial ++x incrementa x e retorna o valor incrementado i=0; v[i++]=0; v[i++]=0; i=1; v[++i]=0; v[++i]=0;
de um vetor
em um vetor:
Tabelas MultiDimensionais
Declarao:
Matrizes
/* matriz bidimensional de 3 linhas 4 colunas */
Inicialiazao:
int mat [3][4] = { {5,6,8,1}, {4,3,0,9}, {12,7,4,8}, }
Exemplo
#define L 4; #define C 3; int mat[L][C];
/* leitura: */
for (i=0;i<=L;i++) for (j=0;j<=C;j++) { printf("digite o elemento [%d,%d]: ",i,j); scanf("%d",&mat[i][j]); }
Observao 1
for (i=0,j=0;i<L && j<C;i++,j++) {
printf("digite o elemento [%d,%d]: ",i,j); scanf("%d",&mat[i][j]);
Observao 2
int sum (int n) { int res=0; for (;n>0;n--) // n inicializada na chamada res=res+n; return (res); }
chamada: sum(5)
Exerccios
A.1 Escreva o procedimento ini_num_dias que inicializa um vetor num_dias[12] que indica para cada ms do ano seu nmero de dias: (num_dias[i] indica o nmero de dias do ms i do ano), sabendo que: Se i=2 ento num_dias=28; Se (i par e i<=7) ou (se i impar e i>7) ento num_dias=30 Seno num_dias=31. A.2 Escreva o procedimento imp_num_dias que imprima os nmeros de dias de todos os meses do ano.
B. Escreva a funo ordenar que ordena um vetor. C. Escreva a funo palindromo que determina se um vetor de caracteres um palindromo.
Tipos Enumerados
enum
exemplos:
declarao:
dias d1,d2=Quinta;
enum define um novo tipo cujo os elementos so numerados automaticamente pelo compilador: 0 1 2 ...
Exemplo
#include <stdio.h> enum dias {Segunda,Tera,Quarta,Quinta, Sexta,Sbado,Domingo} d; // d uma varivel declarada de tipo dias void main (void) { // dias d; uma outra maneira de declarar for (d = Segunda ; d < Domingo ; d++) printf(O cdigo do dia : %d\n", d); }
0, 1 at 6
enum
Essa numerao permite comparar os elementos do tipo: if (d1<=d2) ... Portanto podemos mudar essa numerao:
enum boolean {true=1,false=0};
Ponteiros
Variveis Dinmicas
Todas
dinmicas (ponteiro)
Variveis Dinmicas
Exemplo
pf 4.6
se aplica sobre uma varivel e permite retornar seu endereo de memria O operador de indireo * se aplica sobre um ponteiro e permite retornar (manipular) o objeto apontado
(Ponteiro)
(Varivel)
&v
Exemplo
int i,j; int *pi;
/* pi um ponteiro sobre um inteiro */
pi &i &j 56 i 4 j
Exerccio
1. Declare um inteiro i e um ponteiro p sobre um inteiro 2. Inicialize o inteiro com um valor qualquer 3. Aponte o ponteiro sobre a varivel i 4. Imprima o valor de i 5. Modifique o valor de i usando o ponteiro 6. Imprima o novo valor de i
/* 1 */ /* 1 */ /* 2 */ /* 3 */ /* 4 */ /* 5 */ /* 6 */
Passagem de Parmetros
Passagem
Estratgias
Tudo feito por referncia (FORTRAN, PL/1) Temos a escolha entre a passagem por valor ou por referncia (PASCAL) Toda passagem feita por valor (C)
Estratgia de C
Em
C, toda passagem de parmetros portanto feita por valor ento fazer as passagens por referncia? A soluo declarar os parmetros formais do tipo ponteiro feito pelo uso do operador & (usado na chamada a funo)
Como
Isso
Exemplo
void
{ }
*res=a+b;
observe que na chamada tem que passar o endereo da varivel onde deseja-se recuperar o resultado
Um outro exemplo
A funo troca
void troca (int * x, int * y) { int temp; temp=*x; *x=*y; *y=temp; }
Strings
string um conjunto de caracteres uma estrutura equivalente estrutura de vetor nica diferena que string termina sempre pelo caractere '\0' terminador '\0' serve para facilitar o tratamento das strings, ou melhor, para detectar o fim da string
Declarao
O
Portanto
Como um vetor de char; ou Como um ponteiro sobre uma zona de caracteres (char)
nome[30];
As variveis do tipo string declaradas como vetor de char tm um tamanho limite fixo (o tamanho do vetor) Se o tamanho da string menor do que o tamanho do vetor, o compilador C completa com o caractere especial '\0' para indicar o fim da string
A inicializao de um vetor de char pode ser feita, no momento da declarao, de duas maneiras:
1. Atribuindo um conjunto de caracteres:
char ch [20]={e,x,e,m,p,l,o}; (como normalmente feito para inicializar qualquer tipo de vetor)
char ch[20]= "exemplo"; O tamanho pode ou no estar especificado: char nome[]="este tem 23 caracteres"
#define N 3 char ch[N]={'O','i'}; char c; ch[0]= 'H'; /* refere-se ao 1o caractere */ c = ch[1]; /* refere-se ao 2o caractere */ /* ch[N-1] refere ao Nsimo caractere */ printf("%s - %c", ch, c);
Oi\0
Hi\0
A manipulao de strings como vetores de caracteres pode ser pouco prtica. Portanto, podemos criar strings de tamanho dinmico, usando um ponteiro sobre um char
char
* ch = "exemplo";
Contrariamente outra maneira, a reserva do espao de memria no feita no momento da declarao, mas dinamicamente, no momento da atribuio
Manipulao de Strings
string.h
Temos,
Strcpy/strncpy
A funo especial strcpy permite atribuir um valor texto a uma varivel de tipo texto O strcpy apresenta dois formatos de uso:
strcpy(string1,string2); strncpy(string1,string2,n);
Exemplo:
char *ch1="boa", *ch2="noite"; strcpy(ch1,"isto um exemplo"); strncpy(ch2,ch1,4); /* ch2 vai pegar isto */
strlen
strlen permite retornar o tamanho de um string: nmero de chars que compem o string (o \0 no faz parte) exemplo:
int a; char * nome; strcpy(nome,brasil"); a=strlen(nome); /* a=6 */
strcat/strncat
strcat se aplica sobre dois strings e retorna um ponteiro sobre a concatenao dos dois. exemplo:
char *ch1="boa", *ch2="noite", *ch3, *ch4;
strcmp/strncmp
Lembramos que as letras so ordenadas dando seu cdigo: a< ...
z< A...<Z
exemplo:
char
0 positivo
se s1 == s2 se s1 > s2
strchr/strrchr
strchr procura por um caractere em um string e retorna um ponteiro sobre sua ltima ocorrncia, seno retorna null. exemplo:
char ch[]="informtica"; char *pc, c='f';
pc=strchr(ch,c);
if (pc) /* i.e. if pc!=null */ printf("%d",*pc); else printf("Caractere inexistente"); O strrchr faz a busca no senso inverso.
touppar/tolower
toupper converte um caractere minsculo em maisculo. tolower faz o contrrio. # include <ctype.h>
char c='a';
/* c= /*
/* c j esta =
'A'
*/
Exerccios 1
A. Defina a funo ocorrncia que retorna o
nmero de ocorrncias de um caractere em um string.
int tamanho1 (char s[]) /* com um vetor */ { int i=0; while (s[i]) /* equiv. while (s[i]!= '\0' ) */ i++; return (i); } int tamanho2 (char * s) /*com os ponteiros*/ { int i=0; while (*s) /* equiv. while (*s!= '\0 ') */ {i++;s++;} return (i); }
void
main (void)