Buscar

Resumo Algoritmo - Anotações de Aula

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ALGORITMOS (CCT0239/1766160) 9021 
 
Aula 1: Formas de Representação e Etapas para Construção 
 
Algoritmo 
Para a Matemática: A palavra algoritmo na Matemática designa um procedimento geral de cálculo que se 
desenvolve, por assim dizer, automaticamente, poupando-nos esforço mental durante o seu curso. 
Para a Programação: Podemos conceituar algoritmo como sendo uma sequência de passos finitos que 
devem ser escritos de forma precisa e clara, evitando qualquer tipo de dúvida na interpretação e que tem, 
como objetivo, solucionar um problema computacional. 
 
Construindo algoritmos computacionais 
Para se construir um algoritmo, temos que fazer uso de alguma linguagem. Normalmente, a linguagem 
natural é a mais escolhida, mas a linguagem gráfica também é usada. 
A dificuldade de comunicação tanto na linguagem natural como na linguagem gráfica, quando se trata de 
um algoritmo computacional, pode implicar em problemas de tal ordem que não conseguiremos atingir o 
objetivo. 
 
Processamento de dados: É a transformação de dados em outros que sejam mais significativos para uma 
determinada finalidade. 
 
Data - Dados: São valores que representam algum atributo (exemplo: peso, idade, nome, etc.) de uma 
entidade (pessoa, animal, objeto, etc). 
 
Informação: É um conjunto de dados significativos. Em outras palavras: dados são elementos que servem 
de ponto-de-partida para um processamento e informação é o resultado desse processamento. 
 
Exemplo: Joana teve três faltas em fevereiro, seis em março, zero em abril, três em maio e zero em 
junho. Podemos dizer que estas faltas são dados. O somatório delas é doze e é uma informação, pois é o 
resultado de um processamento. 
 
Formalizando conceitos 
Para entender e construir Algoritmos, é importante compreender e formalizar alguns conceitos, tais como: 
Lógica, Lógica de Programação e Conceito de Programa. 
 
Lógica: É o ramo da filosofia que cuida das regras do bem pensar, ou do pensar correto, sendo, portanto, 
um instrumento do pensar. 
 
Lógica de Programação: É a técnica de desenvolver algoritmos (sequências lógicas) para atingir 
determinados objetivos dentro de certas regras baseadas na Lógica Matemática e que, depois, são 
adaptados para a Linguagem de Programação utilizada pelo programador para construir seu software. 
 
Conceito de Programar: Um programa é um algoritmo codificado em uma linguagem de programação, isto 
é, um conjunto de instruções/funções que representam tarefas que serão interpretadas e executadas por 
um computador. 
 
Resolvendo um problema - GEORGE PÓLYA: 
Entender – Planejar – Executar - Verificar 
 
Aula 2: Conhecendo a Linguagem e Construindo Algoritmos 
 
Entrada: Representa os dispositivos que captam os dados que serão armazenados na memória principal. 
Processamento: Representa as operações que são realizadas com os dados para obtermos o resultado 
desejado. 
Saída: Representa os dispositivos que recebem os resultados. 
 
 
Linguagem natural: O início do algoritmo começa com a primeira ordem e termina com a última ordem. 
Você poderá, ou não, numerar os passos. 
 
Fluxograma: A sequência de passos deverá estar compreendida entre os símbolos de início e de fim. 
 
Linguagem UAL: Todos os comandos serão colocados após o comando prog e antes do comando fimprog. 
 
Os caracteres de controle \n (pula linha) e \t (da espaço) são usados com o comando imprima para que o 
programador tenha poder de decidir onde o dado será impresso. Eles podem ser colocados no início ou no 
final da cadeia. 
 
Estrutura sequencial: 
É um tipo de estrutura onde os comandos são executados numa sequência pré-estabelecida, isto é, cada 
comando só é executado quando o anterior é finalizado. 
 
Operadores Aritméticos: 
Os operadores aritméticos são representados por símbolos, ou para palavras. Com eles, podemos 
construir algoritmos que executam operações. 
+ = Soma; 
- = Subtração; 
* = Multiplicação; 
/ = Divisão real; 
div = Divisão inteira; 
% = Resto da divisão inteira; 
** = Potencialização. 
 
Dicas: 
Precisamos tomar cuidado quando formos adaptar expressões matemáticas para que possam ser 
executadas pelo interpretador ou compilador, porque alguns elementos matemáticos não estão presentes 
nas linguagens. 
{, [ e ( serão todos parênteses: ( ( (. 
Frações com numeradores ou denominadores com mais de um elemento precisam fazer uso de 
parênteses. 
Operadores sempre estarão presentes, isto é: 2( a + b) não será permitido. Use: 2*( a + b) 
Atenção para a hierarquia das operações matemáticas. 
 
Em algumas linguagens de programação, o operador de divisão trabalha da seguinte maneira: se o 
dividendo e o divisor forem inteiros, o quociente será inteiro. 
Então, se você desejar uma divisão real, um dos operandos deverá se tornar real acrescentando .0 (ponto 
e zero) se os dois forem constantes. 
 
Atividades: 
1) Por definição, uma pseudolinguagem não tem um ambiente para ser testada. Verdadeiro ou falso? 
R: Verdadeiro. 
2) Qual a diferença entre sintaxe e semântica de um comando? 
R: Sintaxe é como se escreve o comando e semântica é a definição de cada comando. 
3) Cite algumas linguagens algorítmicas. 
R: UAL, Portugol, WEBPortugol, ILA, Portugol++, VisualG... 
OBS: C++ linguagem de progromação gera programa, Linguagem algoritima só testa o programa. 
4) Cite uma linguagem gráfica usada para construir algoritmos. 
R: Fluxograma. 
 
Aula 3: Comando de Entrada de Dados: da Passividade à Interatividade 
 
Comando de entrada de dados 
Com certeza, ao fazer um pagamento com o cartão de crédito ou ao sacar dinheiro, pagar uma conta, 
fazer uma transferência bancária de valores, em um caixa de um Banco 24 Horas, lhe foi solicitado digitar 
a sua senha. Esse comando que ”libera” o teclado para que possamos digitar um valor, senha ou data de 
pagamento, nada mais é do que o comando de entrada de dados que possibilita uma interação do usuário 
com um programa. 
Comandos de início e fim UAL: 
prog <nomeDoPrograma> 
... 
fimprog 
 
Conandos de início e fim C++: 
#include <iostream> 
using namespace std; 
int main() 
{ 
... 
} 
 
Tipos de dados: 
Tipo Descrição UAL C++ 
Inteiro Números inteiros int int 
Real Números fracionários ou de ponto flutuante real float 
Caractere Composto por um ou mais caractere ou 
também conhecido como alfanumérico 
string char (apenas um 
(caractere) 
Logico Tipo lógico que pode assumir os valores 
Verdadeiro ou Falso 
logico bool 
 
Declarando uma variável: 
Nome de uma pessoa: string nome 
Salário de uma pessoa: real salario 
Idade de uma pessoa: int idade 
Indicar se o cadastro está ativo: logico ativo 
 
Aula 4: Comando SE: É Hora de Decidir! 
 
Na aula de hoje, iremos aprender o comando se ... entao ... senao. 
 
 
 
Obs.: !(não) tem maior hierarquia, seguido do &&(e) e, depois, ||(ou). 
 
Aula 5: A Escolha é Sua 
 
Todos os comandos podem ficar na primeira linha porque o importante são os ; e as {}. Pressionar a 
tecla ‘enter’ ao final do comando só dá maior legibilidade ao algoritmo. Os comandos não são finalizados 
com ‘enter’ como acontece com algumas linguagens mais antigas. 
 
ESTRUTURA escolha/ caso 
A estrutura de múltiplos testes denominada escolha / caso é uma alternativa para ses encadeados. 
Embora o conceito seja o mesmo, ela apresenta diferenças em várias linguagens. 
 
Para que possamos substituir se ... entao ... senao se ... pela estrutura do escolha, é necessário que as 
três exigências listadas abaixo sejam atendidas na linha que escolhemos: 
A variável tem que ser a mesma em todos os testes. A variável tem que ser do tipo enumerável: inteira 
ou de um caracter. O operador relacional tem que ser o de igualdade. 
Assim, faz-se necessário entender que, embora seja mais simples, nem sempre poderemos substituir os 
ses encadeados e, às vezes, poderemos substituí-losem uma linguagem, mas em outra não. 
 
UAL (não disponível na versão) 
 
escolha (<variavel>) 
{ 
caso <valor1>: <comandos> 
pare; 
caso <valor2>: <comandos> 
pare; 
caso <valor3>: <comandos> 
pare; 
caso <valor_n>: <comandos> 
pare; 
senao: <comandos> 
} 
 
 
 
 
 
Revisão Aula - 1 a 5 
 
Linguagem Natural - Necessário clareza, Ambiguidade léxica. 
Linguagem Gráfica – Fluxograma. 
Pseudolinguagem e Linguagem Algorítmica – UAL 
 
Formas possíveis e mais adequadas de se representar um algoritmo: Linguagem gráfica e 
pseudolinguagem 
 
Semântica: definição do comando. 
Sintaxe: como se escreve um comando 
 
A variável pode ser definida como sendo um endereço, ou mais de um endereço, na memória principal, 
que armazena dados/ informações e cujo valor poderá ser alterado durante a execução do programa. A 
esse endereço será associado a um nome. 
Regras para se nomear variáveis: Muitas linguagens aceitam underline (_) além dos algarismos e letras 
não acentuadas. Atenção para palavras reservadas. Mas para facilitar, nesse primeiro momento, e atender 
às três linguagens algorítmicas, vamos adotar aqui as seguintes regras: 
1o caracter -> letra. A partir do segundo, letra ou algarismo. 
 
Algoritmo 
Para a Matemática: A palavra algoritmo na Matemática designa um procedimento geral de cálculo que se 
desenvolve, por assim dizer, automaticamente, poupando-nos esforço mental durante o seu curso. 
Para a Programação: Podemos conceituar algoritmo como sendo uma sequência de passos finitos que 
devem ser escritos de forma precisa e clara, evitando qualquer tipo de dúvida na interpretação e que tem, 
como objetivo, solucionar um problema computacional. 
 
Conceito de Programar: Um programa é um algoritmo codificado em uma linguagem de programação, isto 
é, um conjunto de instruções/funções que representam tarefas que serão interpretadas e executadas por 
um computador. 
 
  
 
Aula 6: Os Códigos vão ficar Menores: Chegaram as Estruturas de Repetição 
 
Estruturas de repetição 
Estruturas de repetição são também conhecidas como estruturas de iteração ou laços, elas permitem que 
uma sequência de comandos seja executada repetidamente, até que determinada condição ou situação 
seja atendida. 
 
Três Estruturas de Repetição 
Estrutura do para: Estrutura ideal quando o número de repetições for conhecido durante a elaboração do 
algoritmo ou quando o usuário puder fornecê-lo durante a execução. Na linguagem C++, essa estrutura 
recebe o nome de for e, diferentemente de outras linguagens, simula com facilidade as estruturas do 
enquanto e do faca... enquanto como veremos mais adiante. 
 
Estrutura do enquanto: Estrutura que testa no início e é usada quando o número de repetições for 
desconhecido. Simula, com facilidade a estrutura do faca ... enquanto e a estrutura do para (desde que 
criemos uma variável que terá seu valor incrementado/decrementado dentro da estrutura de repetição). 
Na linguagem C++, essa estrutura recebe o nome de while. Sua lógica é: repete enquanto a condição for 
verdadeira. Como ela testa antes de executar o bloco, pode ser que ela nem execute o bloco se a 
condição de início for falsa. 
 
Estrutura do faca... enquanto: Estrutura usada quando o número de repetições for desconhecido. Sua 
diferença em relação à estrutura do enquanto é que ela testa ao final, significando que executa o bloco de 
comandos pelo menos uma vez. Essa estrutura também precisa de um teste para interromper a repetição. 
Muito usada em algoritmos com menus. Na linguagem C++, essa estrutura recebe o nome de 
do...while. A estrutura da repetição é mais parecida com a estrutura do para, não precisando de 
leitura/atribuição antes. 
 
 
 
 
Acumulador 
1) O que é? Uma variável 
2) Como se cria? Declarando a variável 
3) Quais as regras para que tudo funcione perfeitamente? 
 Declare a variável, cujo tipo tem quem ser compatível com o valor que irá receber. 
Inicialize com o elemento neutro da operação, na maioria das vezes (0 (soma ou subtração) ou 1 
(multiplicação ou divisão)); 
Dentro da estrutura de repetição, coloque a expressão do acumulador 
Depois da estrutura de repetição, exiba, teste, etc. 
 
Aula 7: Conhecendo a Linguagem 
 
Bibliotecas são arquivos que normalmente são instalados junto com o compilador e que possuem os 
comandos e funções pertencentes à linguagem. 
Este arquivo header chamado iostream contém diversas definições das bibliotecas do C++. Ele declara ao 
compilador o nome das funções e algumas informações adicionais necessárias para que as instruções 
sejam executadas corretamente. 
Variáveis são espaços de memória em que são armazenados valores utilizados durante a execução de 
programas. 
 
As linguagens de programação dividem-se em: 
Linguagem de alto nível (aquelas que estão próximas da linguagem humana, como por exemplo, Fortran 
e Basic); 
Linguagem de baixo nível (aquelas mais próximas da linguagem de máquina, por exemplo, o Assembly); 
Linguagens de nível intermediário, como o C e o C++, pois utilizam uma sintaxe de nível alto, mas 
possibilitam ao programador facilidades para se trabalhar em nível baixo, como manipulação de bits, 
bytes e endereços de memória de maneira direta. 
 
Estrutura básica de um programa em C++ 
#include <iostream> 
using namespace std; 
int main() 
{ 
 // ... Sequência de Comandos 
 system (“pause”); 
 return 0; 
} 
As duas primeiras linhas são o cabeçalho do programa, que define quais bibliotecas ele utilizará. 
A segunda linha do cabeçalho, using namespace std;, é um aviso ao compilador que estamos utilizando os 
comandos e funções padrão de C++. 
Tudo o que acontece durante a execução do programa está contido dentro de uma função principal, 
chamada main. Todos os programas em C++ possuem uma única função main, onde é iniciada a 
execução do programa. Declaramos a função main com: int main ( ). 
Todos os comandos executados pelo programa estão contidos entre as chaves “{ }”, que indicam o início 
e o fim do programa. 
A linha system(“PAUSE ”); é um recurso do C++ para pausar a execução do programa até que o usuário 
aperte uma tecla qualquer. Utilizaremos este recurso para que a tela do programa não seja terminada 
automaticamente pelo sistema, impedindo que vejamos os resultados do programa. 
Finalmente, o comando return 0; é a indicação da função main para o sistema operacional que executou 
o programa. Quando o programa é executado até o fim, ele retorna 0 ao sistema operacional, indicando 
que ele foi executado e terminado corretamente. 
 
 
 
Quando um programa é escrito em qualquer linguagem de programação, é necessária a declaração de 
algumas variáveis. Assim podemos dizer que, quando um programa é executado, uma variável é 
associada com: Um tipo: que diz quantos bytes de memória a variável ocupa. Um nome: que é um 
identificador associado ao endereço deste espaço de memória. 
 
Em C++ , nomes de variáveis devem ser declarados antes de serem usados. Caso contrário, ocorrerá um 
erro de compilação. Devem ser dados valores às variáveis antes que estas sejam utilizadas. Se você 
tentar utilizar uma variável antes de especificar seu valor, você obterá “lixo” (o que quer que esteja 
armazenado no endereço da variável na memória quando o programa começa sua execução), culminando 
com falha na execução do programa. 
 
Tipos Primitivos: A linguagem C++ já estabelece alguns tipos de dados para atribuirmos às variáveis. São 
eles: 
char (caracter) - Utilizado para armazenar um caracter; 
int (inteiro) - Utilizado para armazenar números inteiros; 
float (ponto flutuante) - Utilizado para armazenar números fracionários reais; 
double (ponto flutuante de precisão dupla) – Utilizado para armazenar números de ponto flutuante como 
em float; porém utiliza-se double quando o número a ser armazenado tiver a precisão muito grande; 
bool (lógico) - Representa um tipo de dadoslógico, e aceita apenas 2 valores: verdadeiro ou falso. 
 
Outro tipo de valor suportado pela linguagem C++ é o tipo string. Uma string é um conjunto de 
caracteres entre aspas. Por exemplo, “você é um programador” é uma string, composta pelas várias 
letras que formam a frase. Não confunda string com caracter. Um caracter simples fica entre dois 
apóstrofos, como por exemplo ‘a’. Entretanto, “a” é uma string que contém somente uma letra. 
 
 
 
O conceito de constantes em linguagens de programação é atribuir certo valor constante a um nome, e 
quando este nome for referenciado dentro do código do programa, será utilizado nas operações o valor 
atribuído a este nome. Ou seja, se for definida a constante PI com o valor “3.1415926536”, quando for 
encontrado no código o nome PI, será utilizado em seu lugar o valor “3.1415926536”. 
Em C++, utilizamos o prefixo const associado a um tipo, um nome e um valor para definir uma constante. 
Assim: 
const <tipo> <nome> = <valor>; 
Por exemplo: 
const int ELEMENTOS = 256; 
 
Outra forma de se declarar uma constante em programas em C++ é utilizando a diretiva de compilação: 
Note que neste caso não há o ponto-e-vírgula terminando o comando. 
#define <nome> <valor> 
Por exemplo: 
#define ELEMENTOS 256 
 
Entrada e saída no C++ 
Se quisermos que um programa C++ mostre alguns resultados, ou se quisermos que o programa solicite 
ao usuário que entre com alguma informação, podemos usar os elementos cout e cin. Entretanto, para 
usar estes elementos, é necessário incluir a seguinte linha no início do seu código fonte: #include 
<iostream>. 
O comando cout pode ser utilizado para imprimir mensagens e valores em uma variedade de formatos. 
Por enquanto, cout é melhor descrito através de exemplos: 
cout << "Oi, mundo!" << endl; 
Esta linha de comando imprimirá "Oi, mundo!" na tela do computador. O valor endl representa a mudança 
de linha. 
 
Comentarios 
// comentário de uma linha 
/* comentário com mais de uma linha */ 
 
>> Operador de Extração << Operador de Inserção 
 
O que são estruturas de controle de fluxo? 
Estruturas de controle de fluxo são comandos utilizados em uma linguagem de programação para 
determinar qual ordem e quais comandos devem ser executados pelo programa em uma dada condição. 
Geralmente, as estruturas de controle utilizam expressões condicionais. Caso a expressão retorne 0, 
dizemos que ela é falsa. Caso ela retorne qualquer outro valor, dizemos que ela é verdadeira. 
 
A declaração - if 
Utiliza-se a declaração if quando desejamos que o programa teste uma ou mais condições e execute um 
ou outro comando de acordo com o resultado deste teste. 
 
Encadeamento if – else if 
Utiliza-se a variação "if – else if" quando desejamos que o programa teste várias condições em sequência, 
até encontrar uma que seja verdadeira. Sua sintaxe é muito parecida com a declaração if simples. 
 
A declaração switch 
A declaração switch é uma maneira fácil e elegante de se fazer uma tomada de decisão com múltiplas 
escolhas. Na declaração switch, a variável é sucessivamente testada contra uma lista de inteiros ou 
constantes caracteres. Quando uma associação é encontrada, o conjunto de comandos associado com a 
constante é executado. 
 
A declaração for 
Utiliza-se a declaração for para realizar tarefas repetitivas dentro de um programa. 
 
A declaração while 
Outra forma de laço é a declaração while. Seu funcionamento é muito parecido com a declaração for. Ao 
encontrar um laço while, o programa testa a condição especificada. Se a condição for verdadeira, efetuará 
os comandos contidos no laço. Quando a condição se torna falsa, o laço termina e o programa passa para 
o próximo comando. 
 
A declaração do ... while 
A declaração do while é muito parecida com a declaração while, com uma única diferença fundamental: o 
teste condicional é feito após a execução dos comandos pertencentes ao laço. 
 
 
 
Aula 8: para, enquanto ou faca...enquanto? Você precisa saber decidir 
 
A aula de hoje merece uma atenção especial visto que estamos aprofundando nosso estudo sobre as 
estruturas de repetição que podem ser controladas: Pelo valor da entrada de dados. Pelo resultado de 
uma operação. Por uma variável contadora também. 
Essas estruturas são estruturas parecidas em sua concepção e poderíamos programar sem a estrutura do 
faca..enquanto, mas, quando entramos em contato com ela, percebemos que algumas soluções seriam 
maiores se usássemos a estrutura do enquanto para simulá-la. 
 
ESTRUTURA ENQUANTO (WHILE) 
Estrutura usada quando o número de repetições for desconhecido. Controla a repetição com um teste 
(condição) no início. Ideal para trechos de proteção na entrada de dados. O usuário decide quando 
interrompe a repetição. 
 
Dentro da repetição, só tem um comando de leitura (ou atribuição). O comando de leitura (ou atribuição) 
que aparece antes da estrutura do enquanto possibilita a entrada do primeiro valor que, se não passar 
pelo teste, o bloco não será executado. 
 
Agora vamos acompanhar com teste de mesa, supondo que você digitará 8 e –3. Os símbolos foram 
numerados para uma melhor explicação. 
 
 
A discussão sobre qual das três é a melhor é bem antiga, tendo em vista que alguns programadores se 
identificam mais com uma delas. É preciso ser o mais imparcial possível e decidir por aquela que naquele 
exercício é a mais simples de ser usada sem ter que simular uma das outras duas. As linguagens de 
programação mais antigas apresentavam uma estrutura do para (for) muita limitada e isso não era 
possível, mas quando a linguagem C surgiu, tudo ficou diferente, visto que a estrutura do 
para apresentou uma sintaxe com mais recursos. Como a Linguagem C++ herdou muito da linguagem C, 
isso é possível. 
 
Exemplo1: Por que usar abs() e o que faz essa função? A função abs() retorna o número sem sinal. 
Lembre-se de que o usuário poderia querer saber quantos algarismos tem o número –234567. Se não 
usássemos abs(), o teste seria mais longo. 
Se desejamos usar números de quatro algarismos, por que o teste é ao contrário? A estrutura do while 
usada para validar a entrada de dados tem exatamente essa função: fazer com que “caia na malha fina” 
os números não desejados, obrigando o usuário a fazer uma nova digitação. 
 
Exemplo2: Por que usar toupper() e o que faz essa função? A função toupper() retorna a letra convertida 
para maiúscula. Se não fosse usada, o teste teria que ser: 
while(resp !='S' && resp != 'N' && resp !='s' && resp != 'n'). 
Se a mensagem solicitar que se digite S ou N, por que aceitar s minúsculo? Lembre-se sempre: nem todo 
usuário lê a mensagem. Deverá ser sua a preocupação de proteger a entrada de dados e, como foi 
convertida para letra maiúscula a resposta do usuário (resp=toupper(resp);), na verdade é como se ele 
tivesse digtado S maiúsculo. 
 
Como já fizemos muitos exercícios com a estrutura do enquanto e como já dissemos que a única 
diferença da estrutura do faca...enquanto para a estrutura do enquanto está na localização do teste e 
que, na maioria das vezes, é mais seguro usar a estrutura do enquanto, iremos somente apresentar a 
estrutura do faca...enquanto simulando a estrutura do para e um filme para ensiná-lo como construir um 
algoritmo que funciona baseado em um menu. 
 
ESTRUTURA FACA ENQUANTO (DO WHILE) 
Estrutura usada quando o número de repetições for desconhecido. Controla a repetição com um teste 
(condição) ao final. Ideal para programas que funcionam através de um menu. O usuário decide quando 
interrompe a repetição. 
 
A estrutura do faca...enquanto simulando a estrutura do para 
Embora a estrutura do para seja a mais indicada quando o número de repetições for conhecido, nada 
impede que usemos a estrutura do faca...enquanto combinada com um contador para simular a estrutura 
do para. 
 
 
 
Aula 9: Descobrindo a Importância das Estruturas Homogêneasna Programação 
 
Conjuntos: 
Conceituamos conjunto como um agrupamento ou coleção de elementos, ou membros, do mesmo tipo e 
é, geralmente, indicado por uma letra maiúscula. Os elementos de um conjunto podem ser pessoas, 
números, letras, etc. 
1- Um conjunto pode ser descrito através da enumeração dos seus elementos entre chaves. 
Observe o conjunto dos meses que começam pela letra a: { abril, agosto} 
2- Um conjunto pode ser descrito, também, por uma propriedade. 
Observe um conjunto formado pelos números pares representado pela sentença: 
A = [x | x £ Z, ^ x é par] 
 
Um conjunto sempre tem um nome, um delimitador (chaves ou diagrama de Euler-Venn) e algumas 
operações para manipular os elementos quando eles são números inteiros. 
 
Matrizes: 
Toda matriz tem uma letra maiúscula como nome e, de forma subscrita, sua dimensão, isto é, o número 
de linhas e de colunas separadas pela letra x minúscula. Os elementos de uma matriz se apresentam 
entre um par de colchetes ou de parênteses. Cada elemento é representado pela letra minúscula 
correspondente ao nome da matriz e, de forma subscrita, sua posição linha/coluna, separadas por vírgula. 
Sendo assim, poderíamos dizer que: A numeração das linhas varia de 1 até m crescendo de 1 em 1. A 
numeração das colunas varia de 1 até n crescendo de 1 em 1. 
Há, também, os conceitos de matriz transposta, matriz identidade, diagonal principal, secundária, as 
operações realizadas com matrizes, entre outros. 
 
 
 
Em Programação, as duas matrizes serão declaradas da mesma forma e, somente na apresentação delas 
no display, é que faremos diferença usando os caracteres de controle \n e \t para distinguir a matriz 
coluna da matriz linha. 
 
A estrutura homogênea: é formada por elementos do mesmo tipo e, muitas vezes, precisaremos declarar 
várias estruturas homogêneas para atender às necessidades do programa. 
As estruturas de dados homogêneas permitem agrupar diversas informações dentro de uma mesma 
variável. Este agrupamento ocorrerá obedecendo sempre ao mesmo tipo de dado, e por esta razão que 
estas estruturas são chamadas homogêneas. 
 
A estrutura heterogênea: pode ser formada por elementos de tipos diferentes. O uso desse tipo de 
estrutura irá simplificar os programas e, muito em breve, você ouvirá falar em struct. 
 
Costumamos dizer que as matrizes são tabelas criadas na memória principal (MP) que podem ter uma 
dimensão ou mais. Quando uma matriz tem somente uma dimensão, chamamos de vetor, como na 
Matemática, ou array ou matriz unidimensional. Podemos dizer que uma matriz é um conjunto de 
variáveis, todas com o mesmo nome e só diferenciadas pela posição que ocupam nesse conjunto. Na 
linguagem C++, assim como em outras linguagens, essa dimensão que localiza a posição de uma variável 
vem entre um par de colchetes. 
 
Declaração de um vetor 
 
 
 
Algumas dúvidas são comuns na linguagem C++. 
 
Como a linguagem saberá se é para armazenar o sexo de 30 pessoas ou se a palavra que determina o 
sexo tem, no máximo, 30 caracteres? 
R: Não sabe. Esta informação terá que ser determinada quando se fizer os trechos de armazenamento. 
 
Não existe um tipo string para declarar uma variável que armazena mais de um caracter? 
R: Não. Na linguagem C++, o que seria o tipo String é, na verdade, um vetor de char. 
 
Constante string 
Uma constante string é um conjunto de caracteres do código ASCII, colocados entre aspas duplas. Na 
linguagem C++, uma string é um vetor de caracteres terminado com um caracter nulo cujo valor inteiro é 
igual a zero (código ASCII igual a 0). O terminador nulo também pode ser escrito usando a convenção de 
barra invertida do C++ como sendo '\0'. char nomeDaString[tamanho]; 
 
O endereço guardado é o do primeiro caracter ou o do primeiro byte da primeira variável se for uma 
matriz numérica. 
Veja a fórmula para qualquer tipo: endereço-base + deslocamento * tamanho do tipo 
Suponha que o endereço da letra J é 60000. Para chegarmos à letra A, usando a fórmula, teremos o 
seguinte endereço: 60000 + 2 * 1(tamanho do tipo char) = 60002 
Suponha que o endereço do primeiro byte da primeira variável é 60000. Para chegarmos à terceira 
variável, usando a fórmula, teremos o seguinte endereço: 60000 + 2 * 4(tamanho do tipo int) = 60008 
 
Armazenamento de dados em um vetor 
O armazenamento de um valor em uma variável do vetor poderá ser feito através de um comando de 
leitura ou de atribuição. 
LEITURA: Quando tivermos que ler valores para um vetor, precisaremos de uma estrutura de repetição 
para que possamos “varrer” todo o vetor sem ter que escrever comandos praticamente idênticos um após 
o outro. 
 
Dessa maneira funcionaria, mas se tivéssemos que entrar com 10000 números, para que serviriam as 
estruturas de repetição? 
Porém, nem sempre elas poderão ser usadas, porque nem tudo é igual, mas é possível resolver esse 
problema. 
 
 
 
ATRIBUIÇÃO: 
 
 
Não se esqueça de que na linguagem UAL as chaves da estrutura do para são obrigatórias. 
Na linguagem C++, qualquer estrutura de repetição só exige as chaves se o bloco tiver mais de um 
comando. Logo, as chaves são facultativas. 
 
Saída 
 
Um trecho de saída deverá começar com um título e em uma nova tela. 
Não incluí, no formato básico, a limpeza de tela, mas o farei no exemplo, pois é sempre bom visualizar a 
saída sem o diálogo da entrada. 
É no trecho de saída que se pode decidir se a aparência será de uma matriz linha ou de uma matriz 
coluna. 
 
 
Aula 10: Matrizes Bidimensionais: Agrupando para Simplificar 
 
Podemos entender uma matriz bidimensional como sendo um vetor de vetores uma vez que cada 
elemento é um vetor. 
 
Declaração de uma matriz bidimensional 
Quando dimensionamos uma matriz unidimensional (vetor), colocamos ao lado do nome do vetor 
somente um par de colchetes. 
 
 
 
Na aula 9, falamos que um dos caracteres que reservamos para um vetor de char é usado pela linguagem 
C++ para sinalizar o fim do vetor (\0) Terminador nulo. Por essa razão, usamos 31 no número de colunas 
do último exemplo. 
 
Matriz de char 
É uma matriz bidimensional que possibilita o armazenamento de vetores de char. Toda matriz para 
armazenar vetores de char na linguagem C++ é bidimensional, pois o primeiro índice indica a quantidade 
de elementos e o segundo, o número de caracteres –1 que serão armazenados em cada elemento. Além 
disso, a matriz de char tem um tratamento diferenciado e, embora seja declarada como bidimensional, 
será tratada como unidimensional exceto quando precisarmos manipular um caracter. A matriz 
bidimensional do tipo char será manipulada como se fosse unidimensional. 
SINTAXE: char nomeDaMatrizDeChar[númeroDeLinhas] [númeroDeCaracteresDeCadaLinha]; 
EX: Armazenar a profissão de 2000 pessoas: 
char profissao[2000][21]; 
Como são duas mil pessoas, optamos em dimensionar o número de linhas de acordo com o número de 
pessoas e, como acreditamos que um nome de profissão não tem mais do que 20 caracteres, 
determinamos 21. 
 
O armazenamento de uma matriz bidimensional na Memória Principal é feito de forma contígua, isto é, 
como se fosse uma matriz linha onde os elementos são alocados um após o outro. 
 
O deslocamento entre linhas é feito usando a seguinte expressão 
Endereço base + número de colunas da matriz * deslocamento linha * número de bytes para o tipo inteiro 
Ex: a) para chegar à segunda linha(1): 
 60000 + 2 * 1 * 4= 60008 
 b) para chegar à terceira linha (2): 
 60000 + 2 * 2 * 4= 60016 
 
O deslocamento entre as colunas da linha é feito usando a seguinte expressão: 
Endereço base calculado pela fórmula anterior + deslocamento coluna * número de bytes para o tipo 
inteiro 
Ex: a) para chegar à segunda linha(1)/ segunda coluna(1): 
 60008 + 1 * 4 = 60012 
 b) para chegar àterceira linha (2)/ segunda coluna(1): 
 60016 + 1 * 4 = 60020 
 
Armazenamento de dados em uma matriz bidimensional 
O armazenamento de um valor em uma variável da matriz bidimensional poderá ser feito através de um 
comando de leitura ou de atribuição. 
Comando de Leitura: Quando tivermos que ler valores para uma matriz bidimensional, precisaremos de 
duas estruturas de repetição. Uma para “varrer” todas as linhas da matriz e outra para “varrer” todas as 
colunas. Em outras palavras, para cada dimensão da matriz será necessária uma estrutura de repetição. 
Comando de Atribuição: Na linguagem C++, podemos também inicializar as matrizes bidimensionais 
através de atribuições no momento da declaração. 
Ex: char nomes[4][30]={"JOÃO", "MARIA", "PEDRO","FILIPE"}; 
 int mat[][3]={9,10,10,7,8,9,9,9,10,6,7,8}; 
 //nessa declaração/atribuição, assume-se que a matriz tem quatro linhas 
 
Saída 
Um trecho de saída deverá começar com um título e em uma nova tela. Não incluÍ no formato básico a 
limpeza de tela, mas será feito no exemplo, pois é sempre bom visualizar a saída sem o diálogo da 
entrada. 
 
 
Revisão - Aula 6 a 10

Outros materiais