Construção de Algoritmos -...

39
Linguagem C IF61A/IF71A - Computação 1 Prof. Leonelo Almeida Universidade Tecnológica Federal do Paraná

Transcript of Construção de Algoritmos -...

Page 1: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Linguagem C IF61A/IF71A - Computação 1

Prof. Leonelo Almeida

Universidade Tecnológica Federal do Paraná

Page 2: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Até agora ...

• Sabemos construir algoritmos que tenham:

▫ Variáveis

▫ Comandos sequenciais

▫ Entrada e saída de dados pelo dispositivo padrão

▫ Estruturas condicionais e de decisão

▫ Estruturas de repetição

Page 3: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Mas ...

• Foco em algoritmos

▫ Identificação do problemas

▫ Entradas e saída

▫ Computação para transformar E->S

Page 4: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Aula de hoje

• Linguagem de programação C

• Levando os algoritmos para o computador

▫ Conversão de conceitos aprendidos até agora

para: “linhas de código”

Adaptação de notas de aula do prof. Ricardo Anido, Instituto de Computação, Unicamp

Page 5: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Ferramental • Você deverá ter acesso a um computador.

• Para criar um programa, utilizamos um editor de texto (para escrever o código do programa) e um compilador.

▫ O compilador transforma o código em um programa executável.

• Se você usa Linux ou MAC OS, você poderá utilizar qualquer editor simples como Emacs, Kyle, etc. Será preciso instalar o compilador gcc.

• Você pode utilizar uma IDE que integra editor de texto e compilador, como: http://www.codeblocks.org/downloads

Page 6: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Para aprender a programar

• FAÇAM em vez de observar/copiar

• Resolvam e implementem diversos problemas e exercícios

▫ Das listas

▫ De outras fontes como livros, Web, etc

Page 7: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Compiladores e linguagens de

programação • Uma linguagem de programação é um conjunto de comandos

que são mais próximos da linguagem humana do que os sinais digitais.

• Um compilador é um programa que lê um código de uma linguagem de programação e o transforma em um programa executável.

• Na verdade o compilador realiza esta tarefa juntamente com um outro programa, chamado montador (assembler).

• Um sistema operacional controla e abstrai o hardware, a segurança dentre outros fatores.

Linguagem de

Programação

Compilador +

Montador

Sistema Operacional

Page 8: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Primeiro programa em C

• Código fonte: arquivo com as declarações e operações segundo uma linguagem de programação

#include <stdio.h>

int main() {

printf("Hello, world!\n");

}

Page 9: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Primeiro programa em C

• Código fonte: arquivo com as declarações e operações segundo uma linguagem de programação

#include <stdio.h>

int main() {

printf("Hello, world!\n");

}

Biblioteca/Cabeçalho padrão de entrada/saída

Fim do código fonte

Imprime um conjunto de caracteres para a saída padrão

Função principal do código

Page 10: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Executando programas

• Primeiro deve-se compilar o código fonte

• Depois é possível executá-lo como qualquer outro programa instalado em seu computador

$ gcc hello.c -o hello

$ ./hello

Hello, world!

Page 11: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

• Primeiro deve-se compilar o código fonte

• Depois é possível executá-lo como qualquer outro programa instalado em seu computador

$ gcc hello.c -o hello

$ ./hello

Hello, world!

Executando programas

Compila o código fonte

Executa o programa

Resultado do programa

Page 12: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Erros

• Em tempo de compilação: ocorre quando tenta compilar um programa

• Em tempo de execução: ocorre quando o compilador gera o executável, mas o programa realiza uma operação não esperada

Page 13: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Declaração de variáveis • Formato: ▫ tipoDeDado nomeVariavel;

• Para várias variáveis do mesmo tipo: ▫ tipoDeDado nomeVar1, nomeVar2, ... ;

• Exemplos corretos: int soma;

float preco, abacaxi;

char resposta;

• Exemplos incorretos: soma int;

float preco abacaxi

Page 14: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Nomes de variáveis

• Deve começar com uma letra (maiúscula ou minúscula) ou subscrito(_). Nunca pode começar com um número.

• Pode conter letras maiúsculas, minúsculas, números e subscrito.

• Não pode-se utilizar como parte do nome de uma variável: { ( + - * / \ ; . , ?

• Letras maiúsculas e minúsculas são diferentes: int c;

int C;

Page 15: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Nomes de variáveis

• As palavras seguintes já tem um significado na linguagem C e por esse motivo não podem ser utilizadas como nome de variáveis: auto, double, int, struct, break, enum,

register, typedef, char, extern, return,

union, const, float, short, unsigned,

continue, for, signed, void, default,

goto, sizeof, volatile, do, if, static,

while

Page 16: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Tipos de variáveis (inteiro)

• int: o comprimento depende do processador. Em processadores Intel comuns: ocupa 32 bits e armazena valores de -2.147.483.648 a 2.147.483.647

• unsigned int: o comprimento depende do processador e que armazena somente valores positivos. Em processadores Intel comuns: ocupa 32 bits e armazena valores de 0 a 4.294.967.295

• long int: ocupa 64 bits em computadores Intel de 64bits e pode armazenar valores de aprox. -9x1018 a aprox. 9x1018

• unsigned long int: Inteiro que ocupa 64 bits e em computadores Intel de 64bits e armazena valores de 0 até aprox. 18x1018

• short int: Inteiro que ocupa 16 bits e pode armazenar valores de -32.768 a 32.767

• unsigned short int: Inteiro que ocupa 16 bits e pode armazenar valores de 0 a 65.535

Page 17: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

• char: armazena somente um caractere.

• Para cadeias de caractere (ou strings): char exemplo[4] = {'a','b','c','\0'};

char exemplo[4] = "abc";

Por isso elas são declaradas com o

tamanho desejado + 1.

Tipos de variáveis (caractere)

Strings sempre acabam com o caractere ‘\0’

Page 18: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Tipos de variáveis (ponto flutuante)

• float: Utiliza 32 bits, e na pratica tem precisão de aproximadamente 6 casas decimais (depois do ponto). Pode armazenar valores de (+/-)10-38 a (+/-)1038

• double: Utiliza 64 bits, e na pratica tem precisão de aproximadamente 15 casas decimais. Pode armazenar valores de (+/-)10-308 a (+/-)10308

Page 19: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Atribuições

• Nos algoritmos usamos a seta para esquerda

• Em C usamos o sinal de igual (=)

▫ Ou seja: nomeVariavel = valor;

▫ Exemplos: int idade;

idade = 12;

idade = idade + 1;

idade++;

<-

Page 20: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Constantes

• São valores que devem aparecer, por alguma razão, no programa. Também são de um tipo de dados

• Exemplos de constantes

▫ Inteiras: 10, 145, 1000000, -5

▫ Ponto flutuante: 2.3456, 32132131.5, 5.0

▫ Caracteres: 'A', '!', '4', '('

▫ String: “Hello world”, “Bonjour”, “Olá”

Page 21: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Constantes • Inteiras:

▫ Base decimal. Ex: 10, 145, 1000000

▫ Base hexadecimal (base 16). Ex: 0xA (0xA16 = 10), 0x100 (0x10016 = 256)

• Ponto flutuante

▫ Base decimal. Ex: 10.235

▫ Notação científica: 2e2 (2x102)

• Caracteres

▫ São inteiros que representam símbolos

▫ Tabelas de símbolos ASCII (American Standard Code for Information Interchange), EBCDIC, Unicode, etc

Page 22: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

...

48 – ‘0’

49 – ‘1’

50 – ‘2’

...

97 – ‘a’

98 – ‘b’

99 – ‘c’

...

Constantes • Inteiras:

▫ Base decimal. Ex: 10, 145, 1000000

▫ Base hexadecimal (base 16). Ex: 0xA (0xA16 = 10), 0x100 (0x10016 = 256)

• Ponto flutuante

▫ Base decimal. Ex: 10.235

▫ Notação científica: 2e2 (2x102)

• Caracteres

▫ São inteiros que representam símbolos

▫ Tabelas de símbolos ASCII (American Standard Code for Information Interchange), EBCDIC, Unicode, etc

Page 23: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Escrita de dados

• Nos algoritmos utilizamos a função imprima([“texto1”],[var1, ...],[“texto2”], ...);

• Na linguagem C utilizamos a função

printf(“um texto”,[var1, var2, ...]);

Page 24: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Escrita de dados

• Para imprimir variáveis e constantes ▫ printf(“Vai demorar %d %s.”, num, unidade);

%d imprime um inteiro, adicione u para unsigned, l para long. Ex.: %ud

%s imprime uma string

%f imprime um ponto flutuante. Use %e para notação científica. Use %.2f para float com 2 casas decimais

%lf imprime um double

%c imprime um caractere

Page 25: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Formatação da escrita dados #include <stdio.h>

main() {

int var_inteiro = 345435, var_inteiro2 = 256;

float var_flutuante = 123.456;

char var_caractere = 'A';

printf("\n[%%]\n");

printf("\n------INTEIROS------\n");

printf ("[%d] e [%10d] e [%-10d] e [%010d]\n", var_inteiro, var_inteiro, var_inteiro, var_inteiro);

printf ("[%o]\n", var_inteiro2);

printf ("[%x]\n", var_inteiro2);

printf ("[%#o] e [%#x]\n", var_inteiro2, var_inteiro2);

printf ("O %%d vem do termo \"decimal\".\n");

printf("\n------CARACTERE------\n");

printf ("[%c]\n", var_caractere);

printf ("[%s]\n", "Um texto aqui.");

printf("\n------PONTO FLUTUANTE------\n");

printf ("[%.2f] e [%10.2f] \n", var_flutuante, var_flutuante);

printf ("[%e]\n", var_flutuante);

}

Page 26: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Formatação da escrita dados #include <stdio.h>

main() {

int var_inteiro = 345435, var_inteiro2 = 256;

float var_flutuante = 123.456;

char var_caractere = 'A';

printf("\n[%%]\n");

printf("\n------INTEIROS------\n");

printf ("[%d] e [%10d] e [%-10d] e [%010d]\n", var_inteiro, var_inteiro, var_inteiro, var_inteiro);

printf ("[%o]\n", var_inteiro2);

printf ("[%x]\n", var_inteiro2);

printf ("[%#o] e [%#x]\n", var_inteiro2, var_inteiro2);

printf ("O %%d vem do termo \"decimal\".\n");

printf("\n------CARACTERE------\n");

printf ("[%c]\n", var_caractere);

printf ("[%s]\n", "Um texto aqui.");

printf("\n------PONTO FLUTUANTE------\n");

printf ("[%.2f] e [%10.2f] \n", var_flutuante, var_flutuante);

printf ("[%e]\n", var_flutuante);

}

Page 27: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Leitura de dados do teclado

• Nos algoritmos utilizamos a função leia([var1, ...]);

• Na linguagem C utilizamos a função scanf(“%f%d ...”, &var1, &var2, ...);

• Parâmetros: ▫ Uma string, indicando os tipos das variáveis

que serão lidas e o formato dessa leitura. ▫ Uma lista de variáveis.

• Aguarda que o usuário digite um valor e atribui o valor digitado à variável.

Page 28: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Um exemplo

#include <stdio.h>

int main(){

int num;

printf("Digite um número: ");

scanf("%d", &num);

printf("O valor é: %d", num);

}

Page 29: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Um exemplo

#include <stdio.h>

int main(){

int num;

printf("Digite um número: ");

scanf("%d", &num);

printf("O valor é: %d", num);

}

Por que usamos “&” antes da variável?

Page 30: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Um exemplo

#include <stdio.h>

int main(){

int num;

printf("Digite um número: ");

scanf("%d",&num);

printf("O valor é %d\n", num);

printf("O endereço do valor é %d", &num);

}

Se o usuário informar 101. Os resultado serão: O valor é 101

O endereço do valor é 22935567 Onde “22935567” corresponde a um endereço de memória onde para onde a variável aponta

e armazena seu valor atual.

A função scanf espera ponteiros em seus parâmetros

O operador & (e comercial) retorna o endereço de memória da variável.

Page 31: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Buffer de teclado

• Após consecutivas leitura e escritas, pode haver “lixo” no buffer de leitura de teclado. A função abaixo limpa o buffer e garante uma leitura segura.

fflush(stdin);

Page 32: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Operadores aritméticos

• Sobre a divisão:

▫ 5/2 o resultado é 2.

▫ Quando pelo menos um dos operandos for ponto flutuante, então a divisão será fracionária.

▫ 5.0/2 o resultado é 2.5.

+ Adição

- Subtração

* Multiplicação

/ Divisão

% Resto da divisão

Page 33: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Quais os valores impressos?

#include <stdio.h>

int main(){

int a=5, b=2;

float c=5.0, d=2.0;

printf("%d \n“, a/b);

printf("%f \n", a/d);

printf("%f \n", c/d);

}

Page 34: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Precedência entre operadores

* e /

%

+ e –

• Para alterar a precedência SEMPRE use parênteses.

Page 35: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Incremento e decremento

• Incremento: a++ • Decremento: a--

• Também pode-se usar ++a e --a. Nesse caso, o

incremento/decremento ocorre antes da variável ser usada na expressão

• Exemplo: int a, b, c;

a = 6;

b = a++;

c = ++a;

printf(“%d %d %d”, a, b, c);

O que será impresso?

Page 36: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Comentários

• Use // para comentários de somente uma linha ▫ Exemplo: //autor: Fulano

• Use /* */ para comentários de várias linhas ▫ Exemplo: /* autor: Fulano

Data de criação: 01-02-2003 */

• Importantes para: identificar o algoritmo (autor, data de criação, propósito), descrever trechos importantes, explicar parâmetros e entrada, etc.

Page 37: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Operadores relacionais

== Igualdade

!= Diferença

> Maior que

>= Maior ou igual que

< Menor que

<= Menor ou igual que

Page 38: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

O que será impresso? #include <stdio.h>

int main(void) {

int a, b;

printf("%d\n", 9 > 3);

printf("%d\n", (3*4)/2 != (2*3) );

a = 1;

b = -1;

printf("%d\n", a!=b);

return 0;

}

Page 39: Construção de Algoritmos - dainf.ct.utfpr.edu.brdainf.ct.utfpr.edu.br/~leonelo/cursos/if71a-s83-2015-02/linguagemC... · Das listas De outras fontes como livros, Web, etc . Compiladores

Operadores lógicos

• Exemplos a = 0;

b = 1;

(a !=b) && !(b == a)

!(a != b)

&& E

|| OU

! Não