Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Programao Estruturada II
Curso Completo
Apresentao
TUTORIA
INSTRUES:
- MONTAR UM DOCUMENTO COM OS SEGUINTES CONCEITOS:
Variveis / Operadores /Desvios Condicionais /Lao (loops)
Vetores /Anlise de erros /Breakpoints /Watch /Depurao
(Debug) / Arquivos / Ponteiros / Recursividade
Somente conceitos
Referencial Terico (Quem disse?)
Programao Estruturada II
Reviso
REVISO
Programao Estruturada II
Reviso
Reviso
Estrutura de um programa C++:
Bibliotecas de funes
#include <iostream>
int main()
Funo principal do programa
{
cout << "Ol Mundo !!!";
}
Programao Estruturada II
Reviso
Reviso
Variveis:
#include <iostream>
cout << "Variveis:" << genero << "," << idade << "," << nota_final
<< "," << salario << "," << numero_pi << endl;
Programao Estruturada II
Reviso
Reviso
Operadores:
#include <iostream> #include <iostream>
Reviso
Desvios Condicionais:
#include <iostream> #include <iostream>
Reviso
Lao (Loops): #include <iostream>
Condio inicial, final
using namespace std; do loop e contador
int main()
{
for (int i=0;i<=10;i++)
{
cout << i << "\n";
}
Reviso
Vetores:
#include <iostream> Criando um vetor com 10 posies
#include <string.h>
int main()
{
int k[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // inicializando um vetor
DEPURAO E DOCUMENTAO
Depurao e Documentao
Depurao ou Debug
O que :
uma tcnica para executar uma aplicao passo a passo, identificando possveis
erros (bug) ou para o entendimento de uma funcionalidade do programa pelo
desenvolvedor.
Depurao e Documentao
Depurao ou Debug
Mais um pouco:
Depurao ou Debug
Como fazer anlise de um erro:
Depurao ou Debug
Anlise de Cdigo:
for (;i<=10;i++)
{
value[i] = i;
cout << i;
}
}
Depurao e Documentao
Depurao ou Debug
Debug no DevC++:
Depurao ou Debug
Breakpoints:
Marcao do breakpoint
Depurao e Documentao
Depurao ou Debug
Debugando:
Depurao ou Debug
Watch:
Documentao
Sempre !!!:
#include <iostream>
/**
**/
int main()
{
const int TOTAL_PA = 10; // Limite total da progresso aritmtica
int razao = 2; // Razo da progresso
int i = 0; // Indice para efetuar o loop da progresso
int resultadoPa = 0;// Resultado da posio da PA
int resultadoAntPa = 3;// Resultado anterior da posicao da PA
Resumo
int main()
{
valores val;
strcpy(val, "Programao Estruturada II");
cout << "Tipo do usurio:" << val;
}
Arquivos
ARQUIVOS
Arquivos
Arquivos
Bem conhecido no nosso dia-a-dia:
Arquivos
Tipos de Arquivos:
Binrio: arquivos que podem armazenar textos, imagens, planilhas e outros tipos
de informaes. Algumas extenses conhecidas: pdf, doc, xls, gif
Arquivos
Arquivos
Criando arquivos textos em C++:
Include da biblioteca de arquivos
...
ofstream ofs;
ofs.open("ola_mundo.txt", ios::out);
Nome do arquivo
Arquivos
Lendo arquivos textos em C++:
Include da biblioteca de arquivos
Varivel do arquivo
#include <fstream>
...
ifstream ifs;
ifs.open("ola_mundo.txt", ios::in);
Nome do arquivo
Arquivos
Lembrete:
Sempre que um arquivo for aberto para leitura ou escrita, o mesmo deve ser
fechado, para que possa ser utilizado por outros programas e no ocupar recursos
do sistema operacional.
Arquivos
Novos tipos e comandos:
Programao Estruturada II
#include <iostream>
#include <fstream>
#include <strings.h>
using namespace std; Exemplo 3
void gravar_arquivo();
int main()
{
gravar_arquivo();
} Lendo valores a partir do teclado
void gravar_arquivo()
{
int valor_1;
double valor_2;
float valor_3;
char valor_4;
cin >> valor_1;
cin >> valor_2;
cin >> valor_3;
cin >> valor_4; Gravando os valores sequencialmente
ofstream ofs;
ofs.open("numeros.txt", ios::out);
ofs << valor_1 << endl;
ofs << valor_2 << endl;
ofs << valor_3 << endl;
ofs << valor_4 << endl;
ofs.close();
}
#include <iostream>
#include <fstream>
#include <strings.h>
Exemplo 4
using namespace std; void ler_arquivo()
{
void ler_arquivo(); int valor_1;
double valor_2;
int main() float valor_3;
{ char valor_4;
ler_arquivo();
} ifstream ifs;
ifs.open("numeros.txt", ios::in);
if (!ifs.is_open())
Lendo os valores sequencialmente {
cout << "No foi possivel abrir o arquivo" << endl;
return;
}
Arquivos
Formas de abertura de um arquivo:
Parmetro Descrio
ios::in Efetua operao de leitura de arquivo (Sempre usar no ifstream)
ios::out Efetua operao de escrita de arquivo (Sempre usar no ofstream)
ios::binary Cria um arquivo binrio
ios::app Insere valores no fim do arquivo
ios::trunc Apaga o contedo do arquivo e substitui por um novo
#include <iostream>
#include <fstream>
#include <strings.h> Exemplo 5
using namespace std;
void gravar_fim_arquivo();
Abre o arquivo para escrita e
int main() insere valores no final do arquivo
{
gravar_fim_arquivo();
}
void gravar_fim_arquivo()
{
string valor;
valor = "Nova linha no arquivo";
ofstream ofs;
ofs.open("arquivo_linhas.txt", ios::out | ios::app);
ofs << valor << endl;
ofs.close();
}
Arquivos
Arquivos
Lendo um arquivo com vrias linhas:
Arquivos
Gravando estruturas em arquivo:
Para isso vamos aprender uma nova forma de trabalhar com arquivo. Essa nova
forma, podemos gravar e ler informaes utilizando apenas um tipo de varivel,
sem precisar usar o ofstream e o ifstream
Arquivos
Escrevendo/Lendo arquivos textos e binrios em C++:
Include da biblioteca de arquivos
Varivel do arquivo
#include <fstream> Nome do arquivo
...
fstream fst;
fst.open("registros.dat",
ios::in | ios::out | ios::app | ios::binary);
Arquivos
Gravando uma estrutura em um arquivo:
Comando para gravao
Arquivos
Lendo uma estrutura em um arquivo:
Comando para leitura
fst.read((char *)&alu,sizeof(alu))
Arquivos
Resumo:
PONTEIROS
Ponteiros
Ponteiros
O que :
Ponteiros
Mais detalhes:
Ponteiros
Operadores:
Operador Descrio
Ponteiros
Declarando uma varivel do tipo ponteiro:
Nome da varivel
int *ptr;
Tipo da varivel
Operador unrio
#include <iostream> Exemplo 1
int main()
{
int *ptr;
Ponteiros
Declarao e atribuio de ponteiros:
int *ptr;
int valor;
Varivel ponteiro
valor = 1500;
ptr = &valor;
Atribuindo o endereo de
memria
#include <iostream>
Exemplo 2
using namespace std;
valor ptr
int main()
{ 0x23fe44 0x23fe48
int valor;
int *ptr; 1500 0x23fe44 0x23fe44 0x23fe48
valor = 1500;
ptr = &valor;
Ponteiros
Mais detalhes:
int main()
valor ptr total
{
int valor; 0x23fe44 0x23fe48 0x23fe40
int *ptr;
int total;
1600 0x23fe44 0x23fe44 0x23fe48 1600 0x23fe40
valor = 1600;
ptr = &valor;
total = *ptr;
Ponteiros
Importante:
int main()
{
// PROGRAMA COM ERRO NAO COMPILA !!!!
int *ptr_inteiro; ERRO !!!
double valor;
valor = 345.76;
ptr_inteiro = &valor;
Ponteiros
Converso de valores:
Ponteiros
Converso de valores:
Converso de valores
int *ptr_inteiro;
double valor;
Ponteiros
Converso de valores:
double valor_1;
double valor_2;
valor_1 = 345.76;
ptr_inteiro = (int *)&valor_1;
valor_2 = *ptr_inteiro;
Ponteiros
Atribuio de valores:
*ptr = 999;
Atribuindo um valor
#include <iostream>
Exemplo 7
using namespace std;
ptr x
int main()
0x23fe48 0x23fe44
{
int *ptr;
int x; 0x23fe44 0x23fe48 999 0x23fe44
ptr = &x;
*ptr = 999;
Ponteiros
Operao com ponteiros:
Operador Descrio
Ponteiros
Como incrementar e decrementar um ponteiro:
Incremento de ponteiro
int *ptr;
Somente o endereo do ponteiro
atribudo na varivel ser
ptr++; incrementado ou decrementado
ptr--;
Decremento de ponteiro
Ponteiros
Ponteiros
Como incrementar e decrementar o valor de um ponteiro:
Incremento do valor do
int *ptr; Decremento do valor do
ponteiro
ponteiro
(*ptr)++;
(*ptr)--;
O valor atribudo na posio de
memria do ponteiro, ser
incrementado ou decrementado
Programao Estruturada II
#include <iostream>
using namespace std;
Exemplo 8
int main()
{
int *ptr;
int x; Este programa efetua operaes com ponteiros. Vamos
analisar com mais detalhes. Para isso iremos ocultar as
ptr = &x; linhas de cout, pois no afetam o nosso cdigo
*ptr = 999;
cout << "Valor Original:" << ptr << endl;
ptr++;
cout << "Incremento:" << ptr << endl;
ptr--;
cout << "Decremento:" << ptr << endl;
(*ptr)++;
cout << "Inc. valor:" << *ptr << endl;
(*ptr)--;
cout << "Dec. valor:" << *ptr << endl;
}
#include <iostream>
ptr = &x;
*ptr = 999; 0x23fe38 0x23fe38 999 0x23fe34
Ponteiros
Comparao de Ponteiros:
Ponteiros
Vetores:
int main()
{
char valores[100];
char *ptr;
Exibindo valor na posio
strcpy(valores, "Isto um teste"); do vetor
ptr = valores;
Ponteiros
Operadores bit-a-bit:
Operador Descrio
& AND
| OR
^ OR Exclusivo (XOR)
~ Negao
>> Deslocamento de bit a direita
<< Deslocamento de bit a esquerda
Ponteiros
Ponteiros
Tabela verdade dos operadores bit-a-bit:
Ponteiros
Resumo:
Ponteiros
Lista Ligada Simples:
1 2 3
{
char nome[100];
int idade;
alunos *proximo;
} *lista_alunos;
Ponteiros
novo_aluno->proximo = NULL;
if (lista_alunos == NULL)
lista_alunos = novo_aluno;
else
{ Adicionando no final da lista
alunos *p;
p = lista_alunos;
p->proximo = novo_aluno;
}
...
...
alunos *p;
p = lista_alunos;
Exemplo 13
if (p->proximo == NULL)
{
cout << "------------------------------------" << endl;
cout << "Nome do Aluno:" << p->nome << endl;
cout << "Idade do Aluno:" << p->idade << endl;
cout << "------------------------------------" << endl;
}
else
{
while (p != NULL)
{
cout << "------------------------------------" << endl;
cout << "Nome do Aluno:" << p->nome << endl;
cout << "Idade do Aluno:" << p->idade << endl;
cout << "------------------------------------" << endl;
p = p->proximo;
}
}
... Percorrendo a lista ligada
Ponteiros
RECURSIVIDADE
Recursividade
Recursividade
O que :
Recursividade
Mais detalhes:
Recursividade
Exemplo de Fatorial:
O que fatorial?
Exemplo: 6! = 6 * 5 * 4 * 3 * 2 * 1 = 720
FATORIAL DE 6 720 !!!
#include <iostream>
int main()
{
cout << "Valor do fatorial:" << calcular_fatorial(6);
}
Chamada recursiva
int calcular_fatorial(int valor)
{
if (valor == 0)
return 1;
else
{
valor = (valor * calcular_fatorial(valor - 1));
cout << valor << endl;
return valor;
} Vamos ver o programa
} passo-a-passo, analisando a
pilha de execuo
...
int calcular_fatorial(int valor)
{ Exemplo 1
if (valor == 0)
return 1;
else
{
valor = (valor * calcular_fatorial(valor - 1));
cout << valor << endl;
return valor;
} Fim da recursividade
} Pilha de execuo
Recursividade
Exemplo de Potenciao:
O que potenciao?
Exemplo: 5 = 5 * 5 * 5 = 125
POTNCIA DE 5 125 !!!
#include <iostream>
int main()
{
int base = 5;
int expoente = 3;
cout << "Potencia:" << potencia(base, expoente);
}
}
Recursividade
Recursividade
Resumo:
Programao Estruturada II
Melhores Prticas
MELHORES PRTICAS
Melhores Prticas
Indentao do Cdigo-Fonte
O que :
Indentao do Cdigo-Fonte
#include <iostream>
Indentao do Cdigo-Fonte
#include <iostream>
Indentao do Cdigo-Fonte
No se esqueam:
Fazer a indentao dos cdigos-fontes nas aulas de lab, nos exerccios, trabalhos e
avaliaes
Dicas e Truques
DICAS E TRUQUES
Dicas e Truques
Recomendaes
Ateno:
- Preste bastante ateno ao digitar um cdigo fonte. Qualquer erro significa que o
programa pode no compilar ou uma funcionalidade pode parar de executar
- Cuidado ao digitar nomes de funes: uma letra errada ao chamar uma funo significa
erro de compilao
- Todos os comandos aprendidos em C++ so em letras minsculas. Comandos digitado
em letra maiscula, significa erro de compilao
- Atribuir corretamente os tipos de variveis para no acontecer erros de converso. Por
exemplo: inteiro recebe um inteiro, um ponto flutuante recebe um valor numrico
separado por ponto(.)
- As aberturas de chaves definem um escopo. Uma abertura de chave errada, pode gerar
um resultado inesperado ou um erro de compilao
- Instrues terminam com ponto e vrgula. Colocando este operador, significa que a
instruo deve ser concluda. Cuidado ao colocar em if, for e while, para evitar
instrues sem contedo
Dicas e Truques
Dicas e Truques
No se esqueam:
FERRAMENTAS E SITES
Ferramentas e Sites
Ferramentas e Sites
Vamos l:
Ferramentas
CodeLite IDE
http://codelite.org/
Code::Blocks
http://www.codeblocks.org/
Eclipse CDT
https://eclipse.org/cdt/
Ferramentas e Sites
Sites
Codecademy
http://www.codecademy.com/pt
Veduca
http://www3.veduca.com.br/
Coursera
https://pt.coursera.org/
Udemy
https://www.udemy.com/
Ferramentas e Sites
Ferramentas e Sites
Importante: