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.
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
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
` `
` `
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)
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.
Cdigo %c %d ou %i %f %lf %e %s
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(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;
ou
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 && || !
` Ela o complemento de printf() e nos permite ler dados formatados da entrada padro (teclado). Sua sintaxe:
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; }
`
#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> }
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;
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;
`
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); }