Baixe o app para aproveitar ainda mais
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
Compartilhar