Você está na página 1de 46

Aula 01 Reviso de algoritmos e linguagem C

Ementa:
Apresentao dos algoritmos. Recursividade. Complexidade de algoritmos. Listas lineares. Pilhas e Filas. rvores binrias. rvores balanceadas. rvores B e B+, Tcnicas de hashing. Mtodos de ordenao. Mtodos de pesquisa.

Duas avaliaes e dois trabalhos

O uso de algoritmos surgiu como uma forma de indicar o caminho para a soluo dos mais variados problemas. Dado um problema, as principais funes de um programador so:
 Entender

perfeitamente o problema  Escolher mtodos para sua soluo  Desenvolver um algoritmo baseado nos mtodos  Codificar o algoritmo na linguagem de programao disponvel

A parte mais importante da tarefa de programar a construo de algoritmos. Segundo Niklaus Wirth: Programao a arte de construir e formular algoritmos de uma forma sistemtica Algoritmos + Estruturas de Dados = Programas

O aprendizado de algoritmos no se consegue a no ser atravs de muitos exerccios.


Algoritmos no se aprendem: o Copiando algoritmos o Estudando algoritmos Algoritmos s se aprendem:
o Construindo algoritmos o Testando algoritmos

Algoritmo: a descrio de um padro de comportamento, expressado em termos de um repertrio bem definido e finito de aes primitivas que, com certeza, podem ser executadas. Um algoritmo possui carter imperativo, razo pela qual uma ao em um algoritmo chamada de comando. Ex.: algoritmo para descascar batatas para o jantar: traga a cesta com batatas do poro; traga a panela do armrio; descasque as batatas; devolva a cesta ao poro;

Um algoritmo (ou programa) apresenta dois aspectos complementares: Aspecto esttico: a representao concreta do algoritmo atravs de um texto contendo comandos que devem ser executados numa ordem prescrita (atemporal). Aspecto dinmico: que a execuo do algoritmo no tempo. O problema central da computao consiste em relacionar esses dois aspectos, isto , consiste no entendimento (visualizao) das estruturas dinmicas das possveis execues do algoritmo a partir da estrutura esttica do seu texto.

A restrio a um nmero limitado de estruturas de controle (de execuo dos comandos do algoritmo) permite reduzir o abismo existente entre o aspecto esttico e o dinmico do algoritmo. S so usadas trs estruturas de controle: Seqncia Simples Alternativa Repetio

A arte de programar consiste na arte de organizar e dominar a complexidade (Dijkstra)

` `

` `

Toda linguagem de programao deve seguir uma sintaxe. A sintaxe so regras detalhadas para cada construo vlida. Estas regras esto relacionadas com os tipos, as declaraes, as funes e as expresses. Os tipos definem as propriedades dos dados manipulados em um programa. As declaraes expressam as partes do programa, podendo dar significado a um identificador, alocar memria, definir contedo inicial, definir funes. As funes especificam as aes que um programa executa quando roda

#include <stdio.h> /* Um Primeiro Programa */ int main () { printf ("Ola! Eu estou vivo!\n"); return(0); }

So nomes usados para se fazer referncia a variveis, funes, rtulos e vrios outros objetos definidos pelo usurio. Exemplos: a,b,x,i, Eduardo, Ana, ......
OBS: A linguagem C case sensitive, ou seja, as letras maisculas diferem das minsculas.

Quando voc declara um identificador d a ele um tipo. Um tipo de objeto de dados determina como valores de dados so representados, que valores pode expressar, e que tipo de operaes voc pode executar com estes valores.
Tipo Espao que ocupa na memria 1 byte 4 bytes 4 bytes 8 bytes Faixa -128 a 127 (incluindo letras e smbolos) -2147483648 a 2147483647 3.4E-38 a 3.4E+38 (6 casas de preciso) 1.7E-308 a 1.7E+308 (15 casas de preciso)

char int float double

Obs.: Alguns sistemas trabalham com valores inteiros de 2 bytes, com faixa de -32768 a 32 767.

A exibio dos resultados do processamento e de mensagens feita atravs da funo pr-definida printf(), cujo prottipo est contido tambm no arquivo stdio.h. Sua sintaxe a seguinte:
printf( Expresso , Lista de argumentos );
`

Onde: Expresso: contm mensagens a serem exibidas, cdigos de formatao que indicam como o contedo de uma varivel deve ser exibido e cdigos especiais para a exibio de alguns caracteres especiais. Lista de argumentos: pode conter identificadores de variveis, expresses aritmticas ou lgicas e valores constantes.

#include <stdio.h> main() { printf("Estou aprendendo a programar em C"); }

Cdigo %c %d ou %i %f %lf %e %s

Tipo char int float double float ou double .........

Elemento armazenado um nico caractere um inteiro um nmero em ponto flutuante ponto flutuante com dupla preciso um nmero na notao cientfica uma cadeia de caracteres

#include <stdio.h> main() { printf(Valor recebido foi %d,10); }

#include <stdio.h> main() { printf(Caracter A: %c,A); } #include <stdio.h> main() { printf(Valor inteiro %d e um float %f,10 ,1.10); }

#include <stdio.h> main() { printf(Minha string: %s,Entendi tudo!!!!); } #include <stdio.h> main() {
printf(Deveria imprimir um float, mas mandei imprimir um inteiro: %d,1.10);

Cdigo \n \t \b \f \a \" \\ %%

Ao leva o cursor para a prxima linha executa uma tabulao executa um retrocesso leva o cursor para a prxima pgina emite um sinal sonoro (beep) exibe o caractere " exibe o caractere \ exibe o caractere % #include <stdio.h> main() { printf("\t\tx\n"); printf("\tx\t\tx\n"); printf("\t\tx\n"); }

` `

As variveis s podem armazenar informaes ou dados sempre de um mesmo tipo (inteiro, real, caractere ou char). Na linguagem C, a declarao de variveis obedece a seguinte sintaxe: <tipo> <nome_var>; <tipo> <nome_var1>, <nome_var2>, ..... ,<nome_varn>;

ou importante no esquecer que quando se declara uma varivel, um espao num determinado endereo na memria alocado para armazenar um dado que obrigatoriamente tem que ser do mesmo tipo que o da varivel. Toda e qualquer varivel deve ser declarada e sua declarao deve ser feita antes de sua utilizao no programa.

Exemplos: int a,b, c; char letra, d, e; float f1; float f2,f3; Marque as declaraes vlidas: ( ) int a, ( ) char c; ( ) int a,b,a; ( ) float f1,f2,f3,4f; ( ) int meu_nro; ( ) float leitura_sensor;

O operador de atribuio em C o sinal de igual = Sintaxe: <variavel> = <expresso>;


`

Exemplos: int a,b,c,d; a = 5; c = 7; b = a; d = a + b + c;

ou

int a=5; int c=7; int b,d; b=a; d=a+b+c;

Aritmticos + % * / ++ -+ -

Tipo Binrio Binrio Binrio Binrio Binrio Unrio Unrio Unrio Unrio

Operao Adio Subtrao Resto da diviso Multiplicao Diviso Incremento Decremento Manuteno do sinal Inverso do sinal

Prioridade 5 5 4 3 3 2 2 1 1

` Exemplos: a = a + b; a = a + 4; a = b / 2; a = 4 * 2 + 3; // qual o valor final de a? b = 2 * 3 2 * 2; // qual o valor final de b? a++; // similar a a = a + 1; b--; // similar a b = b 1;

Relacionais > >= < <= == != Maior que Maior ou igual Menor que Menor ou igual Igual Diferente && || !

Lgicos And (e) Or (ou) Not (no)

` Ela o complemento de printf() e nos permite ler dados formatados da entrada padro (teclado). Sua sintaxe:

scanf("expresso de controle", argumentos);


` Entendendo o scanf:

...... int a; ....... scanf (%d, &a);


Operador utilizado para obter o endereo de memria da varivel.

int main() { int num; printf("Digite um valor: "); scanf("%d",&num); printf("\nO valor digitado foi %d.",num); return 0; }

int main() { int n1,n2,soma; printf("Digite dois valores: "); scanf("%d",&n1); scanf("%d",&n2); soma = n1 + n2; printf("\n%d + %d = %d.",n1,n2,soma); return 0; }

O comando if uma estrutura de deciso que decide se uma sequncia de comandos ser ou no executada. Sua sintaxe : if (<expresso>) { <sequncia de comandos> } Ou if (<expresso>) <nico comando>;

A expresso sempre ser avaliada logicamente (verdadeiro ou falso), correspondendo ao FALSO o valor zero (==0) e os demais ao VERDADEIRO (!=0).

Exemplo: Programa para determinar o maior de dois nmeros fornecidos pelo usurio. #include <stdio.h> int main() { float a, b, maior; printf("Digite os dois numeros"); scanf("%f %f", &a, &b); maior = a; if (b > a) maior = b; printf("O maior entre numeros %f , %f e' %f ", a, b, maior); return 0; }
`

Exemplo: Ler duas variveis (x e y) e imprim-las na ordem crescente.

#include <stdio.h> int main() { float x, y, aux; printf("Digite os dois numeros"); scanf("%f %f", &x, &y); printf("Conteudos originais de x e de y: %f , %f \n: ", x, y); if (y < x) { aux = x; x = y; y = aux; } printf("Conteudos de x e de y ordenados: %f , %f: \n", x, y); return 0; }

O comando if pode decidir entre duas sequncias de comandos qual vai ser a executada, tendo a seguinte sintaxe:

if (<expresso>) { // caso a expresso verificada retorne verdadeiro <sequncia de comandos> } else { // caso a expresso verificada retorne falso <sequncia de comandos> }

Exemplo: Verificar a paridade de um nmero.


#include <stdio.h> main() { int x, y; printf("Digite o numero: "); scanf("%d", &x); if (x % 2 == 0) printf("%d e' par \n", x); else printf("%d e' impar \n", x); }

int main() { int idade; printf("Informe sua idade: "); scanf("%d",&idade); if (idade < 20) if (idade < 13) printf("Infantil."); else printf("Adolescente"); else if (idade < 50) printf("Adulto"); else printf("Idoso"); return 0; }
Cad as chaves??????

1. Qual a sada do programa. int main() { 2. Qual a sada do programa. int x = 10, y = 3; int main() if (x < 10) { printf(Sada 1); int a = 2, b = 3, c = 4; else if ((a<3) && ((b !=3) || (c == 4))) if (y < 4) printf(sada 1); if (x > 10) if ((c ==3) || (b ==4)) printf(Sada 2); printf(Sada 2); else printf( Sada 3); if ((a < 3) && (b > 4)) return 0; printf(Sada 3); } else if (a == 2) if (b==5) printf(Sada 4); else printf(Sada 5);
return 0;

Utilizado quando uma determinada varivel pode ser igual a diferentes valores que se deseja avaliar.

sintaxe: switch (varivel) { case constante1: <comandos> break; case constante2: <comandos> break; default: <comandos> }
`

int main() { int epoca; printf("Digite o trimestre do ano em que estamos: "); scanf("%d",&epoca); switch (epoca) { case 1: printf("vero"); break; case 2: printf("outono"); break; case 3: printf("inverno"); break; case 4: printf("primavera"); break; default: printf("perodo invlido"); }
return 0;

while do...while for

(enquanto..faa) (repita..at) (para..faa)

Sintaxe: while(condio) { <comandos>; } int main() { int i; i=0; while (i<=10) { printf("%d\n",i); i++; } return 0; }
`

Sintaxe:

do { <comandos>; } while(condio);
int main() { int i; i=0; do { printf("%d\n",i); i++; } while (i<=10); return 0; }

Sintaxe: for(inicializao;condio;incremento) { <comandos>; Primeira vez que executa o for: } Inicializao Condio int main() VERDADEIRO: Bloco de comandos { FALSO: sai do for int i;
`

for ( i=0 ; i<=10 ; i++) { printf("%d\n",i); } return 0; }

Demais vezes: Incremento Condio VERDADEIRO: Bloco de comandos FALSO: sai do for

Transcrever para linguagem C inicio inteiro: NUM, QUADRADO; {imprime uma msg e l o 1o. numero inteiro} imprima(Digite um nmero inteiro: ); leia(NUM); enquanto NUM 0 faa QUADRADO n NUM**2; imprima (O quadrado de , NUM, eh, QUADRADO); imprima(Digite um nmero inteiro: ); leia(NUM); fim enquanto; fim.

` ` `

Uma funo um bloco de cdigo de programa que pode ser usado diversas vezes em sua execuo. Um programa em C consiste, no fundo, de vrias funes colocadas juntas. Abaixo o tipo mais simples de funo: #include <stdio.h> void mensagem () /* Funcao simples: so imprime Ola! */ { printf ("Ola! "); } int main () { mensagem(); printf ("Eu estou vivo!\n"); return(0); }

Argumentos so as entradas que a funo recebe. atravs dos argumentos que passamos parmetros para a funo. As funes printf() e scanf() so funes que recebem argumentos. Vamos ver um outro exemplo simples de funo com argumentos: #include <stdio.h> int square (int x) /* Calcula o quadrado de x */ { printf ("O quadrado e %d",(x*x)); return(0); } int main () { int num; printf ("Entre com um numero: "); scanf ("%d",&num); printf ("\n\n"); square(num); return(0); }

` `

#include <stdio.h> void mult (float a, float b,float c) /* Multiplica 3 numeros */ { printf ("%f",a*b*c); } int main () { float x,y; x=23.5; y=12.9; mult (x,y,3.87); return(0); }

#include <stdio.h> int prod (int x,int y) { return (x*y); } int main () { int saida; saida=prod (12,7); printf ("A saida e: %d\n",saida); return(0); }

Você também pode gostar