Operador de atribuição



Documentos relacionados
Programas simples em C

1 se n = 0 n (n 1)! se n 1

José Romildo Malaquias

Algoritmos de Busca em Tabelas

Module Introduction. Programação. Cap. 4 Algoritmos e Programação Estruturada

Introdução a Algoritmos Parte 04

Aluísio Eustáquio da Silva

Programação WEB I Estruturas de controle e repetição

Variáveis e estruturas de controlo. Introdução à Programação André L. Santos

Estruturas de Repetição. Programação em Java Estruturas de Repetição

Comandos Sequenciais if else, e Switch

2. OPERADORES ALGORITMOS, FLUXOGRAMAS E PROGRAMAS FUNÇÕES... 10

INF 1005 Programação I

Estruturas de Repetição

Estruturas de entrada e saída

OPERADORES E ESTRUTURAS DE CONTROLE

Estruturas de Repetição

UNIVERSIDADE FEDERAL DE SANTA MARIA

Convertendo Algoritmos para a Linguagem C

Linguagem C: Estruturas de Controle. Prof. Leonardo Barreto Campos 1

P r o g r a m a ç ã o d e C o m p u t a d o r e s 1 o S e m P r o f. A n d r é A m a r a n t e L u i z L A B 5 tag %2d while printf PE1:

Cap.2.5: Design de Algoritmos e Programação Estruturada. Algoritmos, fluxogramas e pseudo-código

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

Python Condicionais e Loops. Introdução à Programação SI1

Linguagem C: for. Introdução à linguagem C(++) Profs. Anilton, Lasaro e Paulo Coelho. Faculdade de Computação Universidade Federal de Uberlândia

Capítulo 2: Introdução à Linguagem C

Estrutura de Dados Básica

Prof. Dr. Abel Gomes Cap.4: Design de Algoritmos e Programação Estruturada. Algoritmos, fluxogramas e pseudo-código

Programação: Estruturas de seleção

VisuALG Estruturas de Repetição. Professores: Vilson Heck Junior Felipe Schneider Costa

CURSO BÁSICO DE PROGRAMAÇÃO AULA 9. Introdução a linguagem C Estruturas de decisão

Por que o quadrado de terminados em 5 e ta o fa cil? Ex.: 15²=225, 75²=5625,...

Solucionário de. Programação

Javascript 101. Parte 2

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C / C++

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

Introdução à Lógica de Programação (cont.)

Componentes da linguagem C++

compreender a importância de cada estrutura de controle disponível na Linguagem C;

Programação I. Departamento de Engenharia Rural Centro de Ciências Agrárias

Resolução de problemas e desenvolvimento de algoritmos

20 Caracteres - Tipo char

ESTRUTURA CONDICIONAL

9.1.2 Laços Controlados por Entrada: Contador

Introdução à Programação Aula 11 Mais sobre ciclos e iteração

Sumário. INF01040 Introdução à Programação. Elaboração de um Programa. Regras para construção de um algoritmo

7. Estrutura de Decisão

Estruturas de repetição (Ciclos)

Linguagem e Técnicas de Programação I Operadores, expressões e funções. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Vetores. Vetores. Figura 1 Exemplo de vetor com 10 elementos

O comando if. O comando condicional permite incluir no programa trechos de código que dependem de uma ou mais condições para sua execução.

A lógica de programação ajuda a facilitar o desenvolvimento dos futuros programas que você desenvolverá.

Curso C: Controle de Fluxo

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Estrutura Condicional em Java

2. ALGORITMOS. Unesp Campus de Guaratinguetá. Curso de Programação Computadores Prof. Aníbal Tavares Profa. Cassilda Ribeiro

PROGRAMAÇÃO INSTRUÇÕES DA LINGUAGEM C

Algoritmos e Programação

Conceitos Básicos de C

BARRAMENTO DO SISTEMA

BCC202 - Estrutura de Dados I

Resolução de sistemas lineares

Conceitos Importantes:

Exercícios Teóricos Resolvidos

Controle de Fluxo Comandos de decisão

02. [Manzano, 1996] Escreva um programa em C que apresente os quadrados dos números inteiros de 15 a 200.

Apresentar os conceitos básicos e as estruturas de linguagem relacionadas à tomada de decisão ofertadas pela linguagem C, tais como:

Faculdade de Ciências Universidade Agostinho Neto Departamento de Matemática e Engenharia Geográfica Ciências da Computação

Edwar Saliba Júnior. Dicas, Comandos e Exemplos Comparativos entre Linguagem Algorítmica e Linguagem C

LÓGICA DE PROGRAMAÇÃO. Vitor Valerio de Souza Campos

Bacharelado em Ciência e Tecnologia Bacharelado em Ciências e Humanidades. Representação Gráfica de Funções

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Processamento da Informação Teoria. Algoritmos e Tipos de dados

LINGUAGEM C. Estrutura básica de um programa

Lógica de Programação

Algoritmos e Programação (Prática) Profa. Andreza Leite andreza.leite@univasf.edu.br

Programação Básica em Arduino Aula 2

Controle de Fluxo Comandos de decisão

Introdução à Programação

Aula 1. // exemplo1.cpp /* Incluímos a biblioteca C++ padrão de entrada e saída */ #include <iostream>

Algoritmos e Programação Estruturada

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Introdução à Ciência da Computação

Computação e Processamento de Dados CPD INF400

Programação. Folha Prática 3. Lab. 3. Departamento de Informática Universidade da Beira Interior Portugal Copyright 2010 All rights reserved.

9 Comandos condicionais

Introdução à Programação

AULA 2: INTRODUÇÃO A LINGUAGEM DE C. Curso: Ciência da Computação Profª.: Luciana Balieiro Cosme

Pipeline. Todos os estágios devem estar prontos ao mesmo tempo para prosseguir.

Exercícios de Fixação Pseudocódigo e Estruturas Básicas de Controle

ALGORITMOS PARTE 01. Fabricio de Sousa Pinto

Algoritmos Computacionais ( Programas )

Algoritmo. Prof. Anderson Almeida Ferreira. Agradeço ao prof. Guilherme Tavares de Assis por fornecer slides que fazem parte desta apresentação

Transcrição:

Operador de atribuição Variavel = Express~ao [epd94, Cap. 3.11-3.12] Suponhámos que y tem valor 5: x = y + 1; É calculada assim (e por esta ordem): A expressão da direita é calculada, susbtituindo a variável pelo valor que ela guarda e efectuando a operação. O seu valor é guardado na variável à esquerda. y x 5 6 5 + 1 6 Departamento de Ciência de Computadores da FCUP PI Aula 3 1

Calcula y = (x + 2 ) * x; o valor de x é 6 e de y é 48 Se y tiver o valor 3 depois de executar x = (y + 2) * (y - 1); o valor de x é 10. ERRO: x + 1 = x não é uma expressão VÁLIDA! Exercício 3.1. Qual o valor de x e y depois de executadas as instruções: x = 4; y = 3; x = x + y; y = 2 * x; Numa atribuição podem fazer parte outras expressões de atribuição x = (y = 3) + (z = 4 * 6) atribui a y o valor 3, a z o valor 24 e x o valor 27. Departamento de Ciência de Computadores da FCUP PI Aula 3 2

Operadores incrementais O C tem dois operadores especiais para incrementar e decrementar variáveis. O operador ++ adiciona 1 ao seu operando. ++n equivale a n = n + 1; n n 5 6 5 + 1 = 6 O operador -- subtrai 1 ao seu operando. --n equivale a n = n - 1; n n 5 4 5 1 = 4 Ambos podem ser usados como operadores prefixos (++n) ou sufixos (n++). Departamento de Ciência de Computadores da FCUP PI Aula 3 3

No primeiro caso a variável é incrementada antes do seu valor ser usado e enquanto no segundo o seu valor é usado e só depois é que a variável é incrementada. (Análogo para --). Se n tem o valor 5, a expressão x = ++n, n 5 n 4 5 + 1 = 6 x 6 coloca em x o valor 6 e n com o valor 6. Departamento de Ciência de Computadores da FCUP PI Aula 3 4

Mas x = n++, n 5 x 5 5 n 6 5 + 1 = 6 coloca em x o valor 5 e n com o valor 6. Departamento de Ciência de Computadores da FCUP PI Aula 3 5

Operadores de atribuição aritméticos Podemos ainda generalizar os operadores de incremento/decremento. A expressão i = i + 2 pode ser escrita como i += 2 Todos os operadores aritméticos binários tem um operador de atribuição da forma op= var op= e2 é equivalente a var = (var) op (e2) Nota que: x *= y + 1 é equivalente a x = x * (y + 1)e não a x = x * y + 1!! Vantagem: saber-se de antemão um dos operandos da operação permite uma compilação mais eficiente. Departamento de Ciência de Computadores da FCUP PI Aula 3 6

Quais os valores das variáveis, no fim de cada grupo? 1. int n=4,m,k; n=4; n++; m=--n; k=++m; m=--k; 2. int c=3, d=5, e=4, f=6, g=12; c+=7; d-=4; e*=5; f/=3; g%=9; 3. int x=10,t=17; t -= --x; t += x--; Departamento de Ciência de Computadores da FCUP PI Aula 3 7

Expressões condicionais A instrução if (a>b) z=a; else z=b; determina o máximo de a e b e atribui esse valor a z. Usando o operador condicional ternário? : podemos escrever a expressão condicional, (a>b)? a : b cujo valor depende do valor da comparação A instrução seguinte é equivalente à anterior: z= (a>b)? a : b; /* z é o maximo de a e b */ Departamento de Ciência de Computadores da FCUP PI Aula 3 8

A forma geral da expressão condicional é e1? e2 : e3 A expressão e1 é calculada primeiro; se não for nula (verdadeira), então a expressão e2 é calculada e o seu valor é o valor da expressão condicional. Caso contrário a expressão e3 é calculada e a expressão condicional tem o seu valor. Exemplos: passo = (nota >= 10)? 1 : 0; nota >= 10? printf("passei!!") : printf("reprovei..."); Departamento de Ciência de Computadores da FCUP PI Aula 3 9

Tipos de Instruções ( Imperativas ) Atribuição : associção de valores a variáveis Chamada de função Regresso de função Ex. return Instrução composta sequência de instruções [Bro97, Cap. 5.2] Condicional (ou Seleção) Execução de instruções condicionada pela verificação duma condição. Ex. if...;else... Ciclo Repetição (iteração) de instruções com abse numa condição. Ex. while Escolha de instruções com base em valores de um parâmetro. Ex. switch Transferência de controlo (saltos) execução duma instrução noutro ponto do programa. Departamento de Ciência de Computadores da FCUP PI Aula 3 10

Atribuição Variavel op atrib Express~ao; onde op atrib pode ser =, +=, -=, *=, /=, %=. Supondo que inicialmente x vale 11 e y vale 22. Quanto valem as variáveis depois de executar cada um dos seguintes grupos 1. t=x; x=y; y=t; 2. x=t; y=x; t=x; 3. x=x; y=y; t=t; Departamento de Ciência de Computadores da FCUP PI Aula 3 11

Instrução Composta Sequência de instruções delimitadas por chavetas. Ex: { t=5; x=y; calcula(t,x); if(1) printf( Ola ); Departamento de Ciência de Computadores da FCUP PI Aula 3 12

Estruturas de Controlo Usalmente as instruções são executadas pela ordem em que foram escritas: execução sequêncial Contudo é essencial a existência de instruções que possam alterar qual a próxima instrução a ser executada: transferência de controlo MAS... a transferência de controlo não deve ser só um goto,mas sim estruturada de modo a tornar os programas menos complexos, mais legíveis e menos susceptíveis a erros... Exemplo: (não em C) goto 40 20 t = p + 10 goto 70 40 if p < 50 goto 60 goto 20 60 t = p + 5 70 stop <=> Conclusão: em C não é necessário goto! if p < 50 then t = p + 5 else t = p + 10 70 stop Departamento de Ciência de Computadores da FCUP PI Aula 3 13

Instruções Condicionais if [epd94, Cap. 3.4-3.6] if ( Exp ) Inst A expressão Exp é avaliada; se tiver um valor não nulo (verdade) então a instrução Inst é executada; se for falsa, não faz nada. if (n == 9) printf("%d",n); if ( Exp ) Inst1 else Inst2 A expressão Exp é avaliada; se tiver um valor não nulo (verdade) então a instrução Inst1 é executada; se for 0 (falsa), a instrução Inst2 é executada. if ( n == 9) printf("%d\n",n); else printf("nao\n"); Nota que Inst, Inst1 e Inst2 podem ser instruções compostas. Departamento de Ciência de Computadores da FCUP PI Aula 3 14

Uma instrução da forma if(e1) {if(e2) I1 else I2 else I3 executa I1 se E1 e E2 são verdadeiros. I2 se E1 é verdadeiro e E2 falso. I3 se E1 é falso. Exemplos: if (5 <= 2) x = 2; Não faz nada. if (5 <= 2) x = 2; else x = 7; Coloca 7 em x Problema 1. Se x é par, soma 1 e se é ímpar subtraí 1 Porque está errado? if (x %2 == 0) x = x + 1; if (x %2!= 0) x = x - 1; CERTO: if (x %2 == 0) x = x+1; else x = x-1; Departamento de Ciência de Computadores da FCUP PI Aula 3 15

Ordena 3 Parte de um programa que escreve por ordem decrescente os valores de x, y e z. if(x>=y && x>=z){ /* x e o maior */ if(y>=z) printf("%d %d %d\n",x,y,z); else printf("%d %d %d\n",x,z,y); else if(y>=x && y>=z){ /* y e o maior */ if(x>=z) printf("%d %d %d\n",y,x,z); else printf("%d %d %d\n",y,z,x); else{ /* z e o maior */ if(x>=y) printf("%d %d %d\n",z,x,y); else printf("%d %d %d\n",z,y,x); Departamento de Ciência de Computadores da FCUP PI Aula 3 16

Instrução de ciclo while while (Expr) Inst [epd94, Cap. 3.7-3.10] onde Expr é uma expressão e Inst uma instrução (que pode ser composta). Funcionamento: 1. A expressão Expr é avaliada. 2. Se o resultado for 0 (falsa), a instrução termina. 3. Se o resultado for não nulo (verdade), é executado Inst e volta para o passo 1. Nota que se a expressão é inicialmente falsa, Inst não chega a ser executada nenhuma vez. Departamento de Ciência de Computadores da FCUP PI Aula 3 17

Instruções do C: sequenciais, condicionais e repetições Departamento de Ciência de Computadores da FCUP PI Aula 3 18

Departamento de Ciência de Computadores da FCUP PI Aula 3 19

Factorial Problema 2. Dado um inteiro positivo n determina o seu factorial n!, isto é o produto de todos os inteiros inferiores ou iguais a n (0! = 1,n! = 1 2... n). Ideia da resolução Começar por valores pequenos: 2!, 3!, 4!Para 4:multiplicar 1 por 2 e guardar o resultado, multiplicar o resultado por 3 e guardar o resultado, multiplicar o resultado por 4 e guardar o resultado.analogamente para n. Mas, como gerar os inteiros? Como guardar os valores? Algoritmo Ler n fact = 1 i = 1 enquanto i <=n fazer fact = fact * i i = i + 1 Programa em C main() { int n, i = 0, fact = 1; scanf("%d",&n); while(i <= n) { fact = fact * i; i = i + 1; printf("fact(%d) = %d\n",n,fact); Departamento de Ciência de Computadores da FCUP PI Aula 3 20

O que faz este programa? main(){ int x,i,p; x=2; while(x!=0){ scanf("%d",&x); if(x<0) break; p=1; i=1; while(i<=x){ p*=i; i++; printf("factorial(%d)= %5d\n",x,p); Departamento de Ciência de Computadores da FCUP PI Aula 3 21

Tutor 2 Problema: O tutor outra vez... mas permitindo que o aluno tente várias vezes e no fim faça o ponto da situação... #include <stdio.h> main() { int n1,n2,sol,res; int n = 0,certos = 0, errados = 0; printf("\n Bem vindo ao SOMA BEM!!!\n\n"); while(1) { printf("introduz o primeiro inteiro (ou -1 para terminar)\n"); scanf("%d", &n1); if (n1==-1)break; printf("introduz o segundo inteiro\n"); scanf("%d",&n2); /* numero de tentativas */ n++; /* solucao */ sol = n1+n2; Departamento de Ciência de Computadores da FCUP PI Aula 3 22

/*resposta do aluno */ printf("introduz a tua solucao\n"); scanf("%d",&res); /*compara as solucoes */ if (sol == res) {printf("parabens!!!\n");certos++; if (sol!= res) { printf("enganaste-te! O resultado era %d\n",sol); errados++; if(n) { printf("em %d tentativas:\n",n); printf("\t\tcertas %d (%d%%)\n",certos,certos*100/n); printf("\t\terradas %d (%d%%)\n",errados,errados*100/n); printf("ate a proxima!!!!\n"); Departamento de Ciência de Computadores da FCUP PI Aula 3 23

É o máximo, É o máximo... Problema 3. a um. Determinar o maior inteiro duma sequência de n inteiros, lidos um Ideia da resolução: Considerar alguns valores 30, 45, 40, 38, 49, 55, 40, 34 e resolver o problema à mão. Descrever o que foi feito: Considerar o primeiro o maior e ir sucessivamente comparando como os restantes. Sempre que um valor for superior ao maior (até então), o maior passa a ser esse valor. Como representar o sucessivamente?usando um contador, que pode ser o próprio n... Importante: em cada momento é só necessário o último número lido e o máximo até aí. Departamento de Ciência de Computadores da FCUP PI Aula 3 24

Variáveis necessárias: n número de números ainda a ler i cada valor lido max em cada momento, guarda o maior valor encontrado até aí Algoritmo: Ler n Se n < 1 termina Ler i max=i n=n-1 Enquanto n > 0 faça: Ler i Se i > max ent~ao max=i n= n - 1 Escreve max Departamento de Ciência de Computadores da FCUP PI Aula 3 25

Programa em C main() { int n,i,max; printf("quantos? "); scanf("%d",&n); if (n <= 0) return 0; printf("\n Primeiro: "); scanf("%d",&i); max =i; --n; while(n>0) { printf("\n Outro: "); scanf("%d",&i); if (i> max) max=i; --n; printf(" o maximo e %d \n",max); Departamento de Ciência de Computadores da FCUP PI Aula 3 26

Análise de propriedades duma sequência de inteiros lidos um a um 1. contar o número de elementos com uma dada propriedade. Ex: serem pares, serem múltiplos (divisores) do primeiro elemento, serem maiores que o primeiro, etc. 2. determinar o maior e o menor com uma dada propriedade 3. somar os números com uma dada propriedade. Ex: serem positivos, pares, etc Algoritmo genérico Ler os números um a um; para cada número lido verificar a propriedade e se a satisfazer efectuar a tarefa pretendida. 4. o tamanho da maior subsequência de inteiros consecutivos com uma dada propriedade. Ex:serem pares, serem iguais, etc. 5. o tamanho da maior subsequência não crescente 6. contar o número de subsequências (com mais que um elemento) com uma dada propriedade. Ex: serem crescentes, só terem pares, etc. Departamento de Ciência de Computadores da FCUP PI Aula 3 27

7. verificar se a sequência é crescente Algoritmo genérico Ler os números um a um, guardando sempre o anterior; para cada número lido comparar com o anterior; verificar se a propriedade se mantêm ou não; senão reiniciar uma nova contagem e testar a propriedade. 8. contar as ocorrências de um mesmo número, em posições particulares. Ex: ímpares ou pares consecutivas,isto é, se o 1 ō é igual ao 3 ō, o 2 ō é igual ao 4 ō, o 3 ō é igual ao 5 ō,... 9. se são ou gerar termos de uma sucessão num dado intervalo. Ex: sucessão dos pares, dos múltiplos de um dado número, da forma 2 n, uma sucessão aritmética, etc, u n = f(u n 1,..., u nk ) e u 1,..., u k valores dados Algoritmo genérico para geração São necessárias k+1 variáveis que guardem sempre os últimos k termos e o próximo. Obtém-se o valor seguinte usando a expressão e escreve-se. Actualizam-se os últimos k termos. Departamento de Ciência de Computadores da FCUP PI Aula 3 28

Como termina a sequência? sabendo o número de elementos no início e usando um contador supondo que é terminada por um valor especial (sentinela) Vamos supor que a sequência termina por zero. Departamento de Ciência de Computadores da FCUP PI Aula 3 29

Contar os múltiplos do 1 ō main(){ int i,m,c=0; scanf("%d",&i); m=i; while(i!=0) { if(i%m==0) c++; scanf("%d",&i); printf("%d",c); Somar os maiores que o 1 ō main(){ int i,m,s=0; scanf("%d",&i); m=i; while(i!=0) { if(i>m) s+=i; scanf("%d",&i); printf("%d",s); Departamento de Ciência de Computadores da FCUP PI Aula 3 30

o tamanho da maior subsequência de números iguais não crescente main(){ int i,ant,max=1,c=1; scanf("%d",&ant); if (ant == 0) return 0; scanf("%d",&i); while(i!=0){ if(i==ant) c++; else { if(max<c) max=c; c=1; ant=i; scanf("%d",&i); if(max<c)max=c; printf("max=%d\n",max); main(){ int i,ant,max=1,c=1; scanf("%d",&ant); if (!ant) return 0; scanf("%d",&i); while(i!=0){ if(i<=ant) c++; else { if(max<c) {max=c; c=1; ant=i; scanf("%d",&i); if(max<c)max=c; printf("max=%d\n",max); Departamento de Ciência de Computadores da FCUP PI Aula 3 31

Sucessão de Fibonacci Problema: Considerar uma população de coelhos que se reproduz segundo as seguintes regras: Cada par de coelhos produz um novo par por mês Os coelhos são férteis a partir do segundo mês Os coelhos não morrem Supondo que nasce um par de coelhos em Janeiro, quantos pares de coelhos existem no fim do ano? AlgoritmoDeterminar o número de pares em cada mês: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 0 1 1 2 3 5 8 13 21 34 55 89 144? Departamento de Ciência de Computadores da FCUP PI Aula 3 32

Generalizando, ao fim de n > 1 etapas temos: f n = f n 1 + f n 2, e f 0 = 0, f 1 = 1 São necessárias 3 variáveis: uma para o termo corrente (z) e duas para os dois anteriores (x e y). Como ter sempre os dois anteriores? O termo corrente é o anterior na próxima vez e o anterior é o anterior do anterior... Mas não posso fazer y=z; x=y. Porquê? Pseudo-código Ler o numero de termos a calcular (Ler n) Sejam x=0 e y=1 Enquanto n > 0 faca: z=x+y x=y y=z n=n-1 Escrever z Departamento de Ciência de Computadores da FCUP PI Aula 3 33

Departamento de Ciência de Computadores da FCUP PI Aula 3 34

O programa em C main() { int x=0,y=1,z,n=11; printf("%d\n %d\n",x,y); while (n>0) { z=x+y; x=y; y=z; printf("%d \n",y); --n; Execução: %cc fibo.c -o fibo %fibo 0 1 1 2 3 5 8 13 21 34 55 89 144 Exercício 3.2. Modifica o programa anterior para calcular os termos da sucessão de Fibonacci inferiores a um dado valor (p.e 1000). Departamento de Ciência de Computadores da FCUP PI Aula 3 35

Leituras [epd94, Cap. 3] [Bro97, Cap. 5.2] Departamento de Ciência de Computadores da FCUP PI Aula 3 36

Referências [Bro97] J. Glenn Brookshear. Computer Science, an overview. Addison-Wesley, 1997. [epd94] H.M. Deitel e P.J. Deitel. C:How to Program. Prentice Hall International Editions, 2 edition, 1994. Departamento de Ciência de Computadores da FCUP PI Aula 3 37