Documente Academic
Documente Profesional
Documente Cultură
Aula 01
Roteiro
Apresentao do curso.
Variveis.
Constantes.
Entrada e sada padro.
Condicionais.
Repeties.
Variveis compostas.
Arquivos.
Introduo Lgica de Programao
2/60
Apresentao do curso
Objetivos:
Embasar alunos com conhecimentos de lgica de
programao e estrutura de dados.
Avaliar alunos quanto sua aptido ao curso de mestrado
em cincia da computao.
Ementa:
Lgica de programao: representao e manipulao de
dados por meio de linguagem de alto nvel.
Estrutura de dados: organizao de dados em estruturas
complexas, descrevendo suas vantagens e aplicaes.
3/60
Apresentao do curso
Programao:
Aulas de quartas e sbados, das 8:00h s 12:00.
Muito material de leitura e exerccios para o
restante da semana...
Avaliao:
Exerccios para entrega para a prxima aula.
Prova no final do curso.
4/60
Memria do Computador
Hierarquia
HD RAM cache registradores.
Lento rpido.
Grande pequeno.
5/60
Estrutura de Programas
Conjunto de instrues para computador.
Usa linguagem de programao.
Curso: C++, sem OO.
Composta de alfabeto, gramtica e semntica.
estruturada.
Declaraes.
Execuo.
6/60
Estrutura de Programas
Estrutura do programa em C++:
<Declaraes>
intmain(){
<Execuo>
return(0);
}
intmain(){ marca o incio do programa.
return(0);} marca o trmino do programa.
Introduo Lgica de Programao
7/60
Variveis
Espaos de memria.
Ilustrao de armrio.
Tipo
Numricas
Enumeradas
Caracteres
Compostas
Nome
Rtulo
Introduo Lgica de Programao
8/60
Descrio
Limites
char
Caracteres/inteiros de 8 bits
unsigned char
short
Inteiros de 16 bits
unsigned short
int
Inteiros de 32 bits
unsigned int
Inteiros de 64 bits
float
Reais de 32 bits
double
Reais de 64 bits
long double
Reais de 96 bits
enum
Enumerados
9/60
Variveis - Declarao
Declarao:
<tipo><nome>;
Exemplos:
Declare varivel inteira de alta preciso de nome
estrelas.
Declares uma varivel que represente o peso de
uma pessoa.
Declare uma varivel que represente a cores
naturais de cabelo.
Introduo Lgica de Programao
10/60
Variveis Atribuio
Inicializao:
O que tem dentro do armrio?
Atribuio necessria!
Atribuio:
<nome>=<valor>;
= diferente da matemtica.
Exemplo:
Atribua 90.5 a uma varivel real de nome peso.
Atribua o caractere 'A' para a varivel do tipo caractere
e de nome inicial.
11/60
Variveis Operaes
Aritmtica:
+*/%.
().
Precedncia.
Exemplo:
Declare trs variveis reais, atribua os valores iniciais
15.7 e 12.9 para duas delas, faa a diviso entre elas
e atribua o resultado para a terceira varivel.
Escreva a expresso em C++ para converter uma
temperatura de graus Celsius para Fahrenheit.
12/60
Variveis Operaes
Converso:
Operaes entre tipos diferentes de variveis em C++ muitas
vezes requerem uma converso explcita de um tipo para outro.
Exemplo:
Some duas variveis reais com valores 12.3 e 14.4 e atribua o
resultado a uma varivel inteira. Qual ser o valor atribudo no
final?
13/60
Constantes
Semelhantes s variveis, mas so atribudas apenas
uma vez.
Declarao:
const<tipo><nome>=<valor>;
Operaes:
Mesmo modo que variveis.
Exemplo:
Escreva um trecho de programa que declare uma
constante real PI, uma varivel real de nome raio, calcule
a rea de uma circunferncia com este raio e guarde o
resultado em uma varivel real de nome area.
14/60
15/60
16/60
Exemplos:
Escreva um programa pea para digitar uma
temperatura em Kelvin, leia a temperatura do
teclado e imprima seu valor correspondente em
Fahrenheits.
Escreva um programa que pea para o usurio
digitar um caractere e depois imprima a frase Voc
digitou o caractere <caracteredigitado>.
Introduo Lgica de Programao
17/60
Operaes Matemticas
Biblioteca math.
Declarao: #include<math>.
Funo
sin(x)
cos(x)
tan(x)
round(x)
log10(x)
pow(x,y)
sqrt(x)
exp(x)
log(x)
Descrio
Seno de um ngulo x em radianos
Cosseno de um ngulo x em radianos
Tangente de um ngulo x em radianos
Arredonda o nmero real x para o inteiro mais prximo
Logaritmo de x na base 10
x elevado a y
Raiz quadrada de x
Exponencial de x
Logaritmo neperiano de x.
18/60
Operaes Matemticas
Exerccios:
Escreva um programa que leia um ngulo em graus
e um raio e converta o ngulo em radianos e
calcule a rea da regio. Utilize a constante PI para
a converso.
Dada uma taxa de juros, um montante inicial e um
nmero de meses digitados no teclado, escreva um
programa que calcule os juros compostos deste
montante no perodo dado.
19/60
Instrues Condicionais
At o momento:
Programas sequencial.
H como verificar se
dado digitado est em
determinada faixa de
valores?
Ex. Dada uma idade,
verificar se maior ou
menor de 18 anos.
Sequncia de execuo
<instruo_1>
<instruo_2>
<instruo_3>
...
<instruo_i>
<instruo_i+1>
<instruo_i+2>
...
<instruo_n>
20/60
Instrues Condicionais - if
Instruo if:
Sequncia de execuo
...
<instruo_a>
Sintaxe:
...
<instruo_a>
if(<comparao>){
<instruo_1>
<instruo_2>
...
<instruo_n>
}
<instruo_b>
...
Comparao
verdadeira
Comparao
Falsa
<instruo_1>
<instruo_2>
...
<instruo_n>
Fim da
Comparao
<instruo_b>
...
21/60
Instrues Condicionais
Tipos de Comparaes
a==b: Verdadeiro se a igual a b.
a!=b: Verdadeiro se a diferente de b.
a<b: Verdadeiro se a menor que b.
a>b: Verdadeiro se a maior que b.
a>=b: Verdadeiro se a maior ou igual a b.
a<=b: Verdadeiro se a menor ou igual a b.
permitido comparar nmeros, caracteres e
variveis.
Introduo Lgica de Programao
22/60
23/60
}
Introduo Lgica de Programao
24/60
Instruo ifelse:
Sintaxe:
...
<instruo_a>
if(<comparao>){
<instruo_i1>
...
<instruo_in>
}
else{
<instruo_j1>
...
<instruo_jn>
}
<instruo_b>
...
Verdadeira
Falsa
<instruo_i1>
...
<instruo_in>
<instruo_j1>
Fim de
...
<instruo_jn> Verdadeira
Fim de Falsa
<instruo_b>
...
25/60
26/60
if(cor_olhos==1)
cout<<"Seusolhossao
castanhos."<<endl;
#include<iostream>
if(cor_olhos==2)
usingnamespacestd;
cout<<"Seusolhossaoverdes."
<<endl;
intmain(){
if(cor_olhos==3)
intcor_olhos;
cout<<"Seusolhossaoazuis."<<
cout<<"Entrecomacor endl;
dosseusolhos(0 if(cor_olhos==4)
pretos,1castanhos,2 cout<<"Voceusalentes."<<
verdes,3azuis,4 endl;
lentes):";
if((cor_olhos<0)||
cin>>cor_olhos;
if(cor_olhos==0)
(cor_olhos>4))
cout<<"Opcaoinvalida!"<<endl;
return(0);
cout<<"Seusolhossao }
pretos."<<endl;
27/60
28/60
case2:
usingnamespacestd;
cout<<"Seusolhossaoverdes."<<
endl;
intmain(){
intcor_olhos;
break;
case3:
cout<<"Entrecomacordosseus
cout<<"Seusolhossaoazuis."<<
olhos(0pretos,1castanhos,2
endl;
verdes,3azuis,4lentes):";
cin>>cor_olhos;
switch(cor_olhos){
case0:
break;
case4:
cout<<"Voceusalentes."<<endl;
break;
cout<<"Seusolhossaopretos."
default:
<<endl;
break;
case1:
cout<<"Opcaoinvalida!"<<endl;
break;
}
cout<<"Seusolhossao
return(0);
castanhos."<<endl;
break;
29/60
Exerccios
1. Dados trs nmeros lidos do teclado, verificar
qual deles o maior.
2. Dados os trs nmeros, imprimir na tela em
ordem crescente.
3. Escreva um programa que, dados dois
nmeros e uma operao escolhida pelo
usurio entre soma, subtrao, diviso ou
mutiplicao, imprima o resultado da operao
entre os dois nmeros.
Introduo Lgica de Programao
30/60
Repeties
Como escrever um programa que leia uma
temperatura em Kelvin do teclado, converta para
Clsius e imprima o resultado no monitor?
Como no existe temperatura negativa em Kelvin,
gostariamos de verificar se a temperatura entrada
pelo usurio vlida.
Mais que isso, gostaramos de dar a oportunidade ao
usurio de entrar com outra temperatura caso a
digitada no seja vlida.
31/60
Repeties - do-while
Instruo do-while
...
Sintaxe:
<instruo_a>
...
<instruo_a>
do{
<instruo_1>
<instruo_2>
...
<instruo_n>
while(<comparao>);
<instruo_b>
...
<instruo_1>
Comparao
verdadeira
<instruo_2>
...
<instruo_n>
Comparao
Falsa
<instruo_b>
...
32/60
Repeties - Exemplo
Programa que l uma temperatura vlida em Kelvin do teclado.
#include<iostream>
usingnamespacestd;
intmain(){
floatkelvin;
do{
cout<<EntrecomumatemperaturaemKelvin:;
cin>>kelvin;
if(kelvin<0.0){
cout<<Temperaturainvlida<<endl;
}
}while(kelvin<0.0);
return(0);
}
33/60
Repeties - while
Instruo while
...
Sintaxe:
<instruo_a>
...
Comparao
verdadeira
<instruo_a>
while(<comparao>){
<instruo_1>
<instruo_1>
<instruo_2>
<instruo_2>
...
<instruo_n>
}
<instruo_b>
...
Desvio
...
<instruo_n>
Comparao
Falsa
<instruo_b>
...
34/60
Repeties - Exemplo
Programa que calcula o fatorial de um inteiro lido do teclado.
#include<iostream>
usingnamespacestd;
intmain(){
intfat,entrada;
cout<<Entrecomumnmerointeirononegativo:;
cin>>entrada;
fat=1;
while(entrada>1){
fat=fat*entrada;
entrada=entrada1;
}
cout<<Ofatorial:<<fat<<endl;
return(0);
}
35/60
Repeties - for
Instruo while
...
Sintaxe:
<instruo_a>
...
<instruo_i>
<instruo_a>
for(<instruo_i>;
<comparao>;
<instruo_ii>){
Comparao
verdadeira
Desvio
<instruo_1>
<instruo_2>
<instruo_1>
...
<instruo_2>
<instruo_n>
...
<instruo_ii>
<instruo_n>
}
<instruo_b>
<instruo_b>
...
Comparao
Falsa
...
36/60
Repeties - Exemplo
Programa que l cinco nmeros positivos do teclado e imprime o maior.
#include<iostream>
usingnamespacestd;
intmain(){
intmaior=1;
intentrada;
inti;
for(i=1;i<=5;i=i+1){
cout<<"Entrecomovalordonmeropositivo"<<i<<:;
cin>>entrada;
if(maior<entrada){
maior=entrada;
}
}
cout<<"Omaiornmerodigitadofoi<<maior<<endl;
return0;
}
37/60
38/60
Repeties Exerccios
1. Altere o programa do fatorial para que a entrada do
usurio seja sempre um nmero no negativo.
2. Dados dois nmeros lidos do teclado, imprimir o MDC
deles.
3. Dado um nmero inteiro positivo, verificar se ele primo.
4. Faa um programa que imprima na tela a soma de n
nmeros inteiros. O nmero n tambm deve ser
informado pelo usurio. Certifique que n seja um nmero
positivo.
39/60
Cadeias (Vetores)
Problema: armazenar as notas de 100 alunos.
100 variveis? No!
Cadeias (arrays) , ou vetores.
Sintaxe de declarao:
<tipo><varivel>[<tamanho>];
Exemplos:
intbrilho[4];
charnome[50];
floatnota[100];
40/60
Cadeias - Acesso
Com poucas excees, os vetores normalmente so
acessados para leitura ou escrita elemento por
elemento.
Exemplos:
roda[0]=33.5;
cin>>rua[3];
if(dama[2]=='h')
cout<<pessoa[1];
Note que os ndices do vetor variam entre 0 e
<tamanho> - 1.
Introduo Lgica de Programao
41/60
Cadeias - Exemplo
#include<iostream>
using namespace std;
int main() {
int vetor[ 10 ], i;
for( i = 0; i < 10; i++ ) { // Leitura dos elementos do vetor.
cout << "Entre com o valor do elemento " << i+1 << " do vetor: ";
cin >> vetor[ i ];
}
cout << "Os valores digitados foram:" << endl;
for( i = 0; i < 10; i++ ) // Escrita dos elementos do vetor na tela.
cout << vetor[ i ] << "; ";
cout << endl;
return( 0 );
}
42/60
Matrizes
Matrizes em C++: extenso de vetores para duas
ou mais dimenses.
Sintaxe de declarao:
<tipo> <varivel>[<tamanho_1>]
[<tamanho_2>]...[<tamanho_n>];
Exemplos:
int tabela[20][30];
float nota[50][50][50];
char nome[20][150];
Introduo Lgica de Programao
43/60
Matrizes - Exemplo
Clculo de determinante de uma matriz 2x2.
#include<iostream>
usingnamespacestd;
intmain(){
floatm[2][2],det;
inti,j;
for(i=0;i<2;i++){//Leituradoselementosdamatriz.
for(j=0;j<2;j++){
cout<<"Entrecomoelemento"<<i+1<<","<<j+1<<":";
cin>>m[i][j];
}
}
det=m[0][0]*m[1][1]m[0][1]*m[1][0];//Clculododeterminante
cout<<"Odeterminantedamatriz"<<det<<endl;
return(0);
}
44/60
45/60
Sintaxe de declarao:
charc[50];
Cadeias de caracteres em C++ utilizam caractere de valor 0 cmo
controle.
Tamanho deve levar em conta este caractere.
Caracteres especiais:
'\n': tecla enter; '\t' tecla tab; '\': aspas duplas;
'\\': uma barra invertida; '\'': aspas simples.
46/60
Exemplo:
charnome[100];
cout<<Digiteonome:;
cin>>nome;
cout<<Onomedigitadofoi:<<nome<<
endl;
47/60
48/60
49/60
50/60
Registros
Com vetores, matrizes e cadeias de caracteres:
Agrupar dados do mesmo tipo.
Registros:
Agrupar dados de tipos diferentes.
Sintaxe de declarao:
struct<nome_registro>{
<tipo1><nome1>;
<tipo2><nome2>;
<tipo3><nome3>;
...
}<var1>,<var2>;
51/60
52/60
Registro - Acesso
Sintaxe de acesso de um campo:
<nome_varivel>.<nome_campo>
Exemplo:
...
structaluno{
charnome[200];
intra;
floatnota[4];
}melhor_aluno,turma[100];
...
melhor_aluno.nota[0]=10.0;
turma[5].ra=546678;
cin>>turma[99].nome;
melhor_aluno.ra=111111;
...
53/60
Registro - Exemplo
#include<iostream>
intmain(){
structaluno{
charnome[200];
intra;
}aluno1,aluno2;
cout<<EntrecomoRAdo
segundoaluno:);
cin>>aluno2.ra;
cout<<Osdadosdoprimeiro
aluno:<<endl;
cout<<Nome:<<aluno1.nome<<
endl;
cout<<Entrecomonomedo cout<<RA:<<aluno1.ra<<
endl<<endl;
primeiroaluno:;
cin>>aluno1.nome;
cout<<Osdadosdosegundo
aluno:<<endl;
cout<<EntrecomoRAdo
cout<<Nome:<<aluno2.nome<<
primeiroaluno:;
cin>>aluno1.ra;
endl;
cout<<RA:<<aluno2.ra<<
cout<<Entrecomonomedo endl;
segundoaluno:;
return(0);
cin>>aluno2.nome;
54/60
Registro - Exerccios
1. Altere o programa que contm o registro aluno, incluindo o
campo curso. Leia e imprima esta informao.
2. Escreva um registro que guarde as informaes de nmero
de marca, modelo, cor, ano de fabricao, nmero de portas
de um carro.
3. Faa um programa que permita o armazenamento dos
carros de uma concecionria. O nmero de carros informado
pelo teclado no incio do programa.
4. Faa um programa que armazene os passageiros de um
vo, incluindo seu nome, CPF, idade, sexo e um campo para
informaes adicionais, tais como doenas e dietas. O
programa deve ler e imprimir a informao de 20 passageiros.
55/60
Arquivos
Para armazenar e recuperar dados
permanentes.
Biblioteca fstream.
#include<fstream>
56/60
Arquivos - Acesso
Abertura de arquivo:
<varivel>.open(<nome_arquivo>);
Fechamento de arquivo:
<varivel>.close();
57/60
Arquivos - Exemplo
Ler uma palavra de um arquivo e imprimir na tela.
#include<iostream>
#include<fstream>
usingnamespacestd;
intmain(){
charfname[50]=arquivo.txt;
charpalavra[200];
ifstreamarq_ent;
arq_ent.open(fname);
arq_ent>>palavra;
cout<<palavra;
arq_ent.close();
return(0);
}
58/60
Arquivos - Exerccios
1. Escreva um programa que abra o arquivo de nome
mensagem.txt e escreva nele trs nmeros lidos do teclado.
Deve haver um espao entre cada nmero.
2. Escreva um programa que abra o arquivo de nome
mensagem.txt e escreva nele trs palavras lidas do teclado.
Deve haver um espao entre cada palavra.
3. Escreva um programa que abra o arquivo de nome
mensagem.txt e leia a primeira palavra dele em uma string.
Depois escreva o contedo da string na tela.
4. Escreva um programa que abra o arquivo de nome
mensagem.txt e leia o n-simo nmero contido nele, onde n
lido do teclado.
59/60
60/60