lógica de programação ecoi02€¦ · •etapas para desenvolvimento de um programa: –análise:...

126
Lógica de Programação – ECOi02 Profa. Rossana Junqueira 1

Upload: others

Post on 12-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

Lógica de Programação – ECOi02

Profa. Rossana Junqueira

1

Page 2: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1 – Conceitos Básicos

2

Page 3: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1 – Conceitos básicos

• Uso de máquinas para auxiliar o trabalho. – Computador:

• É: – Consciente;

– Trabalhador;

– Muita energia.

• Não tem: – Iniciativa;

– Independência;

– Criatividade;

– Inteligência.

• Conclusão: – Precisa receber instruções nos mínimos detalhes.

3

Page 4: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1 – Conceitos básicos

– Computador:

• Finalidade: – Receber, manipular e armazenar dados.

– Processamento de dados.

» Receber dados por um dispositivo de entrada, realizar operações com esses dados e gerar uma resposta que será expressa em um dispositivo de saída.

• Duas partes diferentes: – Hardware

– Software

4

Page 5: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1 – Conceitos básicos

• Quando queremos criar ou desenvolver um software para realizar determinado tipo de processamento de dados, devemos escrever um programa ou vários programas interligados.

• Linguagem utilizada: linguagem de programação.

– Linguagem que tanto o computador quanto o criador de software entendam.

5

Page 6: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1 – Conceitos básicos

• Etapas para desenvolvimento de um programa:

– Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento e os dados de saída.

– Algoritmo: descrever o problema com as suas soluções.

– Codificação: o algoritmos é transformado em códigos da linguagem de programação escolhida para se trabalhar.

6

Page 7: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1.1 – Conceito de algoritmo

“ Descrição de uma sequência de passos que deve ser seguida para a realização de um

tarefa.” (ASCENCIO, 1999)

7

Page 8: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1.2 – Método para a construção de algoritmos

• Compreender completamente o problema a ser resolvido;

• Definir os dados de entrada;

• Definir o processamento;

• Definir os dados de saída;

• Construir o algoritmo;

• Testar o algoritmo.

8

Page 9: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1.3 – Tipos de algoritmos

• Descrição narrativa: – Utilizar a linguagem natural para escrever os

passos a serem seguidos para a sua resolução.

• Fluxograma: – Utilizar símbolos gráficos predefinidos para

escrever os passos a serem seguidos para a sua resolução.

• Pseudocódigo ou portugol: – Utilizar regras predefinidas para escrever os

passos a serem seguidos para a sua resolução.

9

Page 10: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1.4 – Exemplos de algoritmos • Faça um algoritmo para mostrar o resultado

da multiplicação de dois números:

– Descrição narrativa:

– Fluxograma:

10

Page 11: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1.4 – Exemplos de algoritmos • Faça um algoritmo para mostrar o resultado

da multiplicação de dois números:

– Pseudocódigo ou portugol:

11

Page 12: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1.5 – Conceito de variável • Um algoritmo e, posteriormente, um

programa recebem dados que precisam ser armazenados no computador para serem utilizados no processamento.

• Armazenamento é feito na memória.

• Uma variável representa uma posição de memória, que possui nome e tipo e seu conteúdo pode variar ao longo do tempo, durante a execução de um programa.

• Só armazena um valor a cada instante. 12

Page 13: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1.6 – Tipos de dados • Mais utilizados:

– Numéricos:

• Inteiros ou reais.

– Lógicos:

• Assumem verdadeiro ou falso.

– Literais.

13

Page 14: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

1.7 – Formação de identificadores • Nomes das variáveis.

• Regras básicas:

– Os caracteres permitidos são: os números, as letras maiúsculas, as letras minúsculas e o _.

– O primeiro caractere deve ser sempre uma letra.

– Não são permitidos espaços em branco e caracteres especiais.

– Não podemos usar palavras que pertençam à linguagem de programação.

14

Page 15: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

2 – Paradigmas de programação

15

Page 16: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

2 – Paradigmas de programação

• Relacionado à forma de pensar do programador e como ele busca a solução para os problemas.

• Exemplos: – Estruturado, orientado a objetos, lógico,

funcional, ...

• Paradigma estruturado: Também conhecido como imperativo ou procedural. Problema quebrado em problemas menores, de mais fácil solução.

16

Page 17: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

Conteúdo Programático

17

Page 18: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

Conteúdo programático

• Estrutura sequencial

• Estrutura condicional

• Funções

• Estrutura de repetição (FOR, WHILE e DO-WHILE)

• Arranjos unidimensionais (Vetor)

• Arranjos multidimensionais (Matriz)

• Estruturas heterogêneas de dados (Registro)

• Alocação dinâmica de memória (Ponteiro) 18

Page 19: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3 – Estrutura sequencial

19

Page 20: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.1 – Estrutura sequencial em C/C++

• Bibliotecas: São arquivos contendo várias funções que podem ser incorporadas aos programas escritos em C/C++.

• #include: Faz o texto contido na biblioteca especificada ser inserido no programa.

Obs: A linguagem é sensível a letras maiúsculas e minúsculas.

20

#include <nome_da_biblioteca> main ( ) { bloco_de_comandos; }

Page 21: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.2 – Declaração de variáveis

• São declaradas após a especificação de seus tipos.

• Tipos mais utilizados:

– int: para números inteiros;

– float: para números reais;

– char: para um caractere;

• Exemplo:

21

int x, y;

float z;

char sexo;

char nome[40];

Page 22: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.2 – Declaração de constantes

• São declaradas depois das bibliotecas e seus valores não podem ser alterados durante a execução do programa.

• Exemplo:

22

const tipo nome valor

const int x = 7;

const float y = 4.5;

const char nome[40] = “MARIA”;

Page 23: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.3 – Comando de atribuição

• Utilizado para conceder valores ou operações a variáveis.

• Representado por = (sinal de igualdade)

• Exemplo:

23

x = 4; y = x + 2;

Page 24: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

Observações

• Os caracteres são representados ente apóstrofos (‘);

• As cadeias de caracteres são representados entre aspas (“);

• Cada comando é finalizado com o sinal de ponto e vírgula (;);

• A parte inteira e a parte fracionária do número são separadas por um ponto (.).

24

Page 25: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.4 – Comando de entrada

• Utilizado para receber dados digitados pelo usuário.

• Os dados recebidos são armazenados em variáveis.

• Comando de entrada utilizado: cin

– leia-se: c in

• Exemplo:

25

cin >> n1;

Page 26: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.4 – Comando de saída

• Utilizado para mostrar dados na tela.

• Comando de saída utilizado: cout

– leia-se: c out

• Exemplo:

26

cout << x; Ou cout << “Valor de x: “ << x;

Page 27: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.4 – Comando de saída

• Exemplo:

– endl: pula uma linha

27

cout << “Valor de x: “ << x << endl;

Page 28: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.5 – Comentários

• São textos que podem ser inseridos em programas com o objetivo de documentá-los.

• Não são analisados pelo compilador.

• Podem ocupar uma ou várias linhas.

– 1 linha: //

– 1 ou mais linhas: /* .......... */

• Exemplo:

28

/* linhas de comentário linhas de comentário */

// comentário

Page 29: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.5 – Operadores e funções predefinidas

29

Operador Exemplo Comentário

= x = y O conteúdo da variável y é atribuído à variável x.

+ x + y Soma o conteúdo de x e de y.

- x – y Subtrai o conteúdo de y do conteúdo de x.

* x * y Multiplica o conteúdo de x pelo conteúdo de y.

/ x / y Obtém o quociente da divisão de x por y.

% x % y Obtém o resto da divisão de x por y.

== x == y O conteúdo de x é igual ao conteúdo de y.

!= x != y O conteúdo de x é diferente do conteúdo de y.

<= x <= y O conteúdo de x é menor ou igual ao conteúdo de y.

>= x >= y O conteúdo de x é maior ou igual ao conteúdo de y.

< x < y O conteúdo de x é menor que o conteúdo de y.

> x > y O conteúdo de x é maior que o conteúdo de y.

Page 30: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.6 – Inicialmente...

30

• iostream: biblioteca para entrada e saída de dados;

• using namespace std: métodos default para entrada e saída de dados;

Page 31: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.7 – Exercícios resolvidos

31

1. Faça um programa que receba quatro números inteiros, calcule e mostre a soma desses números.

Page 32: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

3.6 – Exercícios resolvidos

32

2. Faça um programa que receba três notas, calcule e mostre a média aritmética.

Page 33: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

4 – Estrutura condicional

33

Page 34: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

4.1 – Estrutura condicional SIMPLES em C/C++ • O comando só será executado se a condição

for verdadeira.

• Uma condição é uma comparação que possui dois valores possíveis: verdadeiro ou falso.

34

if (condição) comando;

if (condição) { comando1; comando2; }

Page 35: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

4.1 – Estrutura condicional SIMPLES em C/C++ • Exemplo1:

– Faça um programa que receba a nota de um aluno e mostre se ele está aprovado.

35

#include <iostream> using namespace std; main () { float nota; cout << "Nota: "; cin >> nota; if (nota >= 6) cout << "Aprovado!!!"; }

Page 36: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

4.2 – Estrutura condicional COMPOSTA em C/C++ • Se a condição for verdadeira, será executado o

comando1; se for falsa, será executado o comando2.

36

if (condição) comando1; else comando2;

if (condição) { comando1; comando2; } else { comando3; comando4; }

Page 37: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

4.2 – Estrutura condicional COMPOSTA em C/C++ • Exemplo2:

– Faça um programa que receba a nota de um aluno e mostre se ele está aprovado ou reprovado.

37

#include <iostream> using namespace std; main () { float nota; cout << "Nota: "; cin >> nota; if (nota >= 6) cout << "Aprovado!!!"; else cout << "Reprovado!!!"; }

Page 38: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

4.3 – Estrutura condicional CASE em C/C++ • Usado em situações mutuamente exclusivas,

isto é, se uma situação for executada, as demais não serão.

38

switch (variável) { case valor1: lista de comandos; break; case valor2: lista de comandos; break; ......... default: lista de comandos; }

break: Usado para impedir a execução dos comandos definidos nos cases subsequentes. default: Quando o valor da variável não coincidir com aqueles especificados nos cases, será executado, então, o default.

Page 39: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

4.3 – Estrutura condicional CASE em C/C++ • Exemplo3:

– Faça um programa que receba um número. O programa deverá dar como resposta “Número 1” se o número digitado tiver sido 1, “Número 2” se o número digitado tiver sido 2 e “Número diferente de 1 e 2” para qualquer outro número digitado.

39

{ int num; cout << "Digite um numero: "; cin >> num; switch (num) { case 1: cout << "Numero 1"; break; case 2: cout << "Numero 2"; break; default: cout << "Numero diferente de 1 e 2"; } }

Page 40: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

4.4 – Exercícios Resolvidos 1. Faça um programa que receba as três notas de um aluno,

calcule e mostre a média e o conceito de acordo com a tabela abaixo:

40

8,0 10,0 A

7,0 8,0 B

6,0 7,0 C

5,0 6,0 D

0,0 5,0 E

Page 41: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

4.4 – Exercícios Resolvidos

41

{ float n1, n2, n3, media; cout << "Digite a primeira nota: "; cin >> n1; cout << "Digite a segunda nota: "; cin >> n2; cout << "Digite a terceira nota: "; cin >> n3; media = (n1 + n2 + n3) / 3; cout << "Media: " << media << endl; if (media >= 0 and media < 5) cout << "E"; else if (media >= 5 and media < 6) cout << "D"; else if (media >= 6 and media < 7) cout << "C"; else if (media >= 7 and media < 8) cout << "B"; else cout << "A"; }

Page 42: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5 – Funções

42

Page 43: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.1 – Funções em C/C++

• Também chamada de sub-rotinas, são blocos de instruções que realizam tarefas específicas.

• O código do uma sub-rotina é carregado uma vez e pode ser executado quantas vezes forem necessárias.

• Como o problema pode ser subdividido em pequenas tarefas, os programas tendem a ficar menores e mais organizados.

43

Page 44: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.1 – Funções em C/C++

• Os programas, em geral, são executados linearmente, uma linha após a outra, até o fim.

• Quando são usadas sub-rotinas, é possível a realização de desvios na execução do programa.

• Esse desvios são efetuados quando uma função é chamada pelo programa principal.

44

Page 45: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.1 – Funções em C/C++

• Um ponto a ser destacado é que, dentro das sub-rotinas, pode ocorrer declaração de variáveis, chamadas variáveis locais.

• Só podem ser utilizadas apenas dentro da sub-rotina.

• Quando a execução da sub-rotina chega ao fim, essas variáveis são destruídas e seus conteúdos são perdidos.

• Variáveis declaradas fora de qualquer sub-rotina são chamadas globais.

45

Page 46: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.1 – Funções em C/C++

• Podem ser criadas quantas funções quiser, dependendo do problema que estiver sendo resolvido pelo programa.

• Às vezes precisam receber valores externos, chamados parâmetros.

• Podem devolver algum valor produzido para o ambiente externo, denominado retorno.

46

Page 47: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.2 – Funções sem passagem de parâmetros e sem retorno • O tipo mais simples de função é aquele que

não recebe nenhuma informação no momento de sua chamada e que não repassa nenhum valor para quem a chamou.

• void é a forma de identificar que a função não retorna nenhuma informação.

47

void nome_da_função () { comando; }

Page 48: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.2 – Funções sem passagem de parâmetros e sem retorno • Exemplo: Função soma que recebe dois números e imprime a sua

soma.

48

#include <iostream> using namespace std; void soma () { int x, y, soma; cout << "X: "; cin >> x; cout << "Y: "; cin >> y; soma = x + y; cout << "Soma: " << soma; } main() { soma(); }

Page 49: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.3 – Funções com passagem de parâmetros e sem retorno • Esse tipo de função recebe valor no momento

em que é chamada, mas não devolvem valor para quem as chamou (retorno).

• Onde tipo é o tipo de dado do parâmetro.

49

void nome_da_função (tipo nome_do_parametro, tipo nome_do_parametro, ...) { comando; }

Page 50: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.3 – Funções com passagem de parâmetros e sem retorno • Exemplo: Função soma que recebe dois parâmetros do tipo int e

imprime a sua soma.

50

#include <iostream> using namespace std; void soma (int a, int b) { int soma; soma = a + b; cout << "Soma: " << soma; } main() { int x, y; cout << "X: "; cin >> x; cout << "Y: "; cin >> y; soma(x,y); }

Page 51: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.4 – Funções sem passagem de parâmetros e com retorno • Esse tipo de função não recebe valor no

momento em que são chamadas (parâmetros), mas que, no final, devolvem um valor para quem as chamou (retorno).

• Onde tipo_retorno é o tipo de dado que o resultado desta função vai retornar.

51

tipo_retorno nome_da_função () { comando; }

Page 52: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.4 – Funções sem passagem de parâmetros e com retorno • Exemplo: Função soma que recebe dois números e retorna o resultado

para o programa principal.

52

#include <iostream> using namespace std; int soma () { int x, y, s; cout << "X: "; cin >> x; cout << "Y: "; cin >> y; s = x + y; return s; } main() { int resultado; resultado = soma(); cout << "Resultado da soma: " << resultado; }

Page 53: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.5 – Funções com passagem de parâmetros e com retorno • Esse tipo de função recebe valor no momento

em que são chamadas (parâmetros), e que, no final, devolvem um valor para quem as chamou (retorno).

53

tipo_retorno nome_da_função (tipo nome_da_variável, tipo nome_da variável, ...) { comando; }

Page 54: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.5 – Funções com passagem de parâmetros e com retorno • Exemplo: Função soma que recebe dois parâmetros do tipo

int e retorna o resultado para o programa principal.

54

#include <iostream> using namespace std; int soma (int a, int b) { int s; s = a + b; return s; } main() { int x, y, resultado; cout << "X: "; cin >> x; cout << "Y: "; cin >> y; resultado = soma(x,y); cout << "Resultado da soma: " << resultado; }

Page 55: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.6 – Passagem de parâmetros por valor • Significa que a função trabalhará com cópias

dos valores passados no momento de sua chamada, desta forma, qualquer alteração dos valores nas variáveis correspondentes dentro da função não afetam os valores das variáveis utilizadas como parâmetros.

• Até este momento todas as funções apresentadas utilizam a passagem de parâmetros por valor.

55

Page 56: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.6 – Passagem de parâmetros por valor

56

#include<iostream> using namespace std; void nao_muda(int a, int b) //passagem por valor { a = a + 2; b = b + 5; } int main() { int x, y; cout << "X: "; cin >> x; cout << "Y: "; cin >> y; nao_muda(x,y); cout << "Valores apos a funcao nao_muda x = "<< x <<" y = " << y; }

Page 57: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.7 – Passagem de parâmetros por referência • Significa que a função trabalhará com as próprias

variáveis passadas no momento de sua chamada. Assim, qualquer alteração nos valores das variáveis correspondentes dentro da função afetam as variáveis passadas como parâmetros.

• Este mecanismo permite que a função retorne mais de um valor para a função que chama.

• Para definir que um parâmetro será passado como referência para uma função, utilizamos o símbolo & antes do nome da variável no cabeçalho da função, indicando que ela é um alias (apelido, referência, outro nome) para a variável passada como parâmetro.

57

Page 58: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

5.7 – Passagem de parâmetros por referência

58

#include<iostream> using namespace std; void muda(int &a, int &b) //passagem por referência { a = a + 2; b = b + 5; } int main() { int x, y; cout << "X: "; cin >> x; cout << "Y: "; cin >> y; muda(x,y); cout << "Valores apos a funcao muda x = "<< x << " y = " << y; }

Page 59: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6 – Estrutura de repetição

59

Page 60: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.1 – Estrutura de repetição em C/C++

• Utilizada quando um trecho do algoritmo, ou até mesmo o algoritmo inteiro, precisa ser repetido.

• O número de repetições pode ser fixo ou estar atrelado a uma condição.

• Tipos de estrutura:

– FOR

– WHILE

– DO-WHILE

60

Page 61: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.1 – Estrutura de repetição FOR em C/C++

• Utilizada quando se sabe o número de vezes que um trecho do programa deve ser repetido.

• A primeira parte atribui um valor_inicial à variável i, que tem como função controlar o número necessário de repetições.

• A segunda parte corresponde a uma expressão relacional que, quando assumir o valor falso, determinará o fim da repetição.

• A terceira parte é responsável por alterar o valor da variável i, com o objetivo de, em algum momento, fazer a condição assumir o valor falso.

61

for (i = valor_inicial; condicao; incremento ou decremento de i) { comando; }

Page 62: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.1 – Estrutura de repetição FOR em C/C++

• Exemplo 1: Mostrar os números de 1 a 20.

62

main() { int a; for (a = 1; a <= 20; a++) { cout << a << endl; } }

Page 63: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.1 – Estrutura de repetição FOR em C/C++

• Exemplo 2: Mostrar os números pares de 1 a 20.

63

main() { int a; for (a = 1; a <= 20; a++) { if (a % 2 == 0) cout << a << endl; } }

Page 64: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.2 – Estrutura de repetição WHILE em C/C++

• Pode ser utilizada quando o número de repetições necessárias não for fixo.

• Os comandos serão repetidos até a condição assumir o valor falso.

• Enquanto a condição for verdadeira, os comandos que estão dentro das chaves serão executados .

64

while (condição) { comando; }

Page 65: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.2 – Estrutura de repetição WHILE em C/C++

• Exemplo 3: Mostrar os números de 1 a 20.

65

main() { int a; a = 1; while (a <= 20) { cout << a << endl; a = a + 1; } }

Page 66: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.2 – Estrutura de repetição WHILE em C/C++

• Exemplo 4: Mostrar os números pares de 1 a 20.

66

main() { int a; a = 1; while (a <= 20) { if (a % 2 == 0) cout << a << endl; a = a + 1; } }

Page 67: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.2 – Estrutura de repetição WHILE em C/C++

• Exemplo 5: Mostrar a soma dos números digitados pelo usuário.

67

main() { int a, soma, teste; teste = 0; while (teste != 1) { cout << "Digite um numero: "; cin >> a; soma = soma + a; cout << "Digite 0 para informar outro numero ou 1 para sair: "; cin >> teste; } cout << "Soma: " << soma; }

Page 68: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.3 – Estrutura de repetição DO-WHILE em C/C++

• Pode ser utilizada quando o número de repetições necessárias não for fixo.

• Os comandos serão repetidos até a condição assumir o valor falso.

• Nesse tipo de estrutura o teste condicional ocorre no fim. Isso significa que a repetição será executada, no mínimo, uma vez, quando todo bloco for executado uma vez, e, ao final, a condição assumir o valor falso.

68

Page 69: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.3 – Estrutura de repetição DO-WHILE em C/C++

• Os comandos serão repetidos até que a condição assuma valor falso.

69

do { comandos; } while (condição);

Page 70: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.3 – Estrutura de repetição DO-WHILE em C/C++

• Exemplo 6: Mostrar os números de 1 a 20.

70

main() { int a; a = 1; do { cout << a << endl; a = a + 1; } while (a <= 20); }

Page 71: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.3 – Estrutura de repetição DO-WHILE em C/C++

• Exemplo 7: Mostrar os números pares de 1 a 20.

71

main() { int a; a = 1; do { if (a % 2 == 0) cout << a << endl; a = a + 1; } while (a <= 20); }

Page 72: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

6.3 – Estrutura de repetição DO-WHILE em C/C++

• Exemplo 8: Mostrar a soma dos números digitados pelo usuário.

72

main() { int a, soma, teste; teste = 0; soma = 0; do { cout << "Digite um numero: "; cin >> a; soma = soma + a; cout << "Digite 0 para informar outro numero ou 1 para sair: "; cin >> teste; } while (teste != 1); cout << "Soma: " << soma; }

Page 73: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

7 – Vetor

73

Page 74: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

7.1 – Vetor em C/C++

• Conhecido como variável composta homogênea unidimensional.

• Trata-se de um conjunto de variável do mesmo tipo, que possuem o mesmo identificador (nome) e são alocadas sequencialmente na memória.

• Como as variáveis têm o mesmo nome, o que as distingue é um índice que referencia sua localização dentro da estrutura.

74

Page 75: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

7.2 – Declaração de vetor

• Os vetores são identificados pela existência de colchetes logo após o nome da variável no momento da declaração.

• Dentro dos colchetes, deve-se colocar o número de elementos que o vetor poderá armazenar.

75

int vet[10];

10 5 3 8 1 19 44 21 2 7

0 1 2 3 4 5 6 7 8 9

vet

Page 76: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

7.3 – Atribuindo valor ao vetor

• As atribuições em vetor exigem que seja informada em qual de suas posições o valor ficará armazenado.

• Lembre-se: sempre a primeira posição de u vetor tem índice 0.

76

vet[0] = 1; Atribui o valor 1 à primeira posição do vetor.

x[3] = ‘b’; Atribui a letra b à quarta posição do vetor.

Page 77: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

7.4 – Preenchendo um vetor

• Preencher um vetor significa atribuir valor às suas posições. Assim, deve-se implementar um mecanismo que controle o valor do índice.

77

int i, vet[10]; for (i=0; i < 10; i++) { cout << "Digite um número: "; cin >> vet[i]; }

Page 78: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

7.5 – Mostrando os elementos do vetor

• Mostrar os valores contidos em um vetor também exige a utilização de um índice.

78

for (i=0; i < 10; i++) { cout << vet[i]; }

Page 79: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

7.6 – Exemplo

• Escrever um algoritmo que leia duas notas de 5 alunos. Calcular a média e guardar em um terceiro vetor, e ao final, escrever a média de cada um dos alunos.

79

Page 80: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

7.6 – Exemplo

80

int i, nota1[5], nota2[5]; float media[5]; for (i=0; i < 5; i++) { cout << "Nota 1: "; cin >> nota1[i]; cout << "Nota 2: "; cin >> nota2[i]; media[i] = (nota1[i] + nota2[i]) / 2; } cout << endl; for (i=0; i < 5; i++) { cout << media[i] << endl; }

Page 81: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

8 – Matriz

81

Page 82: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

8.1 – Matriz em C/C++

• Conhecido como variável composta homogênea multidimensional.

• É formada por uma sequência de variáveis, todas do mesmo tipo, que possuem o mesmo identificador (nome) e são alocadas sequencialmente na memória.

• Como as variáveis têm o mesmo nome, o que as distingue é um índice que referencia sua localização dentro da estrutura.

• Uma variável do tipo matriz precisa de um índice para cada uma de suas dimensões.

82

Page 83: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

8.2 – Declaração de matriz

• Onde:

– tipo_dos dados: é o tipo dos dados que serão armazenados na matriz.

– nome_variável: é o nome dado à variável do tipo matriz.

– [dimensão1]: representa o tamanho da 1ª dimensão.

– [dimensão2]: representa o tamanho da 2ª dimensão.

83

tipo_dos_dados nome_variável [dimensão1] [dimensão2] [...] [dimensãoN]

Page 84: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

8.3 – Exemplo de matriz

84

int mat [2] [3]

10 5 3

7 8 4

0 1 2

mat 0

1

Page 85: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

8.4 – Atribuindo valor à matriz

• Atribuir valor a uma matriz significa armazenar informação em seus elementos, identificados de forma única por meio de seus índices.

85

mat[0][2] = 3; Atribui o valor 3 na linha 0 coluna 2.

mat[1][0] = 7; Atribui o valor 7 na linha 1 coluna 0.

Page 86: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

8.5 – Preenchendo uma matriz

• Significa percorrer todos os seus elementos, atribuindo-lhes um valor.

86

int i, j, mat[2][3]; for (i=0; i < 2; i++) { for (j=0; j < 3; j++) { cout << "Digite um número: "; cin >> mat[i][j]; } }

Page 87: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

8.6 – Mostrando os elementos de uma matriz • Significa percorrer todos os seus elementos,

atribuindo-lhes um valor.

87

for (i=0; i < 2; i++) { for (j=0; j < 3; j++) { cout << mat[i][j]; } cout << endl; }

Page 88: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

8.7 – Exemplo

• Elaborar um algoritmo que leia uma matriz de 3 linhas e 4 colunas de números inteiros. No final, imprima todos os números.

88

Page 89: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

8.7 – Exemplo

89

int i, j, mat[3][4]; for (i=0; i < 3; i++) { for (j=0; j < 4; j++) { cout << "Digite um número: "; cin >> mat[i][j]; } } for (i=0; i < 3; i++) { for (j=0; j < 4; j++) { cout << mat[i][j]; } cout << endl; }

Page 90: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9 – Manipulando cadeias de caracteres - Strings

90

Page 91: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.1 - Strings

• A linguagem C não possui um tipo de dado similar à STRING de outras linguagens.

• Para armazenar uma cadeia de caracteres, utiliza vetores, nos quais cada posição representa um caractere.

91

Page 92: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.1 - Strings

• Compiladores da linguagem C/C++ identificam o fim de uma cadeia por meio do caractere nulo, ou seja, por meio de ‘\0’.

• Sendo assim, deve-se declarar sempre o vetor com uma posição a mais para armazenar o caractere nulo.

• Por exemplo, para armazenar a palavra CADEIA, deve-se declarar um vetor do tipo char com sete posições.

92

Page 93: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.1 - Strings

• Exemplos de variáveis do tipo cadeia de caracteres:

93

char nome[21]; A variável nome poderá armazenar até 20 caracteres.

char sexo[4]; A variável sexo poderá armazenar até 3 caracteres.

char curso; A variável curso poderá armazenar apenas um caractere.

Page 94: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.2 – Inicializando cadeia de caracteres

• Para declarar um vetor de caracteres podemos utilizar:

ou

ou

94

char nome[ ] = {‘U’, ‘N’, ‘I’, ‘F’, ‘E’, ‘I’, ‘\0’};

char nome[ ] = “UNIFEI”;

char nome[7] = “UNIFEI”;

Page 95: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3 – Funções para manipulação de strings • Para manipular as cadeias de caracteres,

devem-se utilizar funções específicas, e estas fazem parte da biblioteca string.h ou cstring.

• Para consultar funções dessa biblioteca acesse: http://www.cplusplus.com/reference/clibrary/cstring/.

95

Page 96: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.1 – Função strlen()

• Retorna o número de caracteres da cadeia.

96

#include <iostream > #include <string.h> using namespace std; main() { char nome[ ] = "UNIFEI"; int tamanho = strlen(nome); cout << tamanho; }

Page 97: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.1 – Função strlen()

• Exemplo:

97

#include <iostream > #include <string.h> using namespace std; main() { char nome[22] = "Logica de Programacao"; int tamanho = strlen(nome); for (int i =0; i < tamanho ; i++) { cout<<"Caracter n." << i+1 << ": " << nome[i] << endl; } }

Page 98: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.2 – Função strcat()

• Concatena duas strings (uma no final da outra).

• Recebe duas strings como argumento e copia a segunda string (origem) no final da primeira (destino), sendo que a segunda string permanece inalterada.

• Note que a string destino deverá ser grande o suficiente para armazenar a string resultante.

98

Page 99: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.2 – Função strcat()

• Exemplo:

99

#include <iostream > #include <string.h> using namespace std; main() { char nome[40] = "Rossana "; char sobrenome[] = "de Paula Junqueira"; cout << "Vetor nome: " << nome << endl; cout << "Vetor sobrenome: " << sobrenome << endl; cout << endl; strcat(nome, sobrenome); cout << "Nome completo: " << nome; }

Page 100: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.3 – Função gets()

• Para a leitura de uma string do teclado devemos usar a função gets, que está definida na biblioteca cstdio.

• Ela captura todos os caracteres digitados, inclusive os espaços em branco, até que seja pressionada a tecla Enter.

• No Windows você deverá usar a função fflush(stdin) antes de chamar a gets() para limpar o buffer de entrada.

100

Page 101: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.3 – Função gets()

• Exemplo:

101

#include <iostream > #include <string.h> #include <cstdio> using namespace std; main() { char nome[30]; cout << "Escreva seu nome completo: "; fflush(stdin); //Limpa o buffer de entrada do teclado gets(nome); cout << nome; }

Page 102: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.4 – Função strcmp()

• Realiza a comparação entre o conteúdo de duas strings.

• Recebe duas strings como argumento e retorna o valor 0 (zero) caso o conteúdo das duas strings sejam iguais ou um valor diferente de zero, caso conteúdos diferentes.

102

Page 103: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.4 – Função strcmp()

• Exemplo:

103

#include <iostream > #include <string.h> #include <cstdio> using namespace std; main() { char cor[] = "azul"; char resposta[10]; cout << "Qual e a cor do ceu? "; gets(resposta); cout << strcmp(cor, resposta); }

Page 104: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.5 – Função strcpy()

• Realiza a cópia do conteúdo de uma string para outra string, substituindo o conteúdo da string de destino.

• Recebe duas strings como argumento e copia a segunda string (origem) na primeira (destino).

• Note que a string destino deverá ser grande o suficiente para armazenar a string origem.

104

Page 105: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.5 – Função strcpy()

• Exemplo:

105

#include <iostream > #include <string.h> #include <cstdio> using namespace std; main() { char origem[] = "Rossana"; char destino[] = "Junqueira"; cout << "Origem: " << origem << endl; cout << "Destino: " << destino << endl; strcpy(destino, origem); cout << "Origem: " << origem << endl; cout << "Destino: "<< destino; }

Page 106: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.6 – Funções strupr() e strlwr()

• podemos utilizar as funções strlwr() ou strupr() para converter os caracteres da string em letras minúsculas ou maiúsculas respectivamente e compará-la com uma string padrão.

106

Page 107: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.6 – Funções strupr() e strlwr()

• Exemplo:

107

#include <iostream > #include <string.h> #include <cstdio> using namespace std; main() { char palavra[7] = "BrASiL"; cout << "String antes da conversao: " << palavra << endl; strupr(palavra); cout << "Maiuscula - strupr(): " << palavra; strlwr(palavra); cout << "Minuscula - strlwr(): " << palavra; }

Page 108: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.7 – Resumo das funções

• strlen()

– Retorna o número de caracteres da cadeia.

• strcat()

– Concatena duas strings.

108

char nome[] = “UNIFEI”; int tamanho = strlen(nome);

char nome[] = "Rossana "; char sobrenome[] = "de Paula Junqueira"; strcat(nome, sobrenome);

Page 109: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.7 – Resumo das funções

• gets()

– Faz a leitura de uma string do teclado.

• strcmp()

– Realiza a comparação entre o conteúdo de duas strings.

109

char nome[30]; cout << "Escreva seu nome completo: "; fflush(stdin); //Limpa o buffer de entrada do teclado gets(nome);

char cor[] = "azul"; char resposta[] = "azul"; cout << strcmp(cor, resposta);

Page 110: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.7 – Resumo das funções

• strcpy()

– Copia o conteúdo de uma string para outra.

• strupr()

– Converte os caracteres para maiúscula.

110

char origem[] = "Rossana"; char destino[] = "Junqueira"; strcpy(destino, origem);

char palavra[] = "BrASiL"; strupr(palavra);

Page 111: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

9.3.7 – Resumo das funções

• strlwr()

– Converte os caracteres para minúsculas.

111

char palavra[] = "BrASiL"; strlwr(palavra);

Page 112: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

Exercício

112

1) Faça um programa que receba uma frase, calcule e mostre a quantidade de vogais da frase digitada. O programa deverá contar vogais maiúsculas e minúsculas.

Dica: – Digitar uma frase. (usar a função gets para fazer a leitura)

– Pegar o tamanho da frase. (usar a função strlen, guardando o resultado em uma variável)

– Percorrer a frase.

– Comparar cada caractere com as vogais (maiúsculas e minúsculas).

– Quando encontrar uma vogal, acrescentar um na quantidade.

Page 113: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

Exercício

113

#include <iostream> #include <string.h> #include <cstdio> using namespace std; main() { char frase[200]; int tam,i,qtde; qtde = 0; cout << "Digite uma frase: "; gets(frase); tam = strlen(frase); for (i=0;i<tam;i++) { if (frase[i]=='a' or frase[i] =='A' or frase[i]=='e' or frase[i] =='E' or frase[i]=='i' or frase[i] =='I' or frase[i]=='o' or frase[i] =='O' or frase[i]=='u' or frase[i] =='U') qtde = qtde + 1; } cout << "Quantidade de vogais = " << qtde; }

Page 114: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10 – Registros

114

Page 115: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10.1 - Registros

• Até aqui, as variáveis utilizadas nos programas conseguem armazenar apenas um tipo de dado, definido no momento em que foram declaradas.

• Porém, é bastante comum a necessidade de armazenar, dentro de uma mesma variável, diferentes tipos de dados.

• Registros ou variáveis compostas heterogêneas, conseguem agregar vários dados de uma mesma entidade.

• Cada dados contido em um registro é chamado campo.

115

Page 116: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10.2 – Declaração de registros em C/C++ • São chamados de estruturas.

• São definidos por meio da utilização da palavra reservada struct.

• A partir da estrutura definida, o programa poderá considerar que existe um novo tipo de dado chamado nome_da_estrutura.

116

struct nome_da_estrutura { tipo campo1; tipo campo2; ... tipo campoN; };

Page 117: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10.2 – Declaração de registros em C/C++ • Exemplo 1:

• Para permitir que qualquer parte do seu programa entenda e utilize uma struct, sua definição deverá ser feita fora da função main, de preferência logo abaixo de todos os #include.

117

struct estrutura { int num; char titular[35]; float saldo; };

Page 118: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10.2 – Declaração de registros em C/C++ • Para que um programa utilize uma struct, é

necessária a declaração de variáveis desse tipo, da seguinte forma:

118

nome_da_estrutura nome_da variavel;

Page 119: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10.2 – Declaração de registros em C/C++ • Exemplo 2:

119

struct banco { int num; char titular[35]; float saldo; }; main() { banco conta; banco contas[10]; }

Page 120: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10.3 – Acesso a membros de um registro • É possível por meio do acesso individual a

seus membros, quer seja para gravar quer seja para recuperar um dado.

• O acesso a determinado membro da estrutura é feio informando-se o nome da variável, seguido por um ponto e pelo nome do campo desejado.

120

nome_da_variável_do_tipo_estrutura.nome_do_campo

Page 121: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10.3 – Acesso a membros de um registro • Exemplo 3:

121

struct banco { int num; char titular[35]; float saldo; }; main() { banco conta; cout << "Numero: "; cin >> conta.num; cout << "Titular: "; cin >> conta.titular; cout << "Saldo: "; cin >> conta.saldo; }

Page 122: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10.3 – Acesso a membros de um registro • Exemplo 4:

122

main() { banco contas[10]; int i; for (i=0; i<10; i++) { cout << "Numero: "; cin >> contas[i].num; cout << "Titular: "; cin >> contas[i].titular; cout << "Saldo: "; cin >> contas[i].saldo; } }

Page 123: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

10.4 – Exemplo 5

123

• Elabore um algoritmo que leia os dados de quatro pessoas (código, nome, sexo, idade e altura), sendo que a primeira seja um funcionário e as três últimas sejam associadas. No final, imprima o funcionário e as associadas, ou seja, os associados do sexo feminino.

Page 124: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

124

struct dados { int codigo, idade; char nome[35]; char sexo; float altura; }; main() { dados funcionario, associado[3]; int i; cout << "Informacao do funcionario" << endl; cout << "Codigo: "; cin >> funcionario.codigo; cout << "Nome: "; cin >> funcionario.nome; cout << "Sexo: "; cin >> funcionario.sexo; cout << "Idade: "; cin >> funcionario.idade; cout << "Altura: "; cin >> funcionario.altura; cout << endl;

Page 125: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

125

cout << "Informacoes dos associados:" << endl; for (i=0; i<3; i++) { cout << "Codigo: "; cin >> associado[i].codigo; cout << "Nome: "; cin >> associado[i].nome; cout << "Sexo: "; cin >> associado[i].sexo; cout << "Idade: "; cin >> associado[i].idade; cout << "Altura: "; cin >> associado[i].altura; } cout << endl; cout << "Dados do funcionario: " << endl; cout << "Codigo: " << funcionario.codigo << endl; cout << "Nome: " << funcionario.nome << endl; cout << "Sexo: " << funcionario.sexo << endl; cout << "Idade: " << funcionario.idade << endl; cout << "Altura: " << funcionario.altura << endl; cout << endl;

Page 126: Lógica de Programação ECOi02€¦ · •Etapas para desenvolvimento de um programa: –Análise: estuda-se o enunciado do problema para definir os dados de entrada, o processamento

126

cout << "Dados das associadas: " << endl; for (i=0; i<3; i++) { if (associado[i].sexo == 'F' or associado[i].sexo == 'f') { cout << "Codigo: " << associado[i].codigo << endl; cout << "Nome: " << associado[i].nome << endl; cout << "Sexo: " << associado[i].sexo << endl; cout << "Idade: " << associado[i].idade << endl; cout << "Altura: " << associado[i].altura; } } }