Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos – Prof. Anita Lopes 2 FUNDAMENTOS DA LINGUAGEM C++ 1 A linguagem C++ 1.1 Introdução A linguagem C++ é uma linguagem de alto nível e herda muitos conceitos da linguagem C. Além disso, acrescenta características de uma linguagem orientada a objetos. Em nosso estudo, usaremos como uma linguagem estruturada. Assim como várias linguagens hoje em dia, a linguagem C++ é case sensitive, isto é, diferencia letras maiúsculas de minúsculas. 1.2 Estrutura de um programa em C++ Cada linguagem de programação cria, ou herda da linguagem que lhe originou, uma estrutura para o programa. A estrutura de um programa codificado em C++ será apresentada a seguir [arquivos de cabeçalho] [definições de constantes] [uso de namespaces] [declaração de variáveis globais] int main() { [declarações das demais funções] Bloco de comandos } tipo de retorno da função1 nome_da_função1 (parâmetros) { Bloco de comandos da função1 } ... tipo de retorno da funçãon nome_da_funçãon ( parâmetros) { Bloco de comandos da funçãon } A função main poderá ser, ou não, a primeira função. Se for a primeira, os protótipos das demais funções precisarão estar presentes na main, mas se as demias vierem antes da main, não. Algoritmos – Prof. Anita Lopes 3 Exemplo de um programa em C++: #include <iostream> using namespace std; int main() { cout<<"\nPRIMEIRO PROGRAMA EM C++"; return 0; } Explicando: #include <iostream> instrui o compilador a usar a biblioteca padrão using namesapce std; uso do namespace padrão std(cin..., cout) int main() cabeçlhao da função principal(main) { inicia a função cout... ; Exibe msg na tela a msg após alimentar linha return 0; Comando que retorna ao sistema operacional Se omitirmos no caso da main, nenhum erro ocasionará. } finaliza a função A diretiva using possibilita que todos os identificadores de um namespace(entenda como um “pacote de nomes”) fiquem disponibilizados de maneira global. 1.2.1 Conjunto de caracteres Um programa fonte em C++ é um texto não formatado que faz uso do conjunto padrão de caracteres ASCII. Poderá ser escrito em qualquer editor de texto e salvo com a extensão cpp. 1.2.2 Comentários Muitas vezes para facilitar a manutenção ou elucidar, precisaremos escrever comentários sobre trechos do programa. A linguagem C++ permite que comentários apareçam em qualquer parte e podem ser de dois tipos: ¾ Comentários de bloco, herança da linguagem C, terão um /* antes e um */ depois. ¾ Comentário de linha será precedido por //. Algoritmos – Prof. Anita Lopes 4 Exemplos: /* A disciplina de Algoritmos é simplesmente apaixonante. Estou ficando cada vez mais exigente com minhas soluções. */ // A cada aula tem sempre algo interessante. 1.2.3 Diretivas de Compilação Você perceberá que nossos programas começarão com alguns comandos para que as bibliotecas e constantes possam ser anexadas a eles no momento que o programa executável for gerado. Nem sempre existiram as bibliotecas, chamadas de unidades por outras linguagens, mas quando as linguagens foram se tornando mais complexas ficou inviável carregar todas as funções/comandos. Sendo assim, foram agrupadas de acordo com suas finalidades e só teremos que incluí-las em nossos programas quando formos, de fato, usá-las. A biblioteca iostream será obrigatória porque agrega as funções/comandos básicos. Sintaxes: #include <nome_da_biblioteca > #include ”...nome_da_biblioteca ” onde nome_da_biblioteca é o nome da biblioteca que se deseja incluir. Estando entre os sinais < e > significa que está no diretório padrão e ficando entre ”, significa que precisamos fornecer o caminho onde se encontra a biblioteca. Exemplos de bibliotecas: BIBLIOTECA cctype Converte para maiúscula ou para minúscula uma letra toupper(letra) tolower(letra) BIBLIOTECA cmath Calcula o valor absoluto real d fabs(double d) Funções trigonométricas do ângulo arco, em radianos sin(double arco) cos(double arco) tan(double arco) asin(double arco) acos(double arco) atan(double arco) Algoritmos – Prof. Anita Lopes 5 Funções de arredondamento para inteiro ceil(double num) Ex. ceil(3.2) => 4.0 arredonda pra cima floor(double num) Ex. floor(3.2) => 3.0 arredonda para baixo Funções logarítmicas: log() é logaritmo natural (base e), log10() é logaritmo decimal (base 10) log(double num) log10(double num) Funções: potência e raiz quadrada pow(double base, double exp); Potenciacao: pow(3.2,5.6) => 3.25.6 sqrt(double num); Raiz quadrada: sqrt(9.0) = >3.0. BIBLIOTECA cstdlib Calcula o valor absoluto do inteiro i e do real d, respectivamente abs(int /float) Converte para inteiro, se possível, um vetor de char atoi( vetor de char ) Converte para real, se possível, um vetor de char atof( vetor de char ) BIBLIOTECA cstring Concatena duas strings strcat(str1, str2); Copia o conteúdo de uma variável em outra variável strcpy(str1, str2) /* não é permitido: str1 =str2;*/ Fornece o número de caracteres de uma string strlen(str1) Compara duas strings devolve número menor que 0 se str1 vier antes de str2 strcmp(str1, str2) devolve número maior que 0 se str1 vier depois de str2 devolve 0 se str1 for igual à str2 Algoritmos – Prof. Anita Lopes 6 2.Saída O objeto cout tem como objetivo o envio de dados/mensagens para a tela. Ele pode ser usado das três formas abaixo: Usando: using namespace std; cout<<”…”; cout<<variável ou expressão<<endl; Usando: using std::cout; cout<<”…”; cout<<variável ou expressão<<endl; Sem using std::cout<<”…”; std::cout<<variável ou expressão<<endl; Na tabela abaixo, encontramos alguns caracteres de controle que poderão ser usados com o objeto cout: Caracter de Controle Sequência de escape nulo(null) tabulação horizontal(tab) nova linha(new line/enter) aspas(”) apostrofo(’) barra invertida(\) \0 \t \n \“ \’ \\ Exemplo #include <iostream> using namespace std; int main() { cout<<"Aprendendo a usar \"cout\"\n" ; // o caracter \" imprime aspas na tela cout<<"O operador de insercao << separa os elementos que se desja colocar na tela\n"; cout<<"O caracter de controle \'\\n\' equivale a endl, alimenta linha"<<endl; cout<<"Usando \'\\t\' \timprime-se na proxima zona\n"; // o caracter \’ imprime apostrofo na tela e o carcater \\ imprime \ na teal system("pause"); } Algoritmos – Prof. Anita Lopes 7 3. Constantes e variáveis 3.1 Constantes Em nosso estudo, faremos uso de quatro tipos básicos de constantes: inteiras, de ponto flutuante, caracteres, cadeia de caracteres(strngs) e booleanas. Constantes inteiras e de ponto flutuante representam números de um modo geral. 3.1.1 Constantes inteiras As constantes inteiras na linguagem C++ podem ser escritas no formato decimal (base 10), hexadecimal (base 16) ou octal (base 8). Exemplos: Decimal: 12 Octal : 033 ( em decimal vale 27. O zero antes do número caracteriza a constante octal) Hexadecimal: 0xff ( em decimal vale 255. O zero e o x antes do número caracterizam a constante hexadecimal) Exemplo #include <iostream> using namespace std; int main() { int n=033, n1=0xA0; cout<<"\nA constante em octal 033 equivale em decimal: "<<n; cout<<"\nA constante em hexadecimal 0xA0 equivale em decimal: "<<n1; cout<<"\n\n"; system("pause"); } 3.1.2 Constantes de ponto flutuante São números reais com um ponto decimal. Exemplos: 23.12 -18.123 Algoritmos – Prof. Anita Lopes8 3.1.3 Constantes caracteres Uma constante caracter é uma letra ou símbolo colocado entre plicas(asapas simples). Exemplo: ’A’ ’N’ ’I’ ’T’ ’A’ As constantes caracter são armazenadas como números inteiros. Estes números correspondem aos valores de cada caracter dentro do código ASCII. 3.1.4 Constantes strings Uma constante string consiste de um conjunto de caracteres do código ASCII padrão ou estendido, colocados entre aspas duplas. Exemplos: ”UAL!” ”Matemática” ”APRENDENDO A PROGRAMAR EM C++ ” Na linguagem, C++ uma string é um vetor de caracteres terminado com um caracter nulo. O caracter nulo é um caracter com valor inteiro igual a zero (código ASCII igual a 0). O finalizador nulo também pode ser escrito usando a convenção de barra invertida do C como sendo '\0'. char nome_da_string[tamanho]; Como precisamos reservar uma posição para o finalizador, sempre iremos declarar o tamanho necessário mais um. Vamos supor que declaremos uma variável de nome palavra de 11 posições(char palavra[11]; ) e armazenemos a palavra PROGRAMAS nela. É bom ressaltar que a linguagem C++ não inicializa as variáveis e toda célula não usada têm valor indeterminado. Não se esqueça de inicializar as variáveis de seus programas, pois coisas incríveis podem acontecer! As strings são consideradas vetores de caracteres( matriz linha). Como na Matemática, para se acessar um determinado caracter de uma string, basta "indexarmos". Algoritmos – Prof. Anita Lopes 9 str[1] = 'o' str[2] = 'a' No exemplo acima, percebemos que o primeiro caracter se encontra na posição 0( em algumas linguagens, seria a posição 1). Desta forma, se indexarmos com 1, na verdade estaremos nos referindo ao segundo caracter da string; se indexarmos com 2, na verdade estaremos nos referindo ao terceiro caracter da string e assim sucessivamente. 3.1.5 Constantes Booleanas As constantes booleanas são: true ou false. 3.1.6 Constantes Simbólicas A constante pi é muito conhecida nossa desde o ensino no fundamental quando começamos a estudar trigonometria. Algumas linguagens de programação já tem essa constante definida, mas outras não. Além dessa, temos outras constantes que precisarão ser definidas em nossos programas para facilitar os cálculos. A diretiva define possibilitará a definição de constantes ou de pequenas “funções”. Sintaxe: #define <nome> < valor > 3.2 Variáveis A variável é um lugar(endereço) na memória principal que armazena um dado e tem um nome associado para facilitar a programação . Em C++, as variáveis podem ser declaradas no inicio do programa, mas poderemos também declarar dentro de algumas estruturas, diferentemente de outras linguagens. Estas variáveis podem ser de vários tipos, mas, inicialmente, usaremos: int (inteiro), float (real de simples precisão) , char (caracter único), double (real de dupla precisão). Tipo Tamanho Intervalo Uso char int float double 1 byte 4 bytes 4 bytes 8 bytes -128 a 127 -2147483648 a 2147483647 3.4e-38 a 3.4e38 1.7e-308 a 1.7e308 número muito pequeno e caracter ASCII contador, controle de laço real (precisão de 6dígitos) científico (precisão de 10 dígitos) Algoritmos – Prof. Anita Lopes 10 Quando se define um tipo de variável, informamos ao computador quanto de memória será necessária para armazenar esse dado e que tipos de operações poderão ser realizadas com esse dado. Para se declarar uma variável, usamos a seguinte sintaxe: < tipo> nome_da_variável ; O nome de uma variável deve obedecer algumas regras: 1. O primeiro caracter pode ser uma letra (maiúscula ou minúscula) ou o caracter sublinha. Aconselha-se a não usar o caracter sublinha no inicio para não confundir com algumas funções. 2. Os demais caracteres, letras algarismos ou o caracter sublinha. Exemplos: int a; float peso; char sexo; int idade1, idade2; 3.2.1 Palavras reservadas Existem certos nomes que não poderão ser usados como identificadores. São chamadas as palavras reservadas e são de uso restrito da linguagem C++. 3.2.2 Tipos modificados Além dos tipos de dados mencionados, existem os modificadores: long, short, signed e unsigned. Tipicamente o modificador long aumenta o número de bytes usados para o registro do número. O modificador unsigned, usado somente em inteiros, permite que um bit usado para guardar o sinal do número seja usado para guardar o valor do número. Tipo Tamanho (bytes) Intervalo unsigned char 1 0 a 255 unsigned int 2 0 a 65 535 unsigned long int 4 0 a 4 294 967 295 long int (int) 4 -2 147 483 648 a 2 147 483 647 short int 2 -32768 a 32767 long double 10 3.4e-4932 a 1.1e4932 3.2.3 Conversão de tipo (Casting) Algumas vezes precisamos, momentaneamente, modificar o tipo de dado para usá-lo como argumento de uma função, por exemplo, mas não desejamos declará-lo com esse tipo. Algoritmos – Prof. Anita Lopes 11 A conversão de tipo nos possibilita isso e é uma herança da linguagem C. Sintaxe: (tipo) variável ou expressão onde tipo é o nome do tipo ao qual queremos converter o dado ou a expressão. Exemplo #include <iostream> using namespace std; int main() { cout<<"\nNumero 7 DIVIDIDO por 3" ; cout<<"\n\nsem conversao: "<<7/3<<"\tcom conversao: "<< (float)7/3<<"\n\n"; system("pause"); } 3.2.4 Variável ponteiro Nós já sabemos que uma variável é um endereço na MP que armazena um dado. É bom deixar claro que não é um único endereço, pois, dependendo do tipo, poderemos estar alocando 1, 2, 4, 8 ou mais posições para cada variável como vimos na última tabela. Uma variável ponteiro armazena o endereço de outra variável. Em outra disciplina, você estudará esse tipo. 4. Atribuição Consiste em atribuir um valor a uma variável. Em C++, o comando de atribuição tem a seguinte sintaxe: nome_da_variável = conteúdo ; Algoritmos – Prof. Anita Lopes 12 Exemplos: a = 12 ; peso = 65.2; sexo ='f'; idade1 = 21; idade2 = 34; Observação 1: Em C++, é possível declarar e inicializar uma variável: int a = 12; Observação 2: Em C++, é possível inicializar várias variáveis: x =t =s = 0; Na atribuição múltipla as operações ocorrem da direita para a esquerda, isto é, inicialmente o valor 0 é atribuído a s, depois o valor de s é atribuído a t e, por último, o valor de t é atribuído a x. 4.1 Atribuição múltipla. A linguagem C++ permite que se atribua um valor a muitas variáveis. em uma única instrução. Sintaxe: var1 = var2 = valor; Exemplo: a = b = 0; 5. Entrada de dados scanf 5.1 cin cin>>nomedavariável; cin>>nomedavariável1>> nomedavariável2; O objeto cin permite que o usuário digite dados através do dispositivo padrão de entrada: teclado. O operador >> é chamado de extração. Exemplo 1: Escreva o enunciado deste programa. #include <iostream> using namespace std; int main() { int idade; float altura; cout<<"\nDigite idade: " ; cin>>idade; cout<<"\nDigite altura: " ; cin>>altura; cout<<"\n\n\nIdade: "<<idade; cout<<"\nAltura: "<<altura<<endl; system("pause"); } Algoritmos – Prof. Anita Lopes 13 Exemplo 2: Escreva o enunciado deste programa. #include <iostream> using namespace std; int main() { char sexo; char nome[30]; cout<<"\nDigite nome: " ; cin>>nome; cout<<"\nDigite sexo(m/f): " ; cin>>sexo; system("pause"); system("cls"); cout<<"\nNome; "<<nome; cout<<"\nSexo; "<<sexo<<endl;; system("pause"); } O objeto cin quando lê um vetor de char(string) termina a leitura no primeiro espaço, deixando RENATO no buffer. Quando um outro cin para ler o sexo éexecutado, o teclado não é liberado e a letra R é ”apanhada” e armazenada na variável sexo. Por estas razões, precisamos conhecer outros métodos. Se você escolher o formato cin>>var1>>var2;, na entrada de dados, separe-os com um espaço ou pressione enter após cada valor. Algoritmos – Prof. Anita Lopes 14 5.2 cin.get Est sive com espaços e não deixa line método permite a leitura de um vetor de char inclue nada no buffer. Sintaxe: cin.getline(nome do vetor de caracteres, tamanho ); Exem Escreva o enunciado deste programa. #inc sin nt main() nome[30]; nome: " ; cin.getline(nome,30); sexo(m/f): " ; cin>>sexo; "\n\n\nNome: "<<nome; l;; plo: lude <iostream> g namespace std; u i { char sexo; char cout<<"\nDigite "\nDigite cout<< cout<< cout<<"\nSexo: "<<sexo<<end system("pause"); } 5.3 cin.get Este método permite a leitura de um char. es: Sintax cin.get(nome da variável char); cin.get(); ler uma variável do tipo char, mas deixa enter no buffe que o objeto cin sempre libera o teclado para o usuário digitar. Exemp A primeira sintaxe serve para r enquanto lo: Escreva o enunciado deste programa. #include <iostream> #include <iostream> Algoritmos – Prof. Anita Lopes 15 namespace std; o(m/f) " ; (m/f): " ; using namespace std; main() o(m/f) " ; (m/f) " ; using int main() int { char sexo1,sexo2; cout<<"\nDigite sex sexo1); cin.get( cout<<"\nDigite sexo cin.get(sexo2); o: "<<sexo1; cout<<"\n\n\nSex cout<<"\nSexo: "<<sexo2<<endl; system("pause"); } { char sexo1,sexo2; cout<<"\nDigite sex o1; cin>>sex cout<<"\nDigite sexo cin>>sexo2; nSexo: "<<sexo1; cout<<"\n\n\ cout<<"\nSexo: "<<sexo2<<endl;; e"); system("paus } Não se surpreenda se encontr alguns bugs quando usar cin, cin.get() ou ar cin.getline() em alguns compiladores. Não gosta de usar system(“pause”); ? Veja o exemplo abaixo: #include <iostream> using namespace std; t ain() o(m/f) " ; cin>>sexo1; o(m/f): " ; cin>>sexo2; <<sexo1; arda o pressionamento de uma in m { char sexo1,sexo2; cout<<"\nDigite sex nDigite sex cout<<"\ cout<<"\n\n\nSexo: " cout<<"\nSexo: "<<sexo2<<endl; cin.get();cin.get(); e o segundo agu // o primeiro limpa o buffer tecla } Algoritmos – Prof. Anita Lopes 16 . Operadores Aritméticos Além dos quatros operadores aritméticos básicos, adição, subtração, multiplicação e divisão, a linguagem C++ ainda disponibiliza o operador (%) chamado de módulo cujo significado é o resto da divisão inteira(Em alguma linguagens é conhecido como mod). 6 Operador Operação + - * / % adição subtração multiplicação divisão módulo (resto da divisão inteira) Sintaxe: operando1 operador operando2 onde operador é um dos símbolos mostrados acima e operando é uma constante ou um identificador de variável. Exemplos: 12 + 5 -> 17 12 - 5 -> 7 12 * 5 -> 60 12 / 5 -> 2 quando se divide dois inteiros, o resultado é um inteiro 12 % 5 -> 2 resto da divisão inteira Se você precisar dividir dois números inteiros e quiser a resposta em real, existe duas saídas: 1- Coloque um ponto em um dos operandos caso, pelo menos um, seja uma constante: 12 / 5.0 . 2- Caso os dois operandos sejam variáveis, faça: (float) a/b . Não existe em C++, como existe em outras linguagens, um operador específico para a operação de potenciação (ab). Existe, porém, uma função de biblioteca (pow(...,...)) que realiza esta operação, ou você poderá criar quando aprender a usar as funções log e exp.. Algoritmos – Prof. Anita Lopes 17 s 6.1 Hierarquia das operaçõe Categoria Operadores parênteses ( ) função nome() incremental, l ++ --ógico ! aritmético % * / aritmético + - relacional < > <= >= relacional == != lógico && lógico || condicional ?: atribuição = += -= *= /= %= 6.2 e Atribuição Aritmética uma operação A forma clássica será permitida na maioria das linguagens como por exemplo: Operadores d Muitas vezes queremos alterar o valor de uma variável realizando alg aritmética com ela. cont = cont + 1; ou soma = soma + altura; A l da linguagem C os operadores de atribuição aritmética, simplifican , %=). Sintaxes: inguagem C ++ herdou do a expressão clássica. Os símbolos usado são (+=, -=, *=, /= var += exp; var -= exp; var *= exp; var /= exp; var %= exp; var = var + exp; var = var - exp; var = var * exp; var = var / exp; var = var % exp; onde var é o identificador da variável e exp é uma expressão válida. Estas instruções são equivalentes as seguintes: Algoritmos – Prof. Anita Lopes 18 Exemplos: Atribuição Aritmética Instrução Equivalente con j -= num divid c j = j – i ; num = * k; divid e / 5; resto = resto % 2; t += 1; i ; *= k; e /= 5; resto %= 2; ont = cont + 1; num e = divid O operador de atribuição aritmética tem precedência menor que os outros operador discutidos. 6.3 Opera Em stem instruções muito comuns chamadas de incremento e decremento strução de incremento adiciona uma unidade ao conteúdo de uma variável. decremento su i uma unidade do conteúdo de uma variável. Ex C++, operadore realizar as operações de incremento (++) e decremento (--). Eles são genericamente chamados de operadores incrementais. Sintaxe: es até aqui dores Incrementais programação exi . Uma in Uma instrução de btra istem, em s específicos para Instrução Equivalente ++ var; ; var = var + 1; var = var – 1; var ++ ; -- var var = var + 1; var -- ; var = var – 1; onde var é o nome da variável da qual se quer incrementar ou decrementar um unidade. Observe que existe duas sintaxes possíveis para os operadores: pode-se colocar o operad ixo, o valor da var crementado (ou decrementado) antes que a variável seja usada em alguma outra operação. Caso o operador seja colocado como sufixo, o valor da variável será incremen rem ue a variável for usada em alguma outra operação. #includ > using n d; int mai { int n suf cout< "; cin>> n1=n; //para nao perder o valor de n n p c "\t n= "<<n1<<endl; suf=n2++; or como prefixo ou como sufixo. Nos dois casos o valor da variável será incrementado (ou decrementado) de uma unidade. Porém se o operador for colocado como suf iável será in tado (ou dec entado) depois q e <iostream amespace st n() ,n1,n2,pre, ; <"\nnumero: n; 2=n; //para nao perder o valor de n re=++n1; out<<"\n\nprefixo= "<<pre<< Algoritmos – Prof. Anita Lopes 19 cou fixo= "<<suf<<"\t n= "<<n2<<endl; cin.g } t<<"\n\nsu et();cin.get(); 6.4 O s relacio 6.4.1 Operadores relacionais Oper laciona onhecidos nossos da Matemática e sofreram pequenas mo ua , mas permanecem com os mesmos conceitos. peradores Relacionais e Lógicos As expressões lógicas usadas nas estruturas de teste são formadas pelos operadore nais e lógicos. adores re is são velhos c dificações na s apresentação Operador Significado > maior que < menor que >= <= == != maior ou igual a menor ou igual a igual a diferente de _1 operador expressão_2 Sintaxe: expressão onde expressão_1 e exp adores relacionais. ressão_2 são duas expressões numéricas quaisquer, e operador é ncia menor que os operadores aritméticos. um dos oper Os operadores relacionais têm precedê Algoritmos – Prof. Anita Lopes 20 Os operadores lógicos também são nossos conhecidos da Lógica Matemática. Quem não se lembra da negação, conjunção e disjunção? Aqui também sofreram modificações em suas representações, mas permanecem com os mesmos conceitos.São três os operadores lógicos de C: &&, || e !. Estes operadores têm os mesmos significados dos operadores lógicos Booleanos AND, OR e NOT. Sintaxes: expr_1 && expr_2 expr_1 || expr_2 !expr 6.4.2 Operadores lógicos onde expr_1 , expr_2 e expr são expressões quaisquer. Para esses operadores todo valor numérico diferente de 0 é considerado 1. Operador Matemática C conjunção negação e ∧ ou ∨ não ! && || ! disjunção Supon gunt ssoas. Se a resposta do candidato for negativa, deverá falar 0, ário, falará 1. Suponha também que só será chamado para entrevista o candidato que dominar as duas linguagens. Você con C+ ê conhece JAVA? SAÍDA TABELA VERDADE DO OPERADOR && ha duas per as feitas a quatro pe caso contr hece +? Voc 0 0 0 0 1 0 1 0 0 1 1 1 s pressão como verdadeira se todas as expressões testadas forem verdadeiras. Neste exemplo, somente o quarto candidato seria chamado para a entrevista, poi o operador && (e) considera a ex Algoritmos – Prof. Anita Lopes 21 ERADOR || Você conhece C++? Você conhece JAVA? SAÍDA TABELA VERDADE DO OP Suponha duas perguntas feitas a quatro pessoas. Se a resposta do candidato for negativa, deverá falar 0, caso contrário, falará 1. Suponha também que será chamado para entrevista o candidato que dominar pelo menos uma linguagem. 0 0 0 0 1 1 1 0 1 1 1 1 Neste exemplo, somente o primeiro candidato não seria chamado para a entrevista, poi deira se, pelo menos uma expressão testada for verdadeira. s o operador || (ou), considera a expressão como verda O O t ia sobre o operador ||. Estes dois têm perador && em precedênc prec or q res re ais. edência men u doe os opera lacion TABELA VERDADE DO OPERADOR ! Suponha uma pergunta feita a duas pessoas. Se a resposta do candidato for negativa, deverá falar 0, caso contrário, falará 1. Você Não conhece C++? SAÍDA 1 0 0 1 O op dor ! tem a mesma precedência que os operadores incrementais. era Algoritmos – Prof. Anita Lopes 22 7. era ov estrutura de seleção nos dará uma visão maior da complexidade de arefas que ele poderá executar. 7.1 Estrutura d ecisão - if...else A estrutura if...else é uma estrutura de controle do C++ muito fácil de ser usada Após o teste, o fluxo poderá seguir dois caminhos, isto é, se o teste resultar em uma verdade p c ndo else. 7.1.1 Estrutura de decisão com um bloco(if simples) Estruturas de seleção - if Nossos programas até agora seguiram um mesmo padrão: entrava-se com dados, estes m processados e alguma informação era mostrada na tela. Agindo desta forma, o computador mais parecia uma máquina de calcular. O aprendizado de os conceitos como a dan t e d , será executado o comando ou bloco de comandos que se encontra após o fecha arênteses do teste, caso contrário, se existir, será executado o comando ou bloco de omandos que se encontra após o coma Sintaxe: if(condição) { bloco } onde: con ão é uma expressão u relacional. bl unto de in ruções, separadas por ponto-e-vírgula. { e } só serão obrigatórias se tiver mais de uma ação para ser executada diç lógica o oco é um conj st . Se a não é executado. Vejamos exemplo na próxima página. Na primeira execução, o número de inscrição aparece porque a nota foi maior ou igual a 8 e, na segunda, nada saiu. condição for verdadeira, o bloco é executado. Caso contrário, o bloco Algoritmos – Prof. Anita Lopes 23 ste programa. include <iostream> sing namespace std; if(nota >= 8) cout<<inscricao<<"\n"; cin.get();cin.get(); Exemplo: Escreva o enunciado de # u int main() { int inscricao; float nota; cout<<"\nDigite numero de inscricao:"; cin>>inscricao; cout<<"\nDigite nota:"; cin>>nota; } 7.1.2 Estrutura de decisão com dois blocos(if composto) Sintaxe: if(condição) { bloco } else { bloco } aparece a mensagem classificado porque a nota foi maior ou igual a 8 e, na segunda, a mensagem Nao classificado porque a média foi menor do que 8. onde: condição é uma expressão lógica ou relacional. bloco 1 e bloco 2 são conjuntos de instruções. Se a condição for verdadeira o bloco 1 é executado. Caso contrário, o bloco 2 é executado. Vejamos exemplo na próxima página. Na primeira execução, Algoritmos – Prof. Anita Lopes 24 cout<<"Nao classificado\n"; cin.get();cin.get(); } Exemplo: Escreva o enunciado desse programa. #include <iostream> using namespace std; int main() { int inscricao; float nota; cout<<"\nDigite numero de inscricao:"; cin>>inscricao; cout<<"\nDigite nota:"; cin>>nota; if(nota >= 8) cout<<"Classificado\n"; else 7.1.3 e múltiplos blocos (ifs encadeados) Muitas vezes, noss ogramas poderão envolver várias condições excludentes. Programas que envolvem faixas iais ou faixas de idades são exemplos clássicos do uso da instrução if ... else if ... Sintaxe: Decisão de iplos blocos: Decisão d os pr salar . múlt i dição 1) f(con { bloco 1 } ... else if(condição N) { bloco N } else { bloco P } Algoritmos – Prof. Anita Lopes 25 pressões lógicas ou relacionais. 1 , bloco 2,... são conjuntos de instruções. for verdadeira o bloco 1 é executado. Caso contrario, as condições rdadeira ou chegue ao último else, onde o dos blocos é executado. o enunciado deste programa. ade3; cout<<"\nDigite 1a idade: "; cin>>idade1; cout<<"\nDigite 2a idade: "; cin>>idade2; cout<<"\nDigite 3a idade: "; cin>>idade3; if(idade1>idade2 && idade1>idade3) cout<<"\nMaior idade: "<<idade1<<"\n"; else if(idade2>idade3) cout<<"\nMaior idade: "<<idade2<<"\n"; else cout<<"\nMaior idade: "<<idade3<<"\n"; cin.get();cin.get(); } onde: condição 1, condição 2, ... são ex bloco Se a condição 1 serão avaliadas, sucessivamente até que seja ve do. Observe que apenas umbloco P seria executa Exemplo: Escreva #include <iostream> amespace std; using n int main() { int idade1, idade2, id Algoritmos – Prof. Anita Lopes 26 7.2 Est t A estrutura switch...case, também conhecida como alternativa de múltiplas escolhas, é uma e q co de cada um dos rótulos, e os comandos são executadas a partir desde rótulo. ru ura switch...case strutura que simplifica nossos programas no uso de decisão de múltiplos blocos uando a expressão de controle envolver tipos int ou char(de um caracter que também é nsiderada inteira). O resultado desta expressão é comparado ao valor apa Já foi difícil o rece mais es tal de if... else if e agora ta para complicar? Calma! É para facilitar. Vou poder usar sempre? Não! Veja as “regras” abixo. 1- Se você tiver em seu programa ifs aninhados. nte a mesma variável. ualdade: == em 2- Se em todos os ifs estiver prese 3- Se a variável for int ou char de um caracter. 4- Se o operador relacional for o de ig todos os ifs, então você poderá usar a estrutura do itch. sw Sintaxe: onde: expressão é uma expressão inteira ou char de um caracter switch(expressão) { case rótulo_1: bloco1; break; case rótulo_2: bloco2 break; ... case rótulo_n: bloco n break; <default: bloco d>; } . rótulo_1,rótulo_2,...rótulo_n e rótulo_d são constantes inteiras ou char de um caracter. bloco 1, bloco 2, ..., bloco n e bloco d são conjuntos de instruções. Algoritmos – Prof. Anita Lopes 27 A expressão é avaliada eo fluxo desviado para o conjunto cujo rótulo é igual ao Exem lo 1: Escreva o enunciado deste programa. #include using nam int mai ( { in cout<<"\nDigite mes do seu nascimento: "; cin>>me switch( { 1: cou bre case 2: cou bre case 3: cout<< ; break; cout<<"Abril\n" break; case 5: cout<<" break; case 6: cout<<" break; case 7: cout<<"Julho\n"; break; case 8: cout<<"Agosto\n" break; case 9: cout<<"Setembro\n"; ; case 1 "; Execução: resultado da expressão. O bloco abaixo do rótulo é executado. Se o valor da expressão não for igual a nenhum rótulo, o bloco do default é executado. Você não é obrigado a colocar o rótulo do default e por esta razão ele se encontra entre os sinais de menor e maior. p <iostream> espace std; ) n t mes; s; mes) case t<<"Janeiro\n"; ak; t<<"Fevereiro\n"; ak; "Marco\n" case 4: ; Maio\n"; Junho\n"; ; break 0: cout<<"Otubro\n break; Algoritmos – Prof. Anita Lopes 28 ca ca i in.get(); se 11: cout<<"Novembro\n"; break; se 12: cout<<"Dezembro\n"; break; default: cout<<"Mes nexistente\n"; } cin.get();c } Po reak? r que usar b Leia o parágrafo abaixo e veja o exemplo. Normalmente, em outras linguagens de programação, após a avaliação da ão e a execução do bloco correspondente, o fluxo do programa passa para a todos os outros rótulos. Na linguagem C++ isto não razer conseqüências indesejáveis para seus programas. O uso do orçará a saída do comando switch. nclu <io ce std; int mes; gite mes do seu nascimento: "; switch(mes { "Janeiro\n"; case 2: cout<<"Marco\n"; case 4: express óximpr a instrução, ignorando acontece e poderá t break f #i de stream> using namespa nt main() i { cout<<"\nDi cin> mes; > ) case 1: cout<< Fevereiro\n"; cout<<" case 3: Abril\n"; cout<<" Algoritmos – Prof. Anita Lopes 29 "Maio\n"; case 6: case 7: cout<<"Julho\n"; case 8: se 9: cout<<"Setembro\n"; ; case 12: cout<<"Dezembro\n"; default: cout<<"Mes inexistente\n"; } cin.get();cin.get(); } case 5: cout<< cout<<"Junho\n"; cout<<"Agosto\n"; ca case 10: cout<<"Otubro\n"; case 11: cout<<"Novembro\n" Entendi: quando comparou o mês com o rótulo e achou, daí em diante executou todos os comandos. Você está ficando ótimo! Então o break; será sempre obrigatório. Errado! Veja o exemplo abaixo. Exemplo 2: Escreva o enunciado deste programa. stream> #include <io using namespace main() std; to: "; int { int mes; cout<<"\nDigite mes do seu nascimen cin>>mes; switch(mes) { case 1: case 2: Algoritmos – Prof. Anita Lopes 30 cout<<"Voce nasceu no primeiro trimestre\n"; case 5: cout<<"Voce nasceu no segundo trimestre\n"; case 8: cout<<"Voce nasceu no terceiro trimestre\n"; 11: case 12: nasceu no quarto trimestre\n"; break; default: cout<<"Mes inexistente\n"; } cin.get();cin.get(); } case 3: break; case 4: case 6: break; case 7: case 9: break; case 10: case cout<<"Voce Algoritmos – Prof. Anita Lopes 31 8. Estruturas de repetição truturas de repetição disponíveis na linguagem C++: for, while e do ... while. Em turas estará presente pelo menos uma expressão para controlar a repetição. 8 or ra do for é a mais simples estrutura de repetição, sendo usada para repetir u ra mais indicada quando o onhecido embora, as outras duas estruturas também possam s ntrole do número de repetições, na maioria das vezes, é feito por uma v de variável contadora. ++ linguagens, pois a Três são as es todas as estru .1 Estrutura de repetição: f A estrutu ou vários com mandos tantas vezes quanto desejarmos. É a estrutu número de repetições for c er usadas. O co ariável chamada A estrutura do for na linguagem C é um pouco diferente das demais r somente a uma variável contadora. condição pode não se prende Sintaxes: for (inicialização;condição;incremento) comando; for (inicialização ;condição ;incremento) { bloco de comandos } onde: inicialização é uma expressão de inicialização da variável contadora e só é executada uma vez.. condição é uma expressão lógica de controle de repetição. incremento é uma expressão de incremento da variável contadora. bloco de comandos é um conjunto de instruções a ser executado. Exemplo 1: Escreva o enunciado deste programa. #include <iostream> using namespace std; int main() { int n, c; for(c=1;c<=3;c++) { cout<<"\nnumero inteiro:"; cin>>n; if(n%5 == 0) cout<<"\nO numero e multiplo de 5\n"; else cout<<"\nO numero nao e multiplo de 5\n"; } cin.get();cin.get(); } Algoritmos – Prof. Anita Lopes 32 Exemplo 2: Escreva o enunciado deste programa. #include <iostream> using namespace std; int main() { int c; for(c=1;c<=10;c++) c<<"\t"; ; for(c=20;c>=2;c-=2) c for(c=3;c<=59049;c*=3) or(c=100000;c>=3125;c/=2) cout<< cin.get();cin.get(); cout<< cout<<"\n\n" cout<<c<<"\t"; out<<"\n\n"; cout<<c<<"\t"; cout<<"\n\n"; f cout<<c<<"\t"; "\n\n"; } Algoritmos – Prof. Anita Lopes 33 Definição: É uma variável que tem seu valor alterado dentro de uma estrutura de repetição. Na verdade, quando falamos em acumulador, estamos nos referenciando a um comando de atribuição que incrementa, ou decrementa, o conteúdo da variável. Sintaxe: nomeVariável = nomeVariável Op. Aritmético valor ; Exemplos: Expressão Como se lê? a = a + valor ; A variável a recebe o valor que estava armazenado nela, acrescido do valor armazenado na variável valor. a = a * valor ; A variável a recebe o valor que estava armazenado nela, multiplicado pelo valor armazenado na variável valor. a = a - valor ; A variável a recebe o valor que estava armazenado nela, decrementado do valor armazenado na variável valor. a = a / valor A variável a recebe o valor que estava armazenado nela, dividido pelo valor armazenado na variável valor. ; Quando a variáve tante, costum l é acrescida (ou decrementada) de um valor amos chamar o acumulador de contador. cons Exemplos: Expressão Como se lê? a = a + 1 ; ou a++; A variável a é incrementada de 1. a = a - 1 ; ou a--; A variável a é decrementada de 1. a = a + 2 ; ou a+=2; A variável a é incrementada de 2. a = a - 2 ; ou a-=2; A variável a é dencrementada de 2. Quando devo usar? Em todo algoritmo que tenha repetição e você precise somar os números que entram, calcular a média, contar de acordo com uma condição, etc. Regras para se usar um acumulador 1- Todo acumulador é uma variável, logo PRECISA SER DECLARADO. 2- Todo acumulador precisa ser INICIALIZADO. Como faço isto? Use um comando de atribuição ANTES da estrutura de repetição em que ele aparece e Atribua um valor inicial. Normalmente, o elemento neutro da operação. 3- A expressão do acumulador precisa estar DENTRO DA ESTRUTURA DE REPETIÇÃO. 4- Alguma operação deverá ser feita com o acumulador APÓS A ESTRUTURA DE REPETIÇÃO. Algoritmos – Prof. Anita Lopes 34 Exemplo 3: Escreva o enunciado deste programa. #include <iostream> using namespace std; int main() { int c, idade, contaMaior, somaIdades; contaMaior=0; somaIdades=0; for(c { ; } cout<< Maior; cout<<"\n\nSocout< cin.get();cin.get(); } =1;c<=4;c++) cout<<"Digite idade: ";cin>>idade; if(idade>=18) contaMaior++; somaIdades+=idade "\n\nTotal de idades maiores ou iguais a 18: "<<conta ma das idades: "<<somaIdades; <"\n\n"; somaIdades. Observe que a v sam ariáve vezes no programa, ent como a variável l contaMaior aparece quatro seguindo rigoro e as quatro regras assim Algoritmos – Prof. Anita Lopes 35 8.2 é uma estrutura "poderosa" da programação. Muitos prog Ela testa primeiro a condição e poderá nem ja falsa. Logo, a estrutura do while repete enquanto a co m o tenha seu valor alterado dentro da repe . res mostram simplesmente a sintaxe da estrutura, mas esqu da na prática: taxe Sintaxe na prática Estrutura de repetição: while A estrutura while ramadores fazem uso somente desta estrutura. executar o bloco caso a condição se ndiçã É i o for verdadeira. portante que a variável presente na condiçã ti o ará em loopção, p is, caso contrário, entr rmalmente, todos os autoNo ecem de informar como na prática ela deverá ser escrita. Abaixo, apresentarei a sintaxe geral e a sintaxe usa Sin while(condição) { bloco de comandos } atribuição ou leitura da variável presente na condição while(condição) { bloco de comandos atribuição ou leitura da variável presente na condição } onde: condição é uma expressão lógica ou numérica. bloco de comandos é um conjunto de instruções. Exemplo 1: Escreva o enunciado deste programa. #include < using name int main ) { int n, c cout<<"\nnumero inteiro ou 0 para sair:"; cin>>n; cont=0; while(n>0) { if(n%2==0) cont++; cout<<"\nnumero inteiro ou 0 para sair:"; cin>>n; } cout<<"\n\nQuantidade de pares digitados "<<cont<<"\n"; cin.get();cin.get(); } iostream> space std; ont; ( Algoritmos – Prof. Anita Lopes 36 Exemplo 2: Escreva o nu ama. <iostream> e e std; t main() c c=1; while(c<=5) { cout<<"\nnumero inteiro:"; cin>>n; ( o c++; "<<cont*100.0/(c-1)<<"\n"; ; e nciado deste progr #include using nam spac in { int n, cont,c; ont=0; if n%2==0) c nt++; } cout<<"\n\nPercentual de pares digitados: cin.get();cin.get() } No segundo exemplo, simulamos a estrutura do for. Algoritmos – Prof. Anita Lopes 37 8.3 Estrutura de repetição: do...while Esta estrutura é parecida com while. Sua diferença é que o bloco é executado pelo menos uma vez, pois testa ao final. Esta estrutura repete enquanto a condição for verdadeira. Sintaxe: do { bloco de comandos } while(condição); onde: condição é uma expr o de coman essão lógica ou numérica. dos é um conjunto de instruções. eva o enunciado deste programa. iro:"; cin>>n; if(n%2==0) cont++; c++; } while(c<=5); cout<<"\n\nPercentual de pares digitados: "<<cont*100.0/(c-1)<<"\n"; cin.get();cin.get(); } bloc Exemplo 1: Escr #include <iostream> ace std; using namesp int main() ,c;{ int n, cont ; cont=0 1; c= do { cout<<"\nnumero inte Algoritmos – Prof. Anita Lopes 38 exemplo 2 da estrutura while. Estranho. Igual à solução do É porque as duas simularam a estrutura do for. Esta estrutura é ideal para programas com menus como veremos a seguir. Exemplo 2 RA CONSTRUIR UM PROGRAMA COM MENU 1. C diretivas e o cab #include <iostream> using namespace std; ain() PASSOS PA oloque as eçalho int m Abra chaves { 2. 3. Declare todas as variáveis nec lgoritmo int op; float num1, num2, num3,soma, prod; essárias para o a 4. Use a do do para rep do { estrutura etir impe a tela system("cls"); 5.L 6. Coloque tantos comandos cout quantas forem as linhas do menu ou um comando cout, usando \n. cout<<"\n\n\tMAQUINA ESPERTA "; cout<<"\n1 - Soma dois numeros "; cout<<"\n2 - Multiplica tres numeros "; cout<<"\n3 - Sai do programa "; cout<<"\nOPCAO: "; 7. Coloque um comando cin para que possa armazenar a escolha do usuário. A variável poderá ser inteira ou char. cin>> op; 8. Limpe a tela system("cls"); 9. Faça uso do switch. switch(op ) { Algoritmos – Prof. Anita Lopes 39 10. Em um trecho de programa que satisfaça o que foi pedido. case 1: out<<"\ cin>>n cout<<"\nSoma: "<<soma<<endl; break; cin>>num1>>num2>>num3; prod=num1 * num2 * num3; cout<<"\nProduto: "<<prod<<endl; break; case 3: cout<< "\nSai do programa\n"; break; default: cout<<"\nOpcao nao disponível\n" ; } cada caso deverá conter c soma=num1+num2; nDois numeros: "; 1>>num2; um case 2: cout<<"\nTres numeros: "; 11. Coloque cin.get para parar cin.get();cin.get(); 12. Feche o do while }while(op!=3); 13. Feche o programa } Agora você inventa um tal de endl. Eu ainda nem Leia as notas abaixo. entendi por que dois cin.get(). endl serve para alimentar linha. É igual ao ”\n” que foi herdado da linguagem C. endl é mais usado pelos programadores de C++ Quando se digita um núm cla enter fica no buffer do teclado. ero, o código da te O objeto cin.get() serve ler um caracter que foi digitado, mas se existir um caracter no buffer, ele ”apanha” este caracter. Nossa idéia é usá-lo para simular o system(”pause”); e se colocarmos só um de nada vai adiantar. Assim, colocando dois, o primeir egundo, espera o ”apanha” o código da tecla enter e, o s que o usuário digite um caracter. Algoritmos – Prof. Anita Lopes 40 9 Estruturas cialmente, vamos abordar as temática qua 9.1 Estruturas homogêneas Em C++, o uso de matrizes é d mento estreito entre matrizes e ponteiros ais adiante. As matrizes são tabelas na ter uma ou mais dimensão e todos os elementos são do mesmo tipo. Quando uma matriz tem some As estruturas em C++ podem ser ho homogêneas, pois são mais familiare ndo estudamos matrizes. m as e heterogêneas. Inogêne i s uma vez que conhecemos seu conceito da ma e fundamental importância e existe uma relaciona que estudaremos m MP e podem nte uma dimensão, também chamamos de vetor. Na linguagem C++, como já vim um caracter, faz uso de matriz, pois po seus caracteres em separado, u posi na linguagem a posição do primeiro caracter é 0 ? O endereço guardado é o do primeiro caracter que chamamos de base, logo qualquer outro carac a posição os, uma variável char ,que precisa armazenar mais de demos acessar cada um de ção entre colchetes. sando o nome da variável e sua Por que será que C++ ter será acessado pelo endereço base mais su . Se o endereço é o da r na mesma posição. primeira po ido para permanecesição, somente o 0 poderia ser acresc Se declararmos pal com tamanho 5, lembre-se de que só podemos usar 4 posições, pois uma reservada para o finaliza É bo programar 9.1.1 De dor \0 que indica o fim do vetor. m você já ir se acostumando com este conceito de apontamento, pois para se bem em C, precisaremos dominar o conceito de ponteiros. clarando uma matriz: tipo nomeDoConjunto [ ... ] [ ...] ... ; Exemplos: /* declara uma matriz unidimensional de 5 elementos inteiros */ int num[ 5 ]; Algoritmos – Prof. Anita Lopes 41 clara uma matriz bidimensional com 100 linhas e 4 colunas do tipo float */ float notas [ 100 ][ 4 ]; ][ 30 ]; rdar nomes, na linguagem C++, é bidimensional, pois o primeiro índice indica a quantidade de nomes e o segundo o número de caracteres –1 que serão arma 9 /*uma dimensao */ } ... /* de /* declara uma matriz bidimensional com 100 linhas e 30 colunas do tipo char */ char nomes [ 100 Toda matriz paragua zenados em cada nome. 9.1.2 Armazenamento O armazenamento na matriz poderá ser feito através de um comando de leitura ou de atribuição. .1.2.1 Leitura ... for(a=0;a<tamanho;a++) { cout<<"\n…: "<<a+1; cin>>nomeVetor[a]; /*duas dimensoes */ ... for(L=0;L<tamanhoLinha;L++) for(c=0;c<tamanhoColuna;c++) { cout<<"\nNumero da Linha "<<L+1<<" coluna "<<c+1<<": "; cin>>nomeMatriz[L][c]; } ... .1.2.2 Atribuição matrizes através de atribuições: xemplos: int vet[4]={6,7,8,9} float nota[3]={8.5,6.2,9.8}; cha ="João Renato"; cha int /* de ação/atribuição acima, é assumido 3 como número de linhas */ 9 Podemos também inicializar as E ; r nome[12] r nomes[4][30]={"JOÃO", "MARIA", "PEDRO","FILIPE"}; 4,5,6,7,8,9}; mat[][3]={1,2,3, clarna Algoritmos – Prof. Anita Lopes 42 #i us in {int L,c; i dias_meses[][12]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30, 31 cout<<"\n\nPara anos nao bissextos, primeira linha e para bissextos, se [L][c]<<" "; cout<<"\n\n"; } cin.get(); cin.get(); nclude <iostream> ing namespace std; t main() nt ,31,30,31,30,31}; gunda linha\n\n"; for(L=0;L<2;L++) { for(c=0;c<12;c++) cout<<dias_meses } 9 1.3 S mensao – MATRIZ COLUNA*/ /*uma dimensao – MATRIZ LINHA*/ ... system("cls"); cout<<"\nTitulo\n"; for(a=0;a<tamanho;a++) cout<<nomeVetor <<"\t"; . aída /*um dia ... system("cls"); cout<<"\nTitulo\n"; for(a=0;a<tamanho;a++) cout<<"\n…: "<<nomeVetor; ... ... /*duas dimensoes TODOS OS ELEMENTOS*/ ... sy tes cout m("cls"); <<"\nTitulo\n"; for(L=0;L<tamanhoLinha;L++) { for(c=0;c<tamanhoColuna;c++) atriz[L][c]<<"\t"; cout<<nomeM cout<<"\n"; } ... Algoritmos – Prof. Anita Lopes 43 uns Elementos*/ "); tulo\n"; Condição (L==c) só diagonal Principal /*duas dimensoes Alg ... system("cls t<<"\nTi cou for(L=0;L<tamanhoLinha;L++) hoColuna;c++) (L!=c) { for(c=0;c<taman if( condição ) cout<<nomeMatriz[L][c]<<"\t"; else cout<<"\t"; cout<<"\n"; } ... todos menos a diagonal Principal (L<c) elementos acima da diagonal principal (L>c) elementos abaixo da diagonal principal 9.1.4 Matrizes somaLinha e somaColuna 9 aLinha l(vetor o tas linhas quantas forem as linhas da matriz original e todos os e iz original. Em outras palavras, cada e s os elementos das colunas de uma linha. ha mo é uma matriz de acumuladores precisa ser inicializada. for(L=0; L<tamanhoLinha; L++) somaLinha[L]=0; .1.4.1 Matriz som É uma matriz unidimensiona u matriz coluna) que terá tan a elemento será a soma de cad lementos da linha correspondente na matr lemento soma de todo 9.1.4.1.1 Inicializando a matriz somaLin Co 9.1.4.1.2 Gerando a matriz somaLinha for(L=0;L< tamanhoLinha;L++) for(C=0;C< tamanhoColuna;C++) somaLinha[L]+=mat[L][C]; Algoritmos – Prof. Anita Lopes 44 o manhoLinha;L++) n"; 9.1.4.1.3 Imprimindo a matriz somaLinha s zinha for(L=0;L< ta cout<<somaLinha[L]<<"\ cout<<endl; primindo a matriz somaLinha c9.1.4.1.4 Im o inal ls"); cout<<"\nMatriz Original com matriz SomaLinha\n\n"; for(L=0;L< tamanhoLinha;L++) { for(C=0;C< tamanhoColuna;C++) cout<<matOriginal[L][c]<<"\t cout<<somaLinha[x]<<"\n"; } m a matriz orig system("c "; 9.1.4.2 Matriz somaColuna É uma matriz unidimensional(vetor ou matriz linha) que terá tantas colunas quantas forem as colunas da matriz original e cada elemento será a soma de todos os elementos da coluna correspondente na matriz original. Em outras palavras, cada elemento é a soma de todos os elementos das linhas de uma coluna. .2.1 Inicializando a matriz somaColuna somaColuna[c]=0; 9.1.4 Como é uma matriz de acumuladores precisa ser inicializada. for(c=0; c<tamanhoColuna; c++) 9.1.4 Gerando a matriz somaColuna for(L=0;L< tamanhoLinha;L++) .2.2 for(c=0;c< tamanhoColuna;c++) mat[L][c]; somaColuna[c]+= na sozinha 9.1.4.2.3 Imprimindo a matriz somaColu for(c=0;c< tamanhoColuna;c++) cout<<somaColuna[c]<<"\t"; cout<<endl; Algoritmos – Prof. Anita Lopes 45 atriz original matriz \n"; for(L=0;L< tamanhoLinha;L++) { for(c=0;c< tamanhoColuna;c++) hoColuna;c++) 9.1.4.2.4 Imprimindo a matriz somaColuna com a m system("cls"); cout<<"\nMa riz Original com t SomaColuna\n cout<<matOriginal[L][c]<<"\t"; cout<<"\n"; } for(c=0;c< taman cout<<somaColuna[c]<<"\t"; cout<<"\n"; 9.1.5 Operaçõe Em relação às matrizes numéricas, podemos realizar todas as operações que já conhecemos com matrizes: produto escalar, soma, subtração, multiplicação por escalar, mul plicação de matrizes, cálculo do determinante, etc. 9.2 O uso e estruturas heterogêneas, o tão conhecido struct, será visto mais adiante. Este tipo de estrutura não faz parte do nosso estudo, mas tenha certeza de que você vai gos s ti Estruturas heterogêneas d tar de conhecê-la. Algoritmos – Prof. Anita Lopes 46 10 Funçõ 10.1 Conceito Função é u s específicos. Um progra ormado por várias funções. 10.2 Vantagen As fu es at dos parâmetros e através do seu nome permitem que sejam retornados valores à rotina chamadora e desta forma esses valores poderão ser im ídos a uma variável ou podem servir em operações aritméticas entre outras. O legibilidade do programa uma vez que a função main ficará menor; • Possibilidade de testar os trechos em separados; • Permitir que o programador construa sua própria biblioteca de funções, tornando ficiente uma vez que poderá fazer uso de funções por ele escritas em vários outros programas com a vantagem de já terem sido testadas; 10.3. Funções Pré-definidas O conjunto de funções pré-definidas é muito extenso e aqui vamos estudar algumas funções das bibliotecas: cmath, cstring, cctype, cstdlib, etc. Quando estudamos uma função, temos vários parâmetros a observar. Veja, por exemplo a seguinte função pré-definida da biblioteca cmath: double sqrt(double x) Este é o protótipo da função, isto é, informações sobre o tipo de retorno da função e tipos dos parâmetros. Esta função retorna um valor double, seu nome é sqrt e o tipo da variável que recebe o valor passado é double. Quando você criar suas funções, elas precisarão ter uma declaração semelhante a esta. As funções que você criar poderão ser localizadas antes da função principal(main) ou es m trecho de programa com objetivo ma escrito em linguagem C++ poderá ser f s nçõ ravés da passagem pressos ou atribu s principais objetivos de uma função são: • Evitar que uma seqüência de comandos se repita em várias partes de um programa ; • Dividir o programa em partes menores(modularizar), aumentando a sua programação mais e Tudo isto justifica o uso de funções em nossos programas Algoritmos – Prof. Anita Lopes 47 uma função for declarada antes, o protótipo da função não precisará ser declarado na função main, mas se declarada depois, o protótipo precisará ser declarado na D ) depois. Se função main. eclaração de uma função: tipo identificador (lista de parâmetros int, float, char, void Nome da função ( tipo1 nome1, tipo2 nome2 ) Exemplos: int quadrado(int l) char maiuscula(char n[] ) Calma! Você vai começar a Muito difícil. Não enetendi nada! usar as funções que já estão prontas. 10.3 Bi #i #i #d using namespace std; int main() { cout<<"\nFUNCOES NUMERICAS\n"; cout<<"\nDigite numero real: "; f; <<fabs(f); "\nCEIL: "<<ceil(f); cout<<"\nPotencia de 2 elevado a 3: " cout<<"\nLogaritmo de8 na og(8.0); cout<<"\nLogaritmo de 8 na base 10: "<<log10(8.0); .1 Funções Numéricas blioteca: cmath nclude <iostream> nclude <cmath> efine PI (3.14159265) float f; cin>>f; cout<<"\nNumero: "<< cout<<"\nABSOLUTO: " cout<< cout<<"\nFLOOR: "<<floor(f); cout<<"\nFMOD: "<<fmod(f,3); cout<<"\nSQRT: "<<sqrt(f+0.5); cout<<"\nSeno de 30: "<<sin(30*PI/180); cout<<"\nCo-seno de 30: "<<cos(30*PI/180); cout<<"\nTangente de 30: "<<tan(30*PI/180); <<pow(2.0,3.0); base neperiana: "<<l cout<<"\nLogaritmo 8 na base 2: "<<log(8.0)/log(2.0); cout<<"\nRaiz cubica de 8: "<<exp(1./3*log(8.0)); cout<<"\n\n"; system("pause"); } Algoritmos – Prof. Anita Lopes 48 10.3.2 Funções que Convertem strings em Números NCOES CHAR-NUMER0\n"; nteiro: "; "<<atoi(s)/2; (s)); Biblioteca: cstdlib #include <iostream> > #include <cstdlib using namespace std; int main() ]; { char s[30 cout<<"\nFU cout<<"\nDigite numero real: "; cin>>s; nDobro: "<<atof(s)*2; cout<<"\ cout<<"\nDigite numero i cin>>s; r 2: cout<<"\nNumero dividido po cout<<"\nABSOLUTO: "<<abs(atoi cout<<"\n\n"; system("pause"); } Algoritmos – Prof. Anita Lopes 49 10.3.3 Funções Strings Biblioteca: ctring, cctype #include <iostream> #include <cstring> #include <cctype> using namespace std; int main() {char c,s1[30],s2[30]; cout<<"\nBIBLIOTECA cctype\n"; cout<<"\nLetra: "; cin>>c; cin.get(); c=toupper(c); cout<<"Convertida para maiuscula: "<<c; c=tolower(c); cout<<"\nConvertida para minuscula: "<<c; cout<<"\n\nBIBLIOTECA cstring\n"; cout<<"\nDigite palavra: "; cin.getline(s1,30); strcat(s1,"FIM"); "\nConcatenacao da palavra digitada com FIM: "<<s1; "\nDigite palavra: "; cin.getline(s2,30); arando strings\n"; "Digite PAZ: "; cin.getline(s1,30); ; cin.getline(s2,30); rentes"; e(s1,30); (s2,30); cout<< cout<< strcpy(s1,s2); cout<<"\nApos copia de toda palavra2: "<<s1; o de s2: "<<strlen(s2); cout<<"\nTamanh cout<<"\n\nComp cout<< cout<<"Digite PAZ: " 0) if(strcmp(s1,s2)== cout<<"\nIGUAIS"; else cout<<"\nDife cout<<"\nDigite PAZ: "; cin.getlin ne cout<<"Digite AMOR: "; cin.getli p(s1,s2)!=0) if(strcm cout<<"\nDIFERENTES"; else \nIguais"; cout<<" cout<<"\n\n"; system("pause"); } Algoritmos – Prof. Anita Lopes 50 1 dor e um conteúdo que irá ser substituído toda vez que o id grama. a fu gens o uso de funções. riação de suas “funções”. E unciado deste programa. nclude <cmath> #define quadrado(x) ((x)*(x)) #define pi (3.14159265) #define NP (2.71828182846) #define conv(x) ((x)*(pi)/(180)) using namespace std; int main() { cout<<"\nnumero: 12" ; cout<<"\n\nquadrado= "<< quadrado(12); cout<<"\n\nangulo: 30"; cout<<"\n\nseno de 30 eh "<<sin(conv(30.0)); cout<<"\n\nneperiano:"<<NP ; cout<<"\n\n" ; system("pause"); } 0.4. Diretiva #define Define um identif dor aparecer em um pro ica entifica Esta diretiva pode ser associada a uma string ou a uma macro semelhante a um nção. ro for pequena, substitui com vantaSe o tamanho da mac Será seu primeiro contato com a c xemplo 1: Escreva o en #i #i nclude <iostream> Algoritmos – Prof. Anita Lopes 51 Exemplo 2: Escreva o enunciado deste programa. #include <iostream> #define AREA(b,h) (b*h) using namespace std; int main() { float base,alt; "\nBASE: " ; ; cout<<"\nAREA: "<<AREA(base,alt) ; c cout<< cin>>base ; cout<<"\nALTURA: " cin>>alt ; out<<"\n\n" ; system("pause"); } E nciado deste programa. lude <iostream> 1: " ; cout<<"\nCATETO 2: " ; cin>>cat2 ; cout<<"\nHIPOTENUSA: "<<HIPO(cat1,cat2); cout<<"\n\n" ; xemplo 3: Escreva o enu #inc #include <cmath> #define HIPO(c1,c2) (sqrt(c1*c1+c2*c2)) using namespace std; int main() { float cat1,cat2; cout<<"\nCATETO cin>>cat1 ; Algoritmos – Prof. Anita Lopes 52 system("pause"); } Exemplo 4: Escreva o enunciado deste programa. og(b))) nte; nte); #include <iostream> #include <cmath> #define POT(b,e) (exp(e*l using namespace std; int main() { float base, expoe cout<<"\nBase: "; cin>>base ; cout<<"\nexpoente: "; e; cin>>expoent cout<<"\nPotencia: "<<POT(base,expoe cout<<"\n\n" ; system("pause"); } Algoritmos – Prof. Anita Lopes 53 1 o pré-definida Quando uma função pré-definida é chamada, o fluxo de controle é desviado para a função, no momento em que ela é ativada no na função que a chama. Em nosso estudo será sempre chamda da main(principal). Ao terminar a execução dos comandos da função, o fluxo de controle retorna ao ponto que foi ativada. 0.5 Chamada da funçã Algoritmos – Prof. Anita Lopes 54 3. EVARISTO, Jayme. Aprendendo a Programar em C. Rio de Janeiro: Book Express, 2001. 4. Kernighan, Brian W. Ritchie, Dennis M. C- A linguagem de Programação padrão ANSI . Rio de Janeiro , Campus , 2002 5. MIZRAHI, V.V. Treinamento dem liguagem C – Curso completo.Módulos 1 e 2. São Paulo: Mc Graw Hill, 1990 6. MRALES,Celso R. Estruturas de daos e Algoritmos. São Paulo: Berkley,2001. 7. SCHILDT, Herbert. C completo e total. Makron Book 8. UFMG. Apostila de C. . UNIVERSIDADE DE CAXIAS DO SUL. Apostila de C. 0. PROF. SILVIO – Anotações. ni.faj.br/nourau/document/get.php/2934/aula8.pdf Bibliografia: 1. LOPES, Anita, GARCIA, Guto. Introudção à Programação- 500 Algoritmos. 6a ed.Rio de Janeiro: Campus, 2002. 2. LOPO,Erik de Castro, JONES Bradlely, AIKTEN Peter. C for Linux Programming .SAMS 9 1 FUNDAMENTOS DA LINGUAGEM C++ 1 A linguagem C++ Converte para maiúscula ou para minúscula uma letra Funções de arredondamento para inteiro Funções: potência e raiz quadrada Converte para inteiro, se possível, um vetor de char Converte para real, se possível, um vetor de char Fornece o número de caracteres de uma string Compara duas strings Caracter de Controle scanf Não gosta de usar system(“pause”); ? Veja o exemplo abaixo: Operador Operação Atribuição Aritmética Instrução Equivalente cont += 1; j -= i ; num *= k; divide /= 5; resto %= 2; cont = cont + 1; Instrução Equivalente ++ var; var ++ ; -- var ; var -- ; var = var + 1; Significado Você conhece C++? Já foi difícil o tal de if... else if e agora aparece mais esta para complicar? Calma! É para facilitar. Vou poder usar sempre? Não! Veja as “regras” abixo. Por que usar break? Leia o parágrafo abaixo e veja o exemplo. Entendi: quando comparou o mês com o rótulo e achou, daí em diante executou todos os comandos. Você está ficando ótimo! Então o break; será sempre obrigatório. Errado! Veja o exemplo abaixo. Três são as estruturas de repetição disponíveis na linguagem C++: for, while e do ... while. Em todas as estruturas estará presente pelo menos uma expressão para controlar a repetição. 8.1 Estrutura de repetição: for Expressão Expressão Regras para se usar um acumulador Estranho. Igual à solução do exemplo 2 da estrutura while. É porque as duas simularam a estrutura do for. Agora você inventa um tal de endl. Eu ainda nem entendi por que dois cin.get(). Leia as notas abaixo. 9 Estruturas Muito difícil. Não enetendi nada! Calma! Você vai começar a usar as funções que já estão prontas. 10.3.1 Funções Numéricas 10.3.2 Funções que Convertem strings em Números 10.3.3 Funções Strings
Compartilhar