Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem.

Slides:



Advertisements
Apresentações semelhantes
Funções em C Prof. Fabiano Utiyama.
Advertisements

Programação em Java Prof. Maurício Braga
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Estruturas de Controle
Um programa em C Bibliotecas Variáveis globais
Linguagem de Programação VI Tipos de Dados Compostos - structs
Programação para Engenharia I
Introdução a Programação Renata Freire
1 Tipos definidos O programador pode definir seus próprios tipos de dados tipos complexos usados da mesma forma que os simples declaram-se variáveis utilizando-se.
LINGUAGEM C.
LINGUAGEM ESTRUTURADA TURBO C
LINGUAGEM C Centro Federal de Educação Tecnológica da Paraíba Coordenação de Informática Professor: Lafayette B. Melo.
Linguagem C Strings.
Linguagem C Estruturas de Seleção.
Slides: Prof. João Fabro UTFPR - Curitiba
Tratamento de Ficheiros
Revisão da Linguagem C.
Tópicos Tipos de Dados Variáveis por Valor Variáveis por Referência
O Portal do Estudante de Computação
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
Introdução a Computação e Cálculo Numérico
Introdução a Computação e Cálculo Numérico
PROGRAMAÇÃO ESTRUTURADA II
Linguagem de Programação II Parte VII
Linguagem de Programação II Parte IX
Ordenação e Pesquisa de Dados Marco Antonio Montebello Júnior
CADEIA DE CARACTERES (Strings)
Estrutura de dados II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Seminário 1: Revisão de C
Programação em C++ Compiladores
Aula 10 - Armazenamento de Dados em Registros
Algoritmo e Programação
Técnicas de Desenvolvimento de Programas
ARQUIVOS.
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
3. Introdução à Linguagem C
Algoritmos - Profa. Alciléia1 Profa. Maria Alciléia Alves Rocha Funções em C 2011.
Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída.
Algumas notas sobre a linguagem de programação C
Programação Orientada a Objetos - Java
Educação Profissional Técnica de Nível Médio Curso Técnico de Informática
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação Versão: _01.
Prof. Alessandro Gonçalves
Comando de Seleção switch
JAVA Sintaxe.
Linguagem C - Funções Automação Industrial Informática Básica
Fundamentos de linguagens de programação
CES-10 INTRODUÇÃO À COMPUTAÇÃO
Programação em C Aula 4.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Tipos de Dados Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem.
Profa. Maria Augusta Constante Puget
Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem.
 O que são arrays:  estruturas de dados homogêneas  coleção de elementos do mesmo tipo referenciada por um nome comum  um array pode ser imaginado.
Estruturas Homogêneas – Vetores e Matrizes
Profa. Maria Augusta Constante Puget
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Linguagem de Programação 11 Estruturas de Decisão e Repetição. Prof. Luiz José Hoffmann Filho
Algoritmo e Estrutura de Dados I Aulas 15 – Linguagem C Alocação Dinâmica de Memória Márcia Marra
Linguagem de Programação
Visual C# (parte 2) Prof. Igor Conrado Alves de Lima – Operadores, estruturas de decisão, vetores (arrays), e estruturas de.
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Estrutura de Dados Prof. André Cypriano M. Costa
Alocação Dinâmica Dilvan Moreira. Objetivos  Entender o que são e como usar:  Gerenciamento de Memória  Alocação Dinâmica em C.
Estrutura de Dados STRUCTS Dilvan Moreira. Objetivos  Entender o que são e como usar:  Estrutura de Dados para a Linguagem C  Structs (Registros)
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
FUNÇÕES Dilvan Moreira (baseado em material de Z. Liang)
Fundamentos de Programação 1 Slides 18 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Arquivos Seqüências ou de Texto ”. 1.
Transcrição da apresentação:

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Introdução a algoritmos, programação, e estruturas de dados Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Ementa  Algoritmos  Programas de computador  Introdução ao C++  Expressões  Passagem de argumentos a funções  Estruturas de seleção  Estruturas de repetição  Arranjos  Manipulação de textos  Tipos de dados definidos pelo programador  Arquivos  Estruturas de dados (listas, filas e pilhas) Material:

Algoritmos Palavra estranha Comum no cotidiano Definição:  Sequência ordenada, finita e não ambígua de passos que levam à solução de um dado problema

Algoritmos Palavra estranha Comum no cotidiano Definição:  Sequência ordenada, finita e não ambígua de passos que levam à solução de um dado problema  Têm a capacidade de receber dado(s) do mundo exterior fornecer um resultado ao mundo exterior  Todos os passos especificados no algoritmo precisam ser alcançáveis em um tempo finito

Algoritmos Exemplos:  Instruções para utilizar um aparelho eletrodoméstico  Receita de preparo de algum prato  Informações para alguém chegar em algum destino

Algoritmos Exemplo – Como trocar uma lâmpada queimada (fria e no teto)  Pegar uma escada  Posicionar a escada sob a lâmpada queimada  Pegar uma lâmpada nova  Subir na escada com a lâmpada nova  Retirar a lâmpada queimada  Colocar a lâmpada nova  Descer da escada com a lâmpada queimada  Guardar a escada  Desfazer-se da lâmpada queimada

Algoritmos Exemplo – Como trocar uma lâmpada queimada (fria e no teto) Dados de entrada do mundo exterior:  Escada  Lâmpada Resultado fornecido ao mundo exterior:  Lâmpada funcionando perfeitamente

Programas de computador Escreva “oi” ??? Linguagens de programação

Programas de computador Linguagens de programação  Suposição Código para escrever algo na tela: Código do caractere ‘o’: Código do caractere ‘i’: Comando para escrever oi na tela:  Dificuldade de programação Memorização dos códigos  Linguagens de programação – C++ Compilação Execução

Programas de computador Exercícios 1 – O que é uma linguagem de programação? 2 – Por que uma linguagem de programação é importante para quem cria programas de computador? 3 – Cite um exemplo de uma linguagem de programação. 4 – O que significa compilar um programa? 5 – O que significa executar um programa?

Introdução ao C++ Linguagem C++  Ano de criação: 1983  Criador: Bjarne Stroustrup  Tornou-se LP de propósito geral  Há compiladores C++ para quase todas arquiteturas de computadores Material:

Introdução ao C++ LP (Linguagem de Programação) tipada  Cada estrutura está associada a um tipo

Introdução ao C++ LP (Linguagem de Programação) tipada  Cada estrutura está associada a um tipo Tipos da LP TipoTamanhoValores char08 bits‘a’, ‘Z’, ‘ ’, ‘+’, etc. short int16 bits a unsigned short int16 bits0 a int (ou long int)32 bits a unsigned long int32 bits0 a float32 bitsSeis dígitos de precisão double64 bitsDez dígitos de precisão long double96 bitsDez dígitos de precisão bool32 bitstrue false

Introdução ao C++ LP (Linguagem de Programação) tipada  Cada estrutura está associada a um tipo Tipos da LP TipoTamanhoValores char08 bits‘a’, ‘Z’, ‘ ’, ‘+’, etc. short int16 bits a unsigned short int16 bits0 a int (ou long int)32 bits a unsigned long int32 bits0 a float32 bitsSeis dígitos de precisão double64 bitsDez dígitos de precisão long double96 bitsDez dígitos de precisão bool32 bitstrue false Caracteres são representados entre aspas.

Introdução ao C++ LP (Linguagem de Programação) tipada  Cada estrutura está associada a um tipo Tipos da LP TipoTamanhoValores char08 bits‘a’, ‘Z’, ‘ ’, ‘+’, etc. short int16 bits a unsigned short int16 bits0 a int (ou long int)32 bits a unsigned long int32 bits0 a float32 bitsSeis dígitos de precisão double64 bitsDez dígitos de precisão long double96 bitsDez dígitos de precisão bool32 bitstrue false Caracteres são representados entre aspas. Parte inteira e parte fracionária separadas por ponto.

Introdução ao C++ LP compilada para programas modularizados Módulos

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos }

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos } int

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos } float int

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos } char float int

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos } bool char float int

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos } void bool char float int

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos } tipoP1 nomeP1, tipoP2 nomeP2,... void bool char float int

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos } tipoP1 nomeP1, tipoP2 nomeP2,... void bool char float int return (expressão);

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos } tipoP1 nomeP1, tipoP2 nomeP2,... void bool char float int return (expressão); Os nomes do módulo e dos seus parâmetros devem ser identificadores.

Introdução ao C++ Identificadores  Primeiro caractere: letra ou sublinha  Demais caracteres: letra ou sublinha ou algarismo  Não pode ser uma palavra reservada  Uma letra não pode ter acento nem cedilha break case char const continue default do double else enum extern float for goto if include int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

Introdução ao C++ Identificadores  Exemplos A1BC

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d NomeDoAluno

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d NomeDoAluno nome_do_aluno

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d NomeDoAluno nome_do_aluno 198_Aberto

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d NomeDoAluno nome_do_aluno 198_Aberto

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d NomeDoAluno nome_do_aluno 198_Aberto float

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d NomeDoAluno nome_do_aluno 198_Aberto float

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d NomeDoAluno nome_do_aluno 198_Aberto float média_final

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d NomeDoAluno nome_do_aluno 198_Aberto float média_final

Introdução ao C++ Identificadores  Exemplos A1BC XA,1d NomeDoAluno nome_do_aluno 198_Aberto float média_final media_final

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) { // bloco de comandos } tipoP1 nomeP1, tipoP2 nomeP2,... void bool char float int return (expressão); Os nomes do módulo e dos seus parâmetros devem ser identificadores.

Introdução ao C++ LP compilada para programas modularizados Módulos tipoDeRetorno nome (listaDeParâmetros) int main( ) { /*************************************************** main() é o módulo principal do C main() é projetado para retornar int alguns compiladores aceitam o retorno void ***************************************************/ } tipo de retorno nome parâmetros

Introdução ao C++ Saída de dados  cout Escreve um texto na tela Sintaxe cout << texto a ser escrito; Exemplo #include using namespace std; main() { cout << "oi"; // "oi" é enviado ao objeto padrão de saída, a tela } Textos são escritos entre aspas. cout está programado no escopo std do arquivo iostream

Introdução ao C++ Entrada de dados  getch Lê um caractere do teclado Sintaxe getch(); Exemplo #include using namespace std; main() { cout << "oi"; getch(); } getch serve para provocar um atraso na execução do programa. getch está programado no arquivo conio.h.

Introdução ao C++ Variáveis  Posição de memória cujo conteúdo pode ser modificado no decorrer da execução do programa  Declaração tipo identificador; tipo identificador1, identificador2,..., identificadorN;  Exemplos int dia, mes, ano; char sexo; float salario;

Introdução ao C++ Constantes  Posição de memória cujo conteúdo NÃO pode ser modificado no decorrer da execução do programa  Declaração const tipo identificador = valor;  Exemplos const float pi = ; const float salarioMinimo = ;

Introdução ao C++ E/S com cout e cin #include using namespace std; main() { int dia, mes, ano; cout << "Digite o dia de seu nascimento: "; cin >> dia; cout << "Digite o mes de seu nascimento: "; cin >> mes; cout << "Digite o ano de seu nascimento: "; cin >> ano; cout << "Voce nasceu em " << dia << "/" << mes << "/" << ano << "."); getch(); } Na construção de um texto, separamos constantes e variáveis com <<.

Introdução ao C++ Comentários  Exemplos  de mais de uma linha /* comentário */  de uma única linha // comentário #include using namespace std; main() { int numero; cout << "Escreva um numero inteiro: "; cin >> numero; // E se for fornecido um número real? /* Se o usuário inserir um número real (com casas decimais), somente a parte inteira deste número será considerada. */ cout << "Voce escolheu o numero " << numero << “."; getch(); }

Introdução ao C++ Formatação de saída numérica #include using namespace std; main() { float numero; cout << "Escreva um numero qualquer: "; cin >> numero; // A saída não está formatada. cout << "Voce escolheu o numero " << numero << "."; getch(); }

Introdução ao C++ Formatação de saída numérica #include using namespace std; main() { float numero; cout << "Escreva um numero qualquer: "; cin >> numero; // A saída não está formatada. cout << "Voce escolheu o numero " << numero << "."; getch(); }

Introdução ao C++ Formatação de saída numérica #include using namespace std; main() { float numero; cout << "Escreva um numero qualquer: "; cin >> numero; // A saída não está formatada. cout << "Voce escolheu o numero " << numero << "."; getch(); }

Introdução ao C++ Formatação de saída numérica #include using namespace std; main() { float numero; cout << "Escreva um numero qualquer: "; cin << numero; cout << "Voce escolheu o numero " << setprecision(3) << numero << "."; getch(); }

Introdução ao C++ Caracteres de barra invertida #include using namespace std; main() { int posicao; char letra; cout << "Escreva um número de 1 a 26:\n"; cin >> posicao; cout << "Qual a letra que ocupa esta posição no alfabeto?\n"; cin >> letra; cout << "A letra “ << letra << " esta na posicao " << posicao << “ no alfabeto."; getch(); }

Introdução ao C++ Caracteres de barra invertida CaractereSignificado \bRetrocesso (BS) \fAlimentação de formulário (FF) \rRetorno de carro (CR) \tTabulação horizontal (HT) \”Aspas \’Apóstrofo \0Nulo \\Barra invertida \vTabulação vertical \aAlerta (beep)

Introdução ao C++ Textos como tipos de dados  Declaração da variável string identificador; string programado no arquivo string.

Introdução ao C++ Textos como tipos de dados #include using namespace std; main() { string nome; cout << "Digite seu nome: "; cin >> nome; /* Inconveniente: O objeto “cin" entende o caractere espaço como o final de um valor. */ cout << "Bem vindo ao mundo da computacao, " << nome << “.”); getch(); }

Introdução ao C++ Textos como tipos de dados #include using namespace std; main() { string nome; cout << "Digite seu nome: "; cin >> nome; /* Inconveniente: O objeto “cin" entende o caractere espaço como o final de um valor. */ cout << "Bem vindo ao mundo da computacao, " << nome << “.”); getch(); }

Introdução ao C++ Textos como tipos de dados #include using namespace std; main() { string nome; cout << "Digite seu nome: "; getline(cin, nome); /* Inconveniente: O objeto “cin" entende o caractere espaço como o final de um valor. */ cout << "Bem vindo ao mundo da computacao, " << nome << “.”); getch(); }

Introdução ao C++ Exercícios do capítulo 1

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Expressões Combinação de operadores que atuam sobre constantes, variáveis e funções

Expressões Combinação de operadores que atuam sobre constantes, variáveis e funções  Operadores: atribuição aritméticos relacionais lógicos

Expressões Atribuição identificador = expressão

Expressões Atribuição identificador = expressão  Exemplos A = 2; NOTA = 10; SEXO = ‘M’; Estado = “RJ”; X = 2.5; B = A;

Expressões Atribuição identificador = expressão  Exemplos A = 2; NOTA = 10; SEXO = ‘M’; Estado = “RJ”; X = 2.5; B = A;  Identificador e expressões com mesmo tipo

Expressões Operadores aritméticos

Expressões Operadores aritméticos

Expressões Operadores aritméticos x = 2; y = 5.0;

Expressões Funções numéricas predefinidas É preciso incluir o arquivo de cabeçalho math.h #include

Expressões Operadores relacionais  Binários (dois operandos)  Operandos caracteres e números  Resultado bool

Expressões Operadores relacionais e o tipo char  Tabela ASCII (American Standard Code for Information Interchange)

Expressões Operadores relacionais e o tipo char *  Comparação caractere por caractere “JOAO” < “JOSE” (ASCII(‘J’) = 74) = (ASCII(‘J’) = 74) (ASCII(‘O’) = 79) = (ASCII(‘O’) = 79) (ASCII(‘A’) = 65) < (ASCII(‘S’) = 83)

Expressões Operadores lógicos  Binários ( && e ||)  Unário ( !)  Operandos (bool)  Resultado (bool) && retorna true quando ambos os operandos forem true || retorna false quando ambos os operandos forem false ! inverte o valor lógico do seu operando

Expressões Prioridade dos operadores

Expressões Exercícios do capítulo 2

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Passagem de argumentos a funções Passagem de argumentos por valor 01 #include 02 using namespace std; 03 void troca(int x, int y) 04 { 05 int aux; 06 aux = x; 07 x = y; 08 y = aux; 09 } 10 main() 11 { 12 int a, b; 13 cout "; 14 cin >> a; 15 cout "; 16 cin >> b; 17 troca(a, b); 18 cout << "Os valores finais para A e B sao “ << a << “e" << b << “."; 19 getchar(); 20 }

Passagem de argumentos a funções Passagem de argumentos por valor 01 #include 02 using namespace std; 03 void troca(int x, int y) 04 { 05 int aux; 06 aux = x; 07 x = y; 08 y = aux; 09 } 10 main() 11 { 12 int a, b; 13 cout "; 14 cin >> a; 15 cout "; 16 cin >> b; 17 troca(a, b); 18 cout << "Os valores finais para A e B sao “ << a << “e" << b << “."; 19 getchar(); 20 } Funciona?

Passagem de argumentos a funções Passagem de argumentos por valor Funcionamento da memória: execução: 1, 2, 10, 11, 12, 13, 14, 15, 16, 17, 3, 4, 5, 6, 7, 8, 9, 18, 19, #include 02 using namespace std; 03 void troca(int x, int y) 04 { 05 int aux; 06 aux = x; 07 x = y; 08 y = aux; 09 } 10 main() 11 { 12 int a, b; 13 cout "; 14 cin >> a; 15 cout "; 16 cin >> b; 17 troca(a, b); 18 cout << "Os valores finais para A e B sao “ << a << “e" << b << “."; 19 getchar(); 20 } Identificador Posição Valor a 528 b 524 x 520 y 516 aux

Passagem de argumentos a funções Argumentos valor X argumentos referência 01 #include 02 using namespace std; 03 void troca(int x, int y) 04 { 05 int aux; 06 aux = x; 07 x = y; 08 y = aux; 09 } 10 main() 11 { 12 int a, b; 13 cout "; 14 cin >> a; 15 cout "; 16 cin >> b; 17 troca(a, b); 18 cout << "Os valores finais para A e B sao “<< a << “e" << b << “."; 19 getchar(); 20 } 01 #include 02 using namespace std; 03 void troca(int &x, int &y) 04 { 05 int aux; 06 aux = x; 07 x = y; 08 y = aux; 09 } 10 main() 11 { 12 int a, b; 13 cout "; 14 cin >> a; 15 cout "; 16 cin >> b; 17 troca(a, b); 18 cout << "Os valores finais para A e B sao “<< a << “e" << b << “."; 19 getchar(); 20 } Os parâmetros x e y referem-se aos endereços das variáveis originais.

Passagem de argumentos a funções Exercícios do capítulo 3

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Estruturas de seleção Comando if  Fluxograma / sintaxe  A condição deve retornar um valor BOOLEANO //comandos sequenciais if (condição) { //comando 1 //comando 2 //comando 3 //... //comando N } //comandos sequenciais condição 1 0 Comando 1 Comando 2 Comando 3. Comando N Comandos sequenciais Comandos sequenciais

Estruturas de seleção Comando if  Exemplo 01 #include 02 using namespace std; 03 main() 04 { 05 int N; 06 cout << “Programa que le um inteiro e o exibe se for positivo\n\n"; 07 cout << "Escreva um numero inteiro: "; 08 cin >> N; 09 if (N > 0) 10 { 11 cout << N; 12 } 13 getchar(); 14 }

Estruturas de seleção Comando if  Exemplo 01 #include 02 using namespace std; 03 main() 04 { 05 int N; 06 cout << “Programa que le um inteiro e o exibe se for positivo\n\n"; 07 cout << "Escreva um numero inteiro: "; 08 cin >> N; 09 if (N > 0) 10 { 11 cout << N; 12 } 13 getchar(); 14 }

Estruturas de seleção Comando if com cláusula else  Sempre desviamos o processamento  Resta saber por qual caminho

Estruturas de seleção Comando if com cláusula else  Sempre desviamos o processamento  Resta saber por qual caminho

Estruturas de seleção Comando if com cláusula else  Sempre desviamos o processamento  Resta saber por qual caminho

Estruturas de seleção Comando if com cláusula else  Fluxograma / sintaxe  A condição deve retornar um valor BOOLEANO //comandos sequenciais if (condição) { //comando I1 //comando I2 //comando I3 //... //comando IN } else { //comando E1 //comando E2 //comando E3 //... //comando EM } //comandos sequenciais Comandos sequenciais Comando I1 Comando I2 Comando I3... Comando IN 1 0 condição Comando E1 Comando E2 Comando E3... Comando EM

Estruturas de seleção Comando if com cláusula else  Exemplo #include 02 using namespace std; 03 main() 04 { 05 int N; 06 cout << "Programa que le um inteiro e diz se e ou nao maior que zero\n\n"; 07 cout << "Escreva um numero inteiro: "; 08 cin >> N; 09 if (N > 0) 10 { 11 cout << N << " e maior que zero"; 12 } 13 else { 14 cout << N << " NAO e maior que zero"; 15 } 16 getchar(); 17 }

Estruturas de seleção Aninhamento de comandos if  if dentro de um if ou de um else 01 #include 02 using namespace std; 03 main() 04 { 05 int N; 06 cout << "Programa que ve se um inteiro e maior, menor ou igual a zero\n\n"; 07 cout << "Escreva um numero inteiro: "; 08 cin >> N; 09 if (N > 0) 10 cout << N << " e maior que zero"; 11 else { 12 if (N < 0) 13 cout << N << “ e menor que zero"; 14 else 15 cout << N << " e igual a zero"; 16 } 17 getchar(); 18 }

Estruturas de seleção O comando switch  Exemplo 01 #include 02 using amespace std; 03 main() 04 { 05 float X, Y; 06 char OP; 07 const string cabecalho = "Simulador de uma calculadora basica de numeros reais\n\n " ; 08 cout << cabecalho; 09 cout << "Digite o primeiro operando: "; 10 cin >> X; 11 cout << "Digite o segundo operando: "; 12 cin >> Y; 13 cout << "Digite o operador: "; 14 cin >> OP;

Estruturas de seleção O comando switch  Exemplo 15 switch(OP) 16 { 17 case '+' : cout << "Resultado: " << X+Y; 18 break; 19 case '-' : cout << "Resultado: " << X-Y; 20 break; 21 case '*' : 22 case 'x' : 23 case 'X' : cout << "Resultado: " << X*Y; 24 break; 25 case '/' : cout << "Resultado: " << X/Y; 26 break; 27 default : cout << "\nOperador invalido (" << OP << ")."; 28 } 29 getchar(); 30 }

Estruturas de seleção O comando switch  Sintaxe A expressão é um escalar ( int ou char) O break é opcional faz o processamento seguir para fora do switch O default é opcional switch (expressão) { case constante1 : comando1DaConstante1; comando2DaConstante1;... comandoWDaConstante1; break; case constante2 : comando1DaConstante2; comando2DaConstante2;... comandoXDaConstante2; break;... case constanteN : comando1DaConstanteN; comando2DaConstanteN;... comandoYDaConstanteN; break; default : comando1DoDefault; comando2DoDefault;... comandoZDoDefault; }

Estruturas de seleção O comando switch  switch X aninhamanto de comandos if switch(OP) { case '+' : cout << "Resultado: " << X+Y; break; case '-' : cout << "Resultado: " << X-Y; break; case '*' : case 'x' : case 'X' : cout << "Resultado: " << X*Y; break; case '/' : cout << "Resultado: " << X/Y; break; default : cout << "\nOperador invalido (" << OP ")."; }

Estruturas de seleção O comando switch  switch X aninhamanto de comandos if if (OP == '+') cout << "Resultado: " << X+Y; else if (OP == '-') cout << "Resultado: " << X-Y; else if ((OP == '*') || (OP == 'x') || (OP == 'X')) cout << "Resultado: " << X*Y; else if (OP == '/') cout << "Resultado: " << X+Y; else cout << "\nOperador invalido (" << OP << ").";

Estruturas de seleção Exercícios do capítulo 4

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Estruturas de repetição O comando while  Fluxograma / sintaxe //comandos sequenciais while (condição) { //comando 1 //comando 2 //comando 3 //... //comando N } //comandos sequenciais Comandos sequenciais condição 1 0 Comando 1 Comando 2 Comando 3. Comando N

Estruturas de repetição O comando while  Fluxograma / sintaxe A condição deve envolver variável(is) de controle e retornar um valor booleano //comandos sequenciais while (condição) { //comando 1 //comando 2 //comando 3 //... //comando N } //comandos sequenciais Comandos sequenciais condição 1 0 Comando 1 Comando 2 Comando 3. Comando N

Estruturas de repetição O comando while  Fluxograma / sintaxe A(s) variável(is) de controle da condição deve(m) ser iniciada(s) antes do laço //comandos sequenciais while (condição) { //comando 1 //comando 2 //comando 3 //... //comando N } //comandos sequenciais Comandos sequenciais condição 1 0 Comando 1 Comando 2 Comando 3. Comando N

Estruturas de repetição O comando while  Fluxograma / sintaxe No corpo do laço, a(s) variável(is) de controle da condição deve(m) ser atualizada(s) //comandos sequenciais while (condição) { //comando 1 //comando 2 //comando 3 //... //comando N } //comandos sequenciais Comandos sequenciais condição 1 0 Comando 1 Comando 2 Comando 3. Comando N

Estruturas de repetição O comando while  Exemplo 01 #include 02 using namespace std; 03 main() 04 { 05 int N; 06 cout << “Impressão de CEFET 10 vezes:\n\n"; 07 N = 1; 08 while (N <= 10) 09 { 10 cout << “CEFET\n"; 11 N = N + 1; //++N; 12 } 13 getchar(); 14 }

Estruturas de repetição O comando while  Exemplo 01 #include 02 using namespace std; 03 main() 04 { 05 int N; 06 cout << “Lista dos numeros entre 1 e 100:\n\n"; 07 N = 1; 08 while (N <= 100) 09 { 10 cout << N << "\n" ; 11 N = N + 1; //++N; 12 } 13 getchar(); 14 }

Estruturas de repetição O comando while  Exemplo 01 #include 02 using namespace std; 03 main() 04 { 05 char C; 06 cout << “Impressao do alfabeto:\n\n"; 07 C = ‘A’; 08 while (C <= ‘Z’) 09 { 10 cout << C << "\n"; 11 C = C + 1; //++C; 12 } 13 getchar(); 14 }

Estruturas de repetição O comando for  Substitui o comando while  Sintaxe menor variávelDeControle = vi; while (condição) { // comandos variávelDeControle = novoValor; } for (variávelDeControle = vi; condição; variávelDeControle = novoValor) { // comandos }

Estruturas de repetição O comando for  Substitui o comando while  Sintaxe menor variávelDeControle = vi; while (condição) { // comandos variávelDeControle = novoValor; } for (variávelDeControle = vi; condição; variávelDeControle = novoValor) { // comandos }

Estruturas de repetição O comando for  Substitui o comando while  Sintaxe menor variávelDeControle = vi; while (condição) { // comandos variávelDeControle = novoValor; } for (variávelDeControle = vi; condição; variávelDeControle = novoValor) { // comandos }

Estruturas de repetição O comando for  Substitui o comando while  Sintaxe menor variávelDeControle = vi; while (condição) { // comandos variávelDeControle = novoValor; } for (variávelDeControle = vi; condição; variávelDeControle = novoValor) { // comandos }

Estruturas de repetição O comando for  Exemplo 01 #include 02 using namespace std; 03 main() 04 { 05 int N; 06 cout << “Lista dos numeros entre 1 e 100\n\n"; 07 N = 1; 08 while (N <= 100) 09 { 10 cout << N << “\n"; 11 N = N + 1; 12 } 13 getchar(); 14 } 01 #include 02 using namespace std; 03 main() 04 { 05 int N; 06 cout << “Lista dos números entre 1 e 100\n\n"; 07 for (N = 1; N <= 100; N = N +1) 08 { 09 cout << N << “\n"; 10} 11 getchar(); 12 } com “for” com “while”

Estruturas de repetição Saída forçada (break)  Recomendado apenas dentro de loops infinitos

Estruturas de repetição Saída forçada (break)  Recomendado apenas dentro de loops infinitos  Exemplo # include using namespace std; main() { char opcao; while (1) //loop infinito { system(“cls”); //comandos do programa cout << “Deseja repetir o programa: [S|N]: ”; cin >> opcao; if (opcao == ‘n’ || opcao == ‘N’) break; } system(“pause”); }

Estruturas de repetição Saída forçada (break)  Recomendado apenas dentro de loops infinitos  Exemplo O comando system, do arquivo de cabeçalho stdlib.h recebe um texto como parâmetro, o qual é entendido como um comando do sistema operacional no qual o programa será executado. # include using namespace std; main() { char opcao; while (1) //loop infinito { system(“cls”); //comandos do programa cout << “Deseja repetir o programa: [S|N]: ”; cin >> opcao; if (opcao == ‘n’ || opcao == ‘N’) break; } system(“pause”); }

Estruturas de repetição Saída forçada (break)  Recomendado apenas dentro de loops infinitos  Exemplo 01 #include 02 using namespace std; 03 main() 04 { 05 int N; 06 N = 1; 07 while (N <= 100) 08 { 09 cout << N << “\n"; 10 N = N + 1; 11 } 12 getchar(); 13 } 01 #include 02 using namespace std; 03 main() 04 { 05 int N; 06 N = 1; 07 while (1) 08 { 09 cout << N << “\n"; 10 if (N == 100) break; 11 N = N + 1; 12 } 13 getchar(); 14 } com saída forçada com “while” comum

Estruturas de repetição O comando do while  Fluxograma / sintaxe A condição deve retornar um valor booleano //comandos sequenciais do { //comando 1 //comando 2 //comando 3 //... //comando N } while (condição); //comandos sequenciais Comandos sequenciais 0 1 Comando 1 Comando 2 Comando 3. Comando N condição

Estruturas de repetição O comando do while  Exemplo 01 #include 02 #include 03 using namespace std; 04 main() 05 { 06 float N1, N2, MEDIA; 07 char RESP; 08 do 09 { 10 system("cls"); 11 cout << "Programa para calcular a media entre dois numeros:\n\n"; 12 cout >> "Digite os dois numeros separados por ENTER: "; 13 cin >> N1 >> N2; 14 MEDIA = (N1+N2)/2; 15 cout << "A media entre “ << N1 << “ e “ << N2 << “ e “ << MEDIA << “.\n\n"; 16 cout << "Deseja repetir o programa? Entre [S] para sim ou outra tecla para nao: "; 17 cin >> RESP; 18 } 19 while ((RESP =='S') || (RESP == 's')); 20 }

Estruturas de repetição Exercícios 1 a 13 do capítulo 5

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Arranjos Vetor  Estrutura

Arranjos Vetor  Estrutura  Declaração de variável vetor tipo nomeDaVariável[númeroDeColunas]; int V[5];

Arranjos Vetor  Estrutura  Declaração de variável vetor tipo nomeDaVariável[númeroDeColunas]; int V[5]; Declaração de vários vetores de um mesmo tipo: tipo nome1[tam1],..., nomeN[tamN]; Exemplo: int X[5], Y[10], Z[15];

Arranjos Vetor  Estrutura  Declaração de variável vetor tipo nomeDaVariável[númeroDeColunas]; int V[5]; Declaração de vários vetores de um mesmo tipo: tipo nome1[tam1],..., nomeN[tamN]; Exemplo: int X[5], Y[10], Z[15];

Arranjos Vetor  Estrutura  Declaração de variável vetor tipo nomeDaVariável[númeroDeColunas]; int V[5]; Declaração de vários vetores de um mesmo tipo: tipo nome1[tam1],..., nomeN[tamN]; Exemplo: int X[5], Y[10], Z[15];

Arranjos Vetor  Estrutura  Declaração de variável vetor tipo nomeDaVariável[númeroDeColunas]; int V[5];  Acesso nomeDaVariável[coluna]; V[0] = 4; V[1] = 7; V[2] = 2; V[3] = 5; V[4] = 3;

Arranjos Vetor  Estrutura  Declaração de variável vetor tipo nomeDaVariável[númeroDeColunas]; int V[5];  Acesso nomeDaVariável[coluna]; V[0] = 4; V[1] = 7; V[2] = 2; V[3] = 5; V[4] = 3;

Arranjos Vetor  Estrutura  Declaração de variável vetor tipo nomeDaVariável[númeroDeColunas]; int V[5];  Acesso nomeDaVariável[coluna]; V[0] = 4; V[1] = 7; V[2] = 2; V[3] = 5; V[4] = 3;

Arranjos Vetor (Exemplo) 01 #include 02 using namespace std; 03 main() 04 { 05 const int N = 30; 06 int A[N]; 07 int I, POS, MAIOR; 08 for (I = 0; I < N; I = I + 1) 09 { 10 cout << "Forneca o elemento da posicao " << I << " do vetor: "; 11 cin >> A[I]; 12 } 13 MAIOR = A[0]; 14 POS = 0; 15 for (I = 1; I < N; I = I + 1) 16 if (A[I] > MAIOR) 17 { 18 MAIOR = A[I]; 19 POS = I; 20 } 21 cout << "O maior elemento do vetor e " << MAIOR << " e ele esta na posicao " << POS << "."; 22 getchar(); 23 }

Arranjos Vetor como argumento de um módulo int somaElementosDeVetor(int vetor[ ], int colunas) { int i, soma = 0; for (i = 0; i < colunas; i = i+1) soma = soma + vetor[i]; return soma; }

Arranjos Vetor como argumento de um módulo int somaElementosDeVetor(int vetor[ ], int colunas) { int i, soma = 0; for (i = 0; i < colunas; i = i+1) soma = soma + vetor[i]; return soma; } A quantidade de colchetes determina a dimensão do arranjo.

Arranjos Vetor como argumento de um módulo int somaElementosDeVetor(int vetor[ ], int colunas) { int i, soma = 0; for (i = 0; i < colunas; i = i+1) soma = soma + vetor[i]; return soma; } A quantidade de colchetes determina a dimensão do arranjo. Os colchetes ficam vazios na implementação do módulo.

Arranjos Vetor como argumento de um módulo int somaElementosDeVetor(int vetor[ ], int colunas) { int i, soma = 0; for (i = 0; i < colunas; i = i+1) soma = soma + vetor[i]; return soma; } main() { const int N = 4; int v[N], i; for (i = 0; i < N; i = i+1) v[i] = i; cout << "Soma dos elementos do vetor: “ << somaElementosDeVetor(v, N); }

Arranjos Vetor como argumento de um módulo int somaElementosDeVetor(int vetor[ ], int colunas) { int i, soma = 0; for (i = 0; i < colunas; i = i+1) soma = soma + vetor[i]; return soma; } main() { const int N = 4; int v[N], i; for (i = 0; i < N; i = i+1) v[i] = i; cout << "Soma dos elementos do vetor: “ << somaElementosDeVetor(v, N); } Os colchetes não aparecem na chamada ao módulo.

Arranjos Vetor como argumento de um módulo int somaElementosDeVetor(int vetor[ ], int colunas) { int i, soma = 0; for (i = 0; i < colunas; i = i+1) soma = soma + vetor[i]; return soma; } main() { const int N = 4; int v[N], i; for (i = 0; i < N; i = i+1) v[i] = i; cout << "Soma dos elementos do vetor: “ << somaElementosDeVetor(v, N); } Os colchetes não aparecem na chamada ao módulo. Em C++, os arranjos, quando argumentos de módulos, são automaticamente passados por referência.

Arranjos Matriz  Estrutura

Arranjos Matriz  Estrutura  Declaração de variável matriz tipo nomeDaVariável[númeroDeLinhas] [númeroDeColunas]; Exemplo int M[3][4];

Arranjos Matriz  Estrutura  Declaração de variável matriz tipo nomeDaVariável[númeroDeLinhas] [númeroDeColunas]; int M[3][4]; Declaração de vários vetores de um mesmo tipo: tipo nome1[linhas1][colunas1],..., nomeN[linhasN][colunasN]; Exemplo: int X[2][5], Y[2][3], Z[6][3];

Arranjos Matriz  Estrutura  Declaração de variável matriz tipo nomeDaVariável[númeroDeLinhas] [númeroDeColunas]; int M[3][4]; Declaração de vários vetores de um mesmo tipo: tipo nome1[linhas1][colunas1],..., nomeN[linhasN][colunasN]; Exemplo: int X[2][5], Y[2][3], Z[6][3];

Arranjos Matriz  Estrutura  Declaração de variável matriz tipo nomeDaVariável[númeroDeLinhas] [númeroDeColunas]; int M[3][4]; Declaração de vários vetores de um mesmo tipo: tipo nome1[linhas1][colunas1],..., nomeN[linhasN][colunasN]; Exemplo: int X[2][5], Y[2][3], Z[6][3];

Arranjos Matriz  Estrutura  Declaração de variável matriz tipo nomeDaVariável[númeroDeLinhas] [númeroDeColunas]; int M[3][4];  Acesso nomeDaVariável[Linha][Coluna] M[0][0] = 3;M[0][1] = 8;M[0][2] = 1;M[0][3] = 5; M[1][0] = 0;M[1][1] = 2;M[1][2] = 4;M[1][3] = 7; M[2][0] = 2;M[2][1] = 5;M[2][2] = 9;M[2][3] = 3;

Arranjos Matriz  Estrutura  Declaração de variável matriz tipo nomeDaVariável[númeroDeLinhas] [númeroDeColunas]; int M[3][4];  Acesso nomeDaVariável[Linha][Coluna] M[0][0] = 3;M[0][1] = 8;M[0][2] = 1;M[0][3] = 5; M[1][0] = 0;M[1][1] = 2;M[1][2] = 4;M[1][3] = 7; M[2][0] = 2;M[2][1] = 5;M[2][2] = 9;M[2][3] = 3;

Arranjos Matriz (Exemplo) 01 #include 02 using namespace std; 03 main() 04 { 05 const int NL = 3; // número de linhas 06 const int NC = 5; // número de colunas 07 const int K = 2; // fator para multiplicação 08 int M[NL][NC], I, J; 09 for (I = 0; I < NL; I = I + 1) 10 for (J = 0; J < NC; J = J + 1) 11 { 12 cout << "Forneca o elemento da linha " << I << " e coluna " << J << "."; 13 cin >> M[I][J]; 14 } 15 for (I = 0; I < NL; I = I + 1) 16 for (J = 0; J < NC J = J + 1) 17 M[I][J] = M[I][J] * K; 18 cout << "\nResultado:\n\n"; 19 for (I = 0; I < NL; I = I + 1) 20 { 21 for (J = 0; J < NC; J = J + 1) 22 cout << M[I][J] << "\n"; 23 cout << "\n"; 24 } 25 getchar(); 26 }

Arranjos Matrizes como argumentos de módulos  É necessário informar a quantidade de colunas no argumento que representa a matriz no módulo.  Para um módulo genérico, isto é inviável.  Não usaremos matrizes como argumentos de módulos

Arranjos Exercícios 1 a 13 do capítulo 6

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Manipulação de textos Declaração string nome; Atribuição = Comparação == != > >= < <=

Manipulação de textos Concatenação + Acesso a um determinado caractere [ ] Comprimento length() As posições de uma string seguem o mesmo padrão das posições de um vetor. nome.length()

Manipulação de textos Exemplo 01 #include 02 #include 03 using namespace std; 04 main() 05 { 06 char c = '/'; 07 string nome1, nome2; 08 nome1 = "CEFET"; 09 nome2 = "RJ"; 10 nome1 = nome1 + c + nome2; 11 cout << nome1 << "\n"; 12 cout << nome1.length() << "\n"; 13 cout << nome1[5] << "\n"; 14 getch(); 15 }

Manipulação de textos Funções para caracteres  toupper(caractere);  tolower(caractere);  Em C++, se atribuirmos um caractere a uma variável inteira, esta variável passará a conter o valor ASCII deste caractere. Como contraposto, se atribuirmos um número inteiro de 0 a 255 a uma variável caractere, esta variável passará a conter o caractere associado ao valor ASCII deste caractere. tolower e toupper estão definidas no arquivo de cabeçalho ctype.h.

Manipulação de textos Exemplo 01 #include 02 #include 03 #include 04 using namespace std; 05 main() 06 { 07 int i; 08 string entrada, saida; 09 cout << "Escreva um texto qualquer: "; 10 getline(cin, entrada); 11 i = 0; 12 while (i <= entrada.length()) 13 { 14 saida[i] = toupper(entrada[i]); //saida[i] = tolower(entrada[i]); 15 i = i + 1; 16 } 17 cout << saida; 18 getch(); 19 }

Manipulação de textos Exemplos 01 #include 02 #include 03 #include 04 using namespace std; 05 main() 06 { 07 int inteiro; 08 inteiro = 'A'; 09 cout << inteiro; 10 getch(); 11 } 01 #include 02 #include 03 #include 04 using namespace std; 05 main() 06 { 07 char caractere; 08 caractere = 122; 09 cout << caractere; 10 getch(); 11 }

Manipulação de textos Exemplos 01 #include 02 #include 03 #include 04 using namespace std; 05 main() 06 { 07 int inteiro; 08 inteiro = 'A'; 09 cout << inteiro; 10 getch(); 11 } 01 #include 02 #include 03 #include 04 using namespace std; 05 main() 06 { 07 char caractere; 08 caractere = 122; 09 cout << caractere; 10 getch(); 11 } O resultado de cada programa será, respectivamente: escrever o inteiro 65 na tela, já que 65 é o código ASCII do caractere ‘A’; escrever o caractere ‘z’ na tela, uma vez que ‘z’ é o caractere cujo código ASCII é dado por 122.

Manipulação de textos Exercícios do capítulo 7

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Tipos definidos pelo programador Tipos primitivos  char  int  float

Tipos definidos pelo programador Tipos primitivos  char  int  float Outros tipos  Tipos enumerados  Tipos de registro

Tipos definidos pelo programador Tipos enumerados  Enumera os valores do novo tipo  Sintaxe enum tipoEnumerado { decricao1, descricao2,..., descricaoN };

Tipos definidos pelo programador Tipos enumerados  Enumera os valores do novo tipo  Sintaxe enum tipoEnumerado { decricao1, descricao2,..., descricaoN };  Exemplos: valores sinônimos: a) enum TNaipe {paus, ouros, copas, espadas};

Tipos definidos pelo programador Tipos enumerados  Enumera os valores do novo tipo  Sintaxe enum tipoEnumerado { decricao1, descricao2,..., descricaoN };  Exemplos: valores sinônimos: a) enum TNaipe {paus, ouros, copas, espadas}; valores sinônimos: b) enum TDiaDaSemana {domingo=1, segunda, terça, quarta, quinta, sexta, sabado};

Tipos definidos pelo programador Tipos enumerados  Enumera os valores do novo tipo  Sintaxe enum tipoEnumerado { decricao1, descricao2,..., descricaoN };  Exemplos: valores sinônimos: a) enum TNaipe {paus, ouros, copas, espadas}; valores sinônimos: b) enum TDiaDaSemana {domingo=1, segunda, terça, quarta, quinta, sexta, sabado}; Operadores lógicos são válidos para as descrições de um tipo enumerado.

Tipos definidos pelo programador Tipos enumerados  Declaração Junto com a declaração do tipo Depois da declaração do tipo

Tipos definidos pelo programador Tipos enumerados  Declaração Junto com a declaração do tipo Depois da declaração do tipo enum tipoEnumerado {valor1, valor2,...} identificador1 [, identificador2,..., identificadorN];

Tipos definidos pelo programador Tipos enumerados  Declaração Junto com a declaração do tipo Depois da declaração do tipo enum tipoEnumerado {valor1, valor2,...} identificador1 [, identificador2,..., identificadorN]; enum TNaipe {paus, ouros, espadas, copas} naipeDaMesa, naipeDoJogador;

Tipos definidos pelo programador Tipos enumerados  Declaração Junto com a declaração do tipo Depois da declaração do tipo enum tipoEnumerado {valor1, valor2,...} identificador1 [, identificador2,..., identificadorN]; enum TNaipe {paus, ouros, espadas, copas} naipeDaMesa, naipeDoJogador; enum tipoEnumerado identificador1 [, identificador2,..., identificadorN];

Tipos definidos pelo programador Tipos enumerados  Declaração Junto com a declaração do tipo Depois da declaração do tipo enum tipoEnumerado {valor1, valor2,...} identificador1 [, identificador2,..., identificadorN]; enum TNaipe {paus, ouros, espadas, copas} naipeDaMesa, naipeDoJogador; enum tipoEnumerado identificador1 [, identificador2,..., identificadorN]; enum TNaipe naipeDaMesa, naipeDoJogador;

Tipos definidos pelo programador Tipos de registro  Registram mais de um componente

Tipos definidos pelo programador Tipos de registro  Registram mais de um componente  Sintaxe struct nomeDoRegistro { tipo1 nomeDoCampo1_1 [, nomeDoCampo1_2,..., nomeDoCampo1_W]; tipo2 nomeDoCampo2_1 [, nomeDoCampo2_2,..., nomeDoCampo2_X];... tipoN nomeDoCampoN_1 [, nomeDoCampoN_2,..., nomeDoCampoN_Y]; };

Tipos definidos pelo programador Tipos de registro  Registram mais de um componente  Sintaxe  Exemplos struct nomeDoRegistro { tipo1 nomeDoCampo1_1 [, nomeDoCampo1_2,..., nomeDoCampo1_W]; tipo2 nomeDoCampo2_1 [, nomeDoCampo2_2,..., nomeDoCampo2_X];... tipoN nomeDoCampoN_1 [, nomeDoCampoN_2,..., nomeDoCampoN_Y]; }; struct TData { int dia, ano; string mes; }; struct TData { int dia; string mes; int ano; };

Tipos definidos pelo programador Tipos de registro  Declaração Junto com a declaração do tipo Depois da declaração do tipo

Tipos definidos pelo programador Tipos de registro  Declaração Junto com a declaração do tipo Depois da declaração do tipo struct tipoDeRegistro {...} identificador1 [, identificador2,..., identificadorN];

Tipos definidos pelo programador Tipos de registro  Declaração Junto com a declaração do tipo Depois da declaração do tipo struct tipoDeRegistro {...} identificador1 [, identificador2,..., identificadorN]; struct TData TNaipe { int dia, ano; string mes; } hoje, nascimento;

Tipos definidos pelo programador Tipos de registro  Declaração Junto com a declaração do tipo Depois da declaração do tipo struct tipoDeRegistro {...} identificador1 [, identificador2,..., identificadorN]; struct TData TNaipe { int dia, ano; string mes; } hoje, nascimento; struct tipoDeRegistro identificador1 [, identificador2,..., identificadorN];

Tipos definidos pelo programador Tipos de registro  Declaração Junto com a declaração do tipo Depois da declaração do tipo struct tipoDeRegistro {...} identificador1 [, identificador2,..., identificadorN]; struct TData TNaipe { int dia, ano; string mes; } hoje, nascimento; struct tipoDeRegistro identificador1 [, identificador2,..., identificadorN]; struct TData hoje, nascimento;

Tipos definidos pelo programador Tipos de registro  Manipulação do registro inteiro struct1 = struct2;

Tipos definidos pelo programador Tipos de registro  Manipulação do registro inteiro struct1 = struct2; nascimento = hoje;

Tipos definidos pelo programador Tipos de registro  Manipulação do registro inteiro struct1 = struct2;  Manipulação de um campo do registro Designador de campo ‘.’ nascimento = hoje;

Tipos definidos pelo programador Tipos de registro  Manipulação do registro inteiro struct1 = struct2;  Manipulação de um campo do registro Designador de campo ‘.’ nomeDaVariável. nomeDoCampo cin >> hoje. ano); nascimento.ano = hoje. ano; cout << nascimento. ano; nascimento = hoje;

Tipos definidos pelo programador Tipos de registro  Estruturas mistas O campo de um tipo de registro é outro tipo de registro

Tipos definidos pelo programador Tipos de registro  Estruturas mistas O campo de um tipo de registro é outro tipo de registro  Exemplo struct TData { int dia, mes, ano; }; struct TPessoa { string nome; struct TData dataDeNascimento; }; struct TPessoa pessoa;

Tipos definidos pelo programador Tipos de registro  Estruturas mistas O campo de um tipo de registro é outro tipo de registro  Exemplo  Acesso cin >> pessoa. dataDeNascimento. dia); struct TData { int dia, mes, ano; }; struct TPessoa { string nome; struct TData dataDeNascimento; }; struct TPessoa pessoa;

Tipos definidos pelo programador Estruturas locais X estruturas globais Um tipo declarado dentro de um módulo só existe dentro do módulo. Módulos

Tipos definidos pelo programador Estruturas locais X estruturas globais Um tipo declarado fora de qualquer módulo existe dentro de todos os módulos. Módulos

Tipos definidos pelo programador Exemplo completo 01 #include 02 using namespace std; 03 enum TMes {Janeiro=1, Fevereiro, Marco, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro, Novembro, Dezembro}; 04 struct TData 05 { 06 int dia; 07 TMes mes; 08 int ano; 09 }; 10 int AnoBissexto (int ano) 11 { 12 if (ano % 4 == 0 && ano % 100 != 0 || ano % 400 == 0) 13 return(1); 14 else return(0); 15 } 16 string TMesParaTexto (TMes mes) 17 { 18 switch (mes) 19 { 20 case Janeiro : return("Janeiro"); 21 break; 22 case Fevereiro: return("Fevereiro"); 23 break; 24 case Marco : return("Marco"); 25 break; case Dezembro : return("Dezembro"); 43 break; 44 } 45 }

Tipos definidos pelo programador Exemplo completo 60 case Abril: 61 case Junho: 62 case Setembro: 63 case Novembro: if (data.dia <= 30) 64 return(1); 65 else return(0); 66 break; 67 case Fevereiro: if (AnoBissexto(data.ano)) 68 { 69 if (data.dia <= 29) 70 return(1); 71 else return(0); 72 } 73 else { 74 if (data.dia <= 28) 75 return(1); 76 else return(0); 77 } 78 default : return(0); 79 } 80 } 46 int ValidaData (struct TData data) 47 { 48 switch (data.mes) 49 { 50 case Janeiro: 51 case Marco: 52 case Maio: 53 case Julho: 54 case Agosto: 55 case Outubro: 56 case Dezembro: if (data.dia <= 31) 57 return(1); 58 else return(0); 59 break;

Tipos definidos pelo programador Exemplo completo 81 main() 82 { 83 struct TPessoa 84 { 85 string nome; 86 struct TData dataDeNascimento; 87} 88 struct TPessoa pessoa; 89 cout << "Informe seu nome: "; 90 getline(cin, pessoa.nome); 91 cout << pessoa.nome << “, informe dia, mes e ano de nascimento, separados por ENTER: "; 92cin >> pessoa.dataDeNascimento.dia; 93cin >> pessoa.dataDeNascimento.mes, 94 cin >> pessoa.dataDeNascimento.ano; 95 if (ValidaData(pessoa.dataDeNascimento)) 96 cout << "Voce nasceu em “<< pessoa.dataDeNascimento.dia << “ de “ << TMesParaTexto(pessoa.dataDeNascimento.mes) << “ de “ << pessoa.dataDeNascimento.ano); 97 else cout << "A data fornecida e invalida. O programa sera fechado."; 98 getchar(); 99 }

Tipos definidos pelo programador Exercícios do capítulo 8

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Arquivos Meio não volátil  Dados não são perdidos ao término do programa Biblioteca fstream oferece os tipos  ifstream, para leitura de dados em arquivo  ofstream, para escrita de dados em arquivo Declaração de um arquivo ifstream nomeDoArquivoUsadoParaEntrada; ofstream nomeDoArquivoUsadoParaSaida;

Arquivos Entrada e saída >> << Abertura - open() Fechamento - close() Indicador de fim de arquivo - eof() nome.open() nome.close() nome.eof()

Arquivos Exemplo #include using namespace std; main() { //Declaração de variáveis string linha; ifstream entrada; ofstream saida; int i; //Abertura do arquivo em modo de escrita saida.open("Dados.txt"); //Escrita no arquivo for(i = 1; i <= 10; i = i + 1) saida << "\n" << i << "\t" << i*i ; //Fechamento do arquivo em modo de escrita saida.close();... //Abertura do arquivo em modo de leitura entrada.open("Dados.txt"); //Leitura dos dados armazenados no arquivo getline(entrada, linha); //Consumir a primeira linha do arquivo while (!entrada.eof()) { entrada >> i; cout << i << "\t"; entrada >> i; cout << i << "\n"; } //Fechamento do arquivo em modo de leitura entrada.close(); }

Arquivos Exercícios 1. Escreva um programa para ler dados de vários alunos e escrever estes dados em um arquivo. Cada aluno possui matrícula, nome e duas notas. O programa deve também ler estes dados do arquivo e escrevê-los de volta na tela. 2. Modifique o programa anterior para agora, após ler os dados gravados no arquivo, também escrever na tela qual foi a maior média e quantos alunos atingiram a maior média.

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012

Estruturas de dados Registros dinâmicos  Nós de armazenamento são alocados mediante necessidade  Ponteiros fazem: O encadeamento dos nós A sinalização de fim dos nós

Estruturas de dados Registros dinâmicos  Nós de armazenamento são alocados mediante necessidade  Ponteiros fazem: O encadeamento dos nós A sinalização de fim dos nós  É fundamental utilizar um ponteiro para indicar o início da lista

Estruturas de dados Registros dinâmicos  Nós de armazenamento são alocados mediante necessidade  Ponteiros fazem: O encadeamento dos nós A sinalização de fim dos nós  É fundamental utilizar um ponteiro para indicar o início da lista  Exemplos: Listas, Filas e Pilhas

Estruturas de dados Listas encadeadas  Lista de caracteres  Representação de cada nó da lista struct TNoDeCaractere { char caractere; struct TNoDeCaractere * proximo; };

Estruturas de dados Listas encadeadas  Lista de caracteres  Representação de cada nó da lista  Representação do ponteiro para o início da lista (inicialmente vazia) struct TNoDeCaractere { char caractere; struct TNoDeCaractere * proximo; }; struct TNoDeCaractere * inicio; main() {... inicio = NULL;... }

Estruturas de dados Listas encadeadas  Lista de caracteres  Representação de cada nó da lista  Representação do ponteiro para o início da lista (inicialmente vazia) struct TNoDeCaractere { char caractere; struct TNoDeCaractere * proximo; }; struct TNoDeCaractere * inicio; main() {... inicio = NULL;... } “NULL” faz um ponteiro apontar para nenhuma posição de memória. O ponteiro fica aterrado.

Estruturas de dados Listas encadeadas (criação de novo nó) 01 void armazenar (char valor) 02 { 03 struct TNoDeCaractere *p, *np; 04 //Se a lista está vazia, cria um nó e faz "inicio" apontar para ele. 05 if (inicio == NULL) 06 { 07 np = new(struct TNoDeCaractere); 08 (*np).caractere = valor; 09 (*np).proximo = NULL; 10 inicio = np; 11 } 12 else //Caso contrário, ou seja, se a lista não está vazia { 14 p = inicio; 15 //varre toda a lista, 16 while ((*p).proximo != NULL) 17 p = (*p).proximo; 18 //cria o novo nó 19 np = new(struct TNoDeCaractere); 20 (*np).caractere = valor; 21 (*np).proximo = NULL; 22 //e liga a lista existente ao novo nó. 23 (*p).proximo = np; 24 } 25 }

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura inicial:

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura inicial: Alocação do novo nó: 07 np = new(struct TNoDeCaractere); new – reserva um novo espaço de memória (struct TNoDeCaractere) – do tamanho exato de um registro “TNoDeCaractere”, np = – e faz este espaço ser apontado por “np”.

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura inicial: Alocação do novo nó: Nova estrutura: 07 np = new(struct TNoDeCaractere); new – reserva um novo espaço de memória (struct TNoDeCaractere) – do tamanho exato de um registro “TNoDeCaractere”, np = – e faz este espaço ser apontado por “np”.

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura atual:

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura atual: Armazenamento do valor ‘O’ no novo nó e aterramento do novo nó: 08 (*np).caractere = valor; //supor que " valor" seja 'O' 09 (*np).proximo = NULL;

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura atual: Armazenamento do valor ‘O’ no novo nó e aterramento do novo nó: Nova estrutura: 08 (*np).caractere = valor; //supor que " valor" seja 'O' 09 (*np).proximo = NULL;

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura atual:

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura atual: Atualização do ponteiro para o início da lista: 10 inicio = np;

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura atual: Atualização do ponteiro para o início da lista: Nova estrutura: 10 inicio = np;

Estruturas de dados Listas encadeadas (criação de novo nó)  Em uma lista vazia Estrutura atual: Atualização do ponteiro para o início da lista: Nova estrutura: 10 inicio = np; No encerramento do procedimento, a variável “np” é excluída da memória, pois ela é uma variável local ao procedimento.

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual:

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Atribuição de valor inicial ao ponteiro p: 14 p = inicio;

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Atribuição de valor inicial ao ponteiro p: Nova estrutura: 14 p = inicio;

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual:

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Varredura de toda a lista: 16 while ((*p).proximo != NULL) 17 p = (*p).proximo; ppp p

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Varredura de toda a lista: 16 while ((*p).proximo != NULL) 17 p = (*p).proximo; ppp p Como o campo próximo do nó apontado por p já é o fim da fila, a linha 17 não é executada nenhuma vez.

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual:

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Alocação do novo nó: 19 np = new(struct TNoDeCaractere);

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Alocação do novo nó: Nova estrutura: 19 np = new(struct TNoDeCaractere);

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual:

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Armazenamento do valor ‘I’ no novo nó e aterramento do novo nó: 20 (*np).caractere = valor; //supor que " valor" seja 'I' 21 (*np).proximo = NULL;

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Armazenamento do valor ‘I’ no novo nó e aterramento do novo nó: Nova estrutura: 20 (*np).caractere = valor; //supor que " valor" seja 'I' 21 (*np).proximo = NULL;

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual:

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Atualização do ponteiro para o início da lista: 23 (*p).proximo = np;

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Atualização do ponteiro para o início da lista: Nova estrutura: 23 (*p).proximo = np;

Estruturas de dados Listas encadeadas (criação de novo nó)  No final de uma lista Estrutura atual: Atualização do ponteiro para o início da lista: Nova estrutura: 23 (*p).proximo = np; No encerramento do procedimento, as variáveis ”p” e “np” são excluídas da memória, pois elas são variáveis locais ao procedimento.

Estruturas de dados Listas encadeadas (exclusão de um nó) 01 void retirar (char valor) 02 { 03 struct TNoDeCaractere * pAnt, *p; 04 //Verifica se a partir do segundo nó, há nó a ser retirado. 05 pAnt = inicio; 06 p = (*inicio).proximo; 07 while (p != NULL) 08 { 09 if ((*p).caractere == valor) 10 { 11 (*pAnt).proximo = (*p).proximo; 12 delete(p); 13 p = (*pAnt).proximo; 14 } 15 else { 16 pAnt = (*pAnt).proximo; 17 p = (*p).proximo; 18 } 19 } 20 //Testa se a lista está com o valor a ser retirado no primeiro nó. 21 if ((*inicio).caractere == valor) 22 { 23 p = (*inicio).proximo; 24 delete(inicio); 25 inicio = p; 26 } 27 }

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:  Atualização do ponteiro para o início da lista: 23 p = (*inicio).proximo;

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:  Atualização do ponteiro para o início da lista:  Nova estrutura: 23 p = (*inicio).proximo;

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:  Exclusão do nó: 24 delete(inicio); Libere a área de memória apontada por “inicio”.

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:  Exclusão do nó:  Nova estrutura: 24 delete(inicio); Libere a área de memória apontada por “inicio”.

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:  Atualização do ponteiro para o início da lista: 25 inicio = p;

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:  Atualização do ponteiro para o início da lista:  Nova estrutura: 25 inicio = p;

Estruturas de dados Listas encadeadas (exclusão do primeiro nó)  Estrutura atual:  Atualização do ponteiro para o início da lista:  Nova estrutura: 25 inicio = p; No encerramento do procedimento, a variável “p” é excluída da memória, pois ela é uma variável local ao procedimento.

Estruturas de dados Listas encadeadas (exclusão de nó genérico)  Varredura para achar o elemento a ser excluído: 05 pAnt = inicio; 06 p = (*inicio).proximo; 07 while (p != NULL) 08 { 09 if ((*p).caractere == valor) 10 { 11 (*pAnt).proximo = (*p).proximo; 12 delete(p); 13 p = (*pAnt).proximo; 14 } 15 else { 16 pAnt = (*pAnt).proximo; 17 p = (*p).proximo; 18 } 19 } p pAnt

Estruturas de dados Listas encadeadas (exclusão de nó genérico)  Estrutura atual: pAnt p

Estruturas de dados Listas encadeadas (exclusão de nó genérico)  Estrutura atual:  Exclusão do elemento e redistribuição da lista: 11 (*pAnt).proximo = (*p).proximo; 12 delete(p); 13 p = (*pAnt).proximo; pAnt p

Estruturas de dados Listas encadeadas (exclusão de nó genérico)  Estrutura atual:  Exclusão do elemento e redistribuição da lista: 11 (*pAnt).proximo = (*p).proximo; 12 delete(p); 13 p = (*pAnt).proximo; pAnt p No encerramento do procedimento, as variáveis “p” e “pAnt” são excluídas da memória, pois elas são variáveis locais ao procedimento.

Estruturas de dados Filas (FIFO – First In, First Out)  O primeiro a entrar é o primeiro a sair  Como uma fila de cinema  Exemplo:

Estruturas de dados Filas (FIFO – First In, First Out)  O primeiro a entrar é o primeiro a sair  Como uma fila de cinema  Exemplo:

Estruturas de dados Filas (FIFO – First In, First Out)  O primeiro a entrar é o primeiro a sair  Como uma fila de cinema  Exemplo:  No momento, o elemento a ser retirado é o nó que contém o número 3!

Estruturas de dados Exercícios  Exercícios 1 e 2 da seção 10.4 da apostila.

Estruturas de dados Pilhas (LIFO – Last In, First Out)  O último a entrar é o primeiro a sair  Como uma pilha de rascunhos  Exemplo:

Estruturas de dados Pilhas (LIFO – Last In, First Out)  O último a entrar é o primeiro a sair  Como uma pilha de rascunhos  Exemplo:

Estruturas de dados Pilhas (LIFO – Last In, First Out)  O último a entrar é o primeiro a sair  Como uma pilha de rascunhos  Exemplo:  O elemento a ser retirado é o nó que contém o número 7!

Estruturas de dados Exercícios  Exercícios 3, 4 e 5 da seção 10.4 da apostila.

Programação de algoritmos Rodrigo Reis Gomes Bacharel em Informática – UFRJ – 1999 Mestre em Modelagem Computacional – UERJ – 2003 Doutor em Modelagem Computacional – UERJ – 2012