Profa. Mercedes Gonzales Márquez

1 Profa. Mercedes Gonzales MárquezPCI- Introdução Profa. ...
Author: Ruy Raminhos Amarante
0 downloads 1 Views

1 Profa. Mercedes Gonzales MárquezPCI- Introdução Profa. Mercedes Gonzales Márquez

2 Algoritmos Algoritmo: conjunto finito de instruções2 Algoritmos Algoritmo: conjunto finito de instruções O detalhamento das instruções deve ser especificada dependendo de quem irá executar o algoritmo. Programa: Algoritmo que irá ser executado pelo computador. Algoritmo traduzido para uma linguagem de programação que o computador consiga interpretar.

3 De algoritmos a programas3 De algoritmos a programas Neste curso usaremos a linguagem C para descrever os algoritmos. Apos compilar os programas escritos em C, teremos um programa para realizar a tarefa especificada.

4 História breve de linguagens de programação4 História breve de linguagens de programação Os primórdios da programação: programação em código absoluto ou binário (apenas 0s e 1s). Uma melhoria: Cria-se uma linguagem de baixo nível (Linguagem Assembly) para representar as instruções em código binário. Um programa, chamado montador ou assembler, faz a transformação em código binário. LOOP: MOV A, 3 INC A JMP LOOP

5 História breve de linguagens de programação5 História breve de linguagens de programação Uma brilhante ideia: Criação de linguagens de alto nível e compiladores para estas. Mais distantes da linguagem de máquina e mais próximas das linguagens naturais. Mesmo mais compreensíveis, elas não são ambíguas. Um compilador as transforma em código executável. Exemplos de linguagens: C, Python, Java

6 Níveis de abstração • Português: • Linguagem de Máquina:6 Níveis de abstração • Português: – Fácil, intuitivo – Computador não entende – Ambíguo, mal definido • Linguagem de Máquina: – Complexo e trabalhoso – Única forma aceita pelo computador – Preciso, bem definido – Envolve detalhes específicos do computador, irrelevantes para o algoritmo

7 Etapas da resolução de problemas usando o computadorDa apostila do Prof. Alexandre Xavier Falcão

8 8 Conceitos Básicos Computadores – máquinas capazes de solucionar problemas, mas que só agem quando recebem instruções nos mínimos detalhes. A tarefa principal dos computadores é o processamento de dados, ou seja, receber dados (entrada), realizar operações (processamento propriamente dito) e gerar uma resposta (saída).

9 Hardware e dispositivos9 Hardware e dispositivos Estrutura de um computador MEMÓRIA UNIDADE DE ENTRADA UNIDADE DE SAIDA UNIDADE DE CONTROLE UNIDADE LÓGICA E ARITMÉTICA Unidade Central de Processamento (UCP)

10 Hardware e dispositivos1010 Hardware e dispositivos Todo o hardware opera com sinais digitais: sem energia e com energia. Normalmente usamos valores 0 e 1 para representar isto. Chamamos estes sinais de Bit : Valores 0 ou 1. Chamamos de Byte : um agrupamento de 8 bits. Todas as informações armazenadas no computador são representadas por números 0s e 1s. Informações como letras, símbolos, imagens, programas são todas vários 0s e 1s.

11 1111 Software São os programas que executam tarefas utilizando o hardware de um computador. Os softwares são compostos por um conjunto de instruções que operam o hardware. Temos abaixo, por exemplo, três instruções para um computador de 32 bits. Um software e composto por milhares de instruções deste tipo.

12 Hardware e dispositivos1212 Hardware e dispositivos Unidade de entrada – Traduz informação de um dispositivo de entrada em um código que a UCP entende (padrões de pulsos elétricos compreensíveis ao computador). Exemplos: Teclado, drive de CD / DVD-ROM, pen drive, joystick, câmera filmadora, câmera digital, tela sensível ao toque, mesa gráfica, caneta ótica, etc. Unidade de saída – converte os dados processados, de pulsos elétricos em palavras ou números que podem ser escritos em vídeos ou outros dispositivos de saída. Exemplos: Vídeo, Impressora, drive de CD/DVD-ROM, pen drive, caixa de som, etc.

13 Hardware e dispositivos1313 Hardware e dispositivos Memória – armazena os dados e o próprio programa. Número finito de localizações que são identificadas por meio de um único endereço. 1000 1003 1004 1005 1006 1007 1008 1009 1010 1001 1002 Read/Write CPU Endereço Dados Escrita – CPU envia endereço da posição de memória a ser escrita e dados a escrever. Leitura – CPU envia endereço da posição de memória a ser lida e recebe dados.

14 Hardware e dispositivos1414 Hardware e dispositivos Unidade lógica e aritmética – São executadas operações matemáticas de adição, multiplicação e divisão e operações lógicas como conjunção, disjunção, ou exclusivo e outras. Unidade de controle – Responsável pelo “tráfico” de dados. Controla a transferência de dados da memória para a unidade lógica e aritmética, da entrada para a memória e da memória para a saída.

15 Compilando um programa no CodeBlocks do windows1. Crie um arquivo novo utilizando File → New → Empty file. 2. Salve o arquivo apos digitar o cabecalho, utilizando um nome apropriado terminado com a extensão .c . Para tanto, va em File → Save File (CTRL + S) e escolha um nome. No caso de exemplo utilizamos altura.c. 3. Insira o código lembrando sempre de indentá-lo com a tecla TAB e comenta-lo apropriadamente. Note que o Code::Blocks tende a indentar o código automaticamente, mas haverá vários momentos em que a indentação devera ser corrigida manualmente. Apos alterar o arquivo .c, salve-o e aperte a tecla F9 (Build → Build and Run) para compilá-lo e executá-lo. Pressione também F2 para aparecer a um retângulo abaixo do código com a saída da compilação caso já não esteja aparecendo.

16 Primeiro Programa 1616 Estrutura do código fonte – Comentários– Diretivas de compilador – Procedimento principal

17 Primeiro Programa 1717 /* file: oi.c* Este programa escreve a mensagem "Oi pessoal" * na tela. O programa foi tomado do livro * "Art and Science of C" de Eric Roberts. */ #include int main(){ printf("Oi pessoal.\n"); }

18 Primeiro Programa 1818 /* file: oi.c* Este programa escreve a mensagem "Oi pessoal" * na tela. O programa foi tomado do livro * "Art and Science of C" de Eric Roberts. */ #include int main(){ printf("Oi pessoal.\n"); } Comentários Diretivas de Compilador Procedimento Principal

19 Primeiro Programa 1919 Comentários Texto ignorado pelo compiladorDocumentação útil para descrever trechos do algoritmo Possível em qualquer posição do código fonte Duas formas para comentários: - Uma linha: // Comentário ... - Várias linhas: /* Comentário... mais comentários ... */

20 Primeiro Programa 2020 Diretivas de Compilador:Informam outros arquivos que devem ser consultados antes de compilar. Definem parâmetros utilizados pelo compilador. São colocadas no início do código fonte. Exemplos: #include #include #include

21 Primeiro Programa 2121 Procedimento principal: Sequência de instruçõesPontuação: ponto-e-vírgula termina instruções Chaves agrupam instruções relacionadas int main(){ printf("Oi pessoal.\n"); }

22 2222 Primeiro Programa Caso o programa não esteja de acordo com as regras da linguagem, erros de compilação ocorrerão. Ler e entender estes erros e muito importante. #include int main() { printf(“Oi pessoal!\n"); Após a compilação teremos oi.c: In function `main': oi.c:5: error: syntax error at end of input

23 Memória 2323 • Memória: sequência de células• Endereço: posição da célula • Células armazenam dados – Valor pequeno: uma célula – Valor grande: duas ou mais células

24 Memória 2424 • Operações na memória:1. Consulta (lê) células de memória 2. Programa calcula um novo valor 3. Armazena (escreve) o novo valor em uma célula

25 Variáveis 2525 • Abstração dos endereços de memória.• Rótulo simbólico para cada endereço.

26 Variáveis 2626 • Variável: nome simbólico associado a um dado.Nome (rótulo) Variável: Valor (conteúdo)

27 Declarando uma variável2727 Declarando uma variável Declara-se da seguinte forma: Tipo Variável Nome Variável; Exemplo : int numero;

28 2828 Variáveis inteiras Os seguintes são os tipos da linguagem C que servem para armazenar inteiros: int: Inteiro cujo comprimento depende do processador. E o inteiro mais utilizado. Em processadores Intel comum, ocupa 32 bits e pode armazenar valores de a unsigned int: Inteiro cujo comprimento depende do processador e que armazena somente valores positivos. Em processadores Intel comum, ocupa 32 bits e pode armazenar valores de 0 a

29 2929 Variáveis inteiras long int: Inteiro que ocupa 64 bits em computadores Intel de 64bits e pode armazenar valores de aprox. -9 x1018 a aprox. 9 x1018. unsigned long int: Inteiro que ocupa 64 bits e em computadores Intel de 64bits e armazena valores de 0 ate aprox. 18 x1018. short int: Inteiro que ocupa 16 bits e pode armazenar valores de a unsigned short int: Inteiro que ocupa 16 bits e pode armazenar valores de 0 a

30 Variáveis de tipo caracter3030 Variáveis de tipo caracter Variáveis utilizadas para armazenar letras e outros símbolos existentes em textos. Guarda apenas um caracter. Exemplos de declaração: char umaLetra;

31 Variáveis de tipo ponto flutuante3131 Variáveis de tipo ponto flutuante Armazenam valores reais. Mas possuem problemas de precisão pois há uma quantidade limitada de memória para armazenar um número real. Exemplos de números em ponto flutuante: ou - 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 (+/-) a (+/-)10308

32 Regras para nomes de variáveis em C3232 Regras para nomes de variáveis em C Deve começar e pode conter letra (maiúscula ou minúscula) ou underline(_). Não pode-se utilizar como parte do nome de uma variável: { ( + - * / \ ; . , ? Letras maiúsculas e minúsculas são diferentes: As seguintes palavras são reservadas na linguagem C e portanto 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

33 Comando de atribuição Sintaxe: variável = valor; ou variável=expressão3333 Comando de atribuição Sintaxe: variável = valor; ou variável=expressão int main{ int a,b,soma; a = 6; // o valor 6 atribui-se para a b=15; // o valor 15 atribui-se para b soma=a+b;// uma expressão é atribuída para soma }

34 Comandos de entrada/saída3434 Comandos de entrada/saída Printf para saída de dados: O comando printf apresenta números e caracteres na tela. Sintaxe: printf (string de controle , argumento1, argumento2, ..., argumento n) Uma string de controle pode ter : sequencia de conversão (especifica um formato, inicia com %) Sequencia de escape (inicia com barra invertida \)

35 Comandos de entrada/saída3535 Comandos de entrada/saída Exemplo de impressão de uma string de controle sem sequência de conversão. int main(){ printf (“Imprimindo Notas”); } As principais sequências de conversão são: %c imprime o conteúdo da variável com representação ASCII; %d imprime o conteúdo da variável com representação decimal com sinal; %f imprime o conteúdo da variável com representação com ponto decimal; %u imprime o conteúdo da variável com representação decimal sem sinal;

36 Comandos de entrada/saída3636 Comandos de entrada/saída Exemplo de uso de um único argumento com sequência de conversão: Se x é uma variável inteira com valor 12. printf("Valor de x = %d", x); imprime na tela a frase Valor de x = 12. Exemplo do uso de 2 argumentos também com sequência de conversão: Se y é uma variável do tipo char com valor 'A', então a execução de printf("x = %d e y = %c", x, y); imprime na tela a frase x = 12 e y = A

37 Comandos de entrada/saída3737 Comandos de entrada/saída Sequências de escape mais utilizadas: Sequência Significado \n Quebra de linha (line feed ou LF) \t Tabulação horizontal \b Retrocede o cursor em um caractere (backspace) \r Retorno de carro (carriage return ou CR): volta o cursor para o começo da linha sem mudar de linha \a Emite um sinal sonoro \" Aspa dupla \' Aspa simples \\ Barra invertida \0 Caractere nulo (caractere de valor zero, usado como terminador de strings)

38 Comandos de entrada/saída3838 Comandos de entrada/saída Exemplo usando sequências de escape #include #define PRECO 1.99 int main(){ int pera = 3; char qualidade = ’A’; float peso = 2.5, total=peso*PRECO; printf(“Existem %d peras de qualidade %c “, pera, qualidade); printf(“pesando %f quilos.\n”, peso); printf(“O preco por quilo e %f, total e %f\n”, PRECO, total); }

39 Comandos de entrada/saída3939 Comandos de entrada/saída Observações: Uma largura de campo pode ser opcionalmente especificada logo após o caráter %, como em %3d onde o número decimal terá reservado um espaço de três caracteres para sua representação. Em casos de números reais por exemplo %12.3f especifica que a variável será apresentada em um campo de doze caracteres com uma precisão de três dígitos após o ponto decimal. Exemplo: int main(){ int a=9, b=800; float c= , d= ; printf (“\n a=%3d,\n b=%3d, \n c=%5.2f,d=%5.2f\n”,a,b,c,d); }

40 Comandos de entrada/saída4040 Comandos de entrada/saída Entrada de Dados: O teclado é o dispositivo padrão para entrada de dados. O comando scanf lê números e caracteres digitados no teclado da seguinte forma: scanf (“%d”, &x) onde x é uma variável inteira e &x é o endereço em memória da variável x. Cada tipo de variável requer um símbolo específico de conversão. O símbolo %d é usado para variáveis int,short, unsigned short, unsigned char; O símbolo %u é usado para unsigned inteiro. O símbolo %c para char. O símbolo %s para char e cadeias de caracteres. O símbolo %f para float e o símbolo %lf para double.

41 Comandos de entrada/saída4141 Comandos de entrada/saída #include int main() { int ano; printf(“Digite o ano de nascimento:"); scanf(“%d",&ano); printf(“O ano de nascimento digitado foi: %d\n",ano); }

42 Comandos de entrada/saída4242 Comandos de entrada/saída #include int main() { int base, altura, area; printf`(“Digite a base do retangulo:"); scanf(“%d",&base); printf(“Digite a altura do retangulo:"); scanf(“%d",&altura); area = base* altura; printf(“Valor da area e: %d\n",area); }

43 Operações aritméticas e expressões4343 Operações aritméticas e expressões Operações aritméticas podem ser combinadas formando expressões. Existe uma regra de multiplicação e divisão (mesma prioridade) sobre soma e subtração (mesma prioridade) e a ordem de execução para operadores da mesma prioridade é de esquerda para direita. Exemplo. int main(){ int a=20, b=10; float c=1.5,d; d=c*b/a; /*atribui 0.75 para d*/ printf (“%f”,d); d=c*(b/a); /*atribui 0.0 para d pois a divisão entre inteiros resulta em um inteiro*/ }

44 Operações aritméticas e expressões4444 Operações aritméticas e expressões Note que a melhor forma de garantir o resultado esperado é usar parênteses. A prioridade de execução neste caso é da expressão mais interna para a mais externa. int main(){ int a=20, b=10; float c=1.5, d; d= (((a+5)*10)/2)+b; /*atribui 135 para d*/ }

45 Operações aritméticas e expressões4545 Operações aritméticas e expressões Símbolo Função + Adição - subtração * Multiplicação / Divisão real % Resto da divisão inteira Quociente da divisão inteira

46 4646 Constantes Assim como variáveis, constantes são usadas para armazenar números e caracteres. Exemplos: # define PI /* atribui o valor para PI*/ # define Delta 0.001

47 4747 Definindo novos tipos Podemos usar o comando typedef para definir novos tipos de variáveis ou abreviar tipos existentes. typedef enum {false,true} bool; /* o tipo bool só armazena /false e 1/true*/

48 Operações lógicas e expressões4848 Operações lógicas e expressões Os caracteres &&, ||, !, indicam as seguintes operações lógicas: and, or e not, correspondendo às operações de conjunção, disjunção e negação, respectivamente.

49 Operações lógicas e expressões4949 Operações lógicas e expressões #include /*Biblioteca para incluir comandos de entrada e saída como printf*/ typedef enum {false,true} bool; int main(){ bool v1=true,v2=false,v3; v3=v1&&v2; printf("%d,%d,%d\n",v1,v2,v3); v3=v1||v2; v3=!v1; v3=((v1&&v2))||(!v2); }

50 5050 Funções matemáticas Várias funções matemáticas são disponibilizadas pela linguagem C. Função Resultado Sin(x) Seno de um ângulo cos(x) Coseno de um ângulo tan(x) Tangente do ângulo exp(x) O número e elevado a x. ln(x) Logaritmo neperiano de x sqrt(x) Raiz quadrada de x log10(x) Logaritmo base 10 de x Round(x) Arredondamento do ponto flutuante x.

51 Funções matemáticas 5151 #include #include  /* biblioteca padrão para funções matemáticas básicas*/ # define PI /* atribui o valor para PI*/ int main() { float a=1.0,b; printf("O valor 4.3 arredondado usando round() e %f\n", round(4.3)); b=exp(a); printf(“a=%f, b=%f\n”,a,b); a=2.0; a=pow(a,3.0); printf(“a=%f\n”,a); a=cos(PI/2); }

52 Exercícios de comandos de entrada e saída5252 Exercícios de comandos de entrada e saída Considerando que uma pessoa dorme 8 horas, faça um algoritmo que leia a idade da pessoa e imprima quantos anos ela tem e quantos anos da sua vida, ela passou dormindo. Escreva um algoritmo para ler o nome e a idade de uma pessoa, e exibir quantos dias de vida ela possui. Considere sempre anos completos, e que um ano possui 365 dias. Ex: uma pessoa com 19 anos possui 6935 dias de vida; veja um exemplo de saída: MARIA, VOCÊ JÁ VIVEU 6935 DIAS. Faça um algoritmo que leia o valor do salário de um funcionário, calcule e mostre seu novo salário, sabendo que o mesmo recebeu um aumento de 21,3%. Leia os valores de dois catetos de um triângulo e calcule e mostre o valor da hipotenusa

53 Estrutura Condicional5353 Estrutura Condicional Em muitas tarefas de programação desejamos que o programa execute instruções diferentes dependendo de alguma condição lógica. Estrutura if.. Executa código somente se uma condição for verdadeira (resultado da expressão diferente de zero) Exemplo:

54 Estrutura Condicional5454 Estrutura Condicional int main( ){ int idade; printf("Digite sua idade: "); scanf("%d", &idade); if (idade >= 18) { printf("Voce e maior de idade„); }

55 Estrutura Condicional5555 Estrutura Condicional Estrutura if.. else ... Condição verdadeira: executa o primeiro bloco Caso contrário: executa o segundo bloco if (expressão) { sentença; ... } else{ }

56 Estrutura Condicional5656 Estrutura Condicional int main() { int idade, diferenca_tempo; printf("Digite sua idade: "); scanf("%d", &idade); if (idade >= 18) { diferenca_tempo = idade -18; printf("Voce eh maior de idade ha %d ano(s)", diferenca_tempo); } else { diferenca_tempo = 18 - idade; printf("Espere mais %d ano(s)!\n", diferenca_tempo); }

57 Estrutura de Repetição5757 Estrutura de Repetição Estrutura que permite repetir a execução de um bloco sob o controle de uma condição ou um número pré- determinado de vezes. • Exemplos: – Preencher uma tabela – Aplicar operação a todos elementos da lista – Testar vários números – Percorrer matrizes, vetores, listas

58 Estrutura de Repetição5858 Estrutura de Repetição Repetição controlada por condição Comando while Estrutura: while ( condicao ){ comandos; } Enquanto a condicão for verdadeira (!=0), ele executa o(s) comando(s);

59 Estrutura de Repetição5959 Estrutura de Repetição Repetição controlada por condição (duas questões) 1. O que acontece se a condição for falsa na primeira vez? while (a!=a) a=a+1; R: Ele nunca entra na repetição (loop). 2. O que acontece se a condição for sempre verdadeira? while (a == a) R: Ele entra na repetição e nunca sai (loop infinito)

60 Estrutura de Repetição6060 Estrutura de Repetição Exemplo : Imprimir os 10 primeiros números inteiros int i=1; while (i<=10){ printf(“%d”,i); i++; }

61 Estrutura de Repetição6161 Estrutura de Repetição Exemplo 1: Imprimir os n primeiros números inteiros int i=1,n; scanf(“%d",&n); while (i<=n){ printf(“%d ",i); i++; }

62 Estrutura de Repetição6262 Estrutura de Repetição Exemplo 2: Faça um algoritmo que determine os quadrados de um conjunto de números inteiros positivos. int num; scanf (“%d”,&num); while (num>0){ printf(“%d”,num*num); }