


































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Programação em C básica
Tipologia: Notas de estudo
1 / 42
Esta página não é visível na pré-visualização
Não perca as partes importantes!



































Introdução à Lógica de Programação
A lógica de programação é necessária para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a seqüência lógica para o desenvolvimento.Então o que é lógica? Lógica de programação é a técnica de encadear pensamentos para atingir determinado objetivo.
Seqüência Lógica:
Estes pensamentos podem ser descritos como uma seqüência de instruções, que devem ser seguidas para se cumprir uma determinada tarefa. Seqüência Lógica são passos executados até atingir um objetivo ou solução de um problema.
Instruções:
Na linguagem comum, entende-se por instruções “um conjunto de regras ou normas definidas para a realização ou emprego de algo”. Em informática, porém, instrução é a informação que indica a um computador uma ação elementar a executar.Convém ressaltar que uma ordem isolada não permite realizar o processo completo, para isso é necessário um conjunto de instruções colocadas em ordem seqüencial lógica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prática uma série de instruções: descascar as batatas, bater os ovos, fritar as batatas, etc... É evidente que essas instruções tem que ser executadas em uma ordem adequada – não se pode descascar as batatas depois de fritá-las. Dessa maneira, uma instrução tomada em separado não tem muito sentido para obtermos o resultado, precisamos colocar em prática o conjunto de todas as instruções, na ordem correta. Instruções são um conjunto de regras ou normas definidas para a realização ou emprego de algo. Em informática, é o que indica a um computador uma ação elementar a executar.
Compiladores
Um compilador é um programa de sistema que traduz um programa descrito em uma linguagem de alto nível para um programa equivalente em código de máquina para um processador. Em geral, um compilador não produz diretamente o código de máquina, mas sim um programa em linguagem simbólica (assembly) semanticamente equivalente ao programa em linguagem de alto nível. O programa em linguagem simbólica é então traduzido para o programa em linguagem de máquina através de montadores. Para desempenhar suas tarefas, um compilador deve executar dois tipos de atividade. A primeira atividade é a análise do código fonte, onde a estrutura e significado do programa de alto nível são reconhecidos. A segunda atividade é a síntese do programa equivalente em linguagem simbólica. Embora conceitualmente seja possível executar toda a análise e apenas então iniciar a síntese, em geral estas duas atividades ocorrem praticamente em paralelo. Para apresentar um exemplo das atividades que um compilador deve desempenhar, considere o seguinte trecho de um programa em C:
main() { int a, b, valor; a=10; b=20; Valor = a*(b+20); cout<<valor<<endl; getch(); }
Para o compilador, este segmento nada mais é do que uma seqüência de caracteres em um arquivo texto. O primeiro passo da análise é reconhecer que agrupamentos de caracteres têm significado para o programa, por exemplo, saber que int é uma palavra-chave da linguagem e que a e b serão elementos individuais neste programa. Posteriormente, o compilador deve reconhecer que a seqüência int a ,corresponde a uma declaração de uma variável inteira cujo identificador recebeu o nome a. As regras de formação de elementos e frases válidas de uma linguagem são expressas na gramática da linguagem. O processo de reconhecer os comandos de uma gramática é conhecido como reconhecimento de sentenças.
Double O tipo de dado double serve para armazenar números de ponto flutuante de dupla precisão, normalmente tem o dobro do tamanho do float e portanto o dobro da capacidade. Exemplo de aplicação:
#include <iostream.h> #include <conio.h> main() {double a; a=5/3; cout<<a<<endl; return 0; getch() }
Já utilizando a variável double, teremos um número mais significativo de saída, no caso, 1, O Double é utilizado quando necessitamos de uma aproximação maior e mais exata do resultado O Double consome incríveis 8 bytes de memória para o seu armazenamento. Esse consumo é explicado pela alta precisão de seu número (cerca de 14 dígitos após a vírgula)
Char O tipo char ocupa 1 byte, e serve para armazenar caracteres ou inteiros. Isso significa que o programa reserva um espaço de 8 bits na memória RAM ou em registradores do processador para armazenar um valor (char de tamanho maior que 8 bits é permitido pela linguagem, mas os casos são raros. Exemplo de aplicação:
#include <iostream.h> #include <conio.h> main() {char nome[8]; cout<<"Digite seu nome: "; cin>>nome; cout<<"Seu nome e: "<< nome<<endl; return 0; getch(); }
No nosso exemplo, pode-se guardar uma string com até 20 caracteres de comprimento, caso exceda o número máximo de caracteres, ocasionará erro no compilador. Caso fosse declarado apenas “char nome”, a variável nome armazenaria apenas uma letra, por exemplo, se o usuário digitasse um nome com 7 letras, a variável apenas armazenaria a primeira letra digitada.
Struct Em C podem ser usadas estruturas (chamados de registros em outras linguagens de programação). As estruturas são grupos de variáveis organizadas arbitrariamente pelo programador. Exemplo de aplicação:
#include <stdio.h> #include <conio.h> struct pessoa; { unsigned short int idade; char nome[51]; /* vetor de 51 chars para o nome */ unsigned long int rg; }; /* estrutura declarada */ int main(void) { struct pessoa exemplo = {16, "Fulano", 123456789}; /* declaração de uma variável tipo struct pessoa */ printf("Idade: %hu \n ", exemplo.idade); printf("Nome: %s \n ", exemplo.nome); printf("RG: %lu \n ", exemplo.rg); return 0; getch(); }
Esta estrutura é composta por 3 elementos de tipos diferentes. Depois de ser declarada uma variável do tipo struct x, onde x é o nome da estrutura, para se acessar os diversos elementos deve-se fazer x.elemento.
Alguns Comandos Básicos
O trabalho com a entrada padrão no C++ é feito aplicando-se o operador sobrecarregado de extração (>>) no comando cin. Isso precisa ser seguido pela variável que irá guardar o dado que será lido Declarando a variável como desejada, então espera por uma entrada do cin (teclado) para que possa guardá-la em um espaço reservado da memória ROM. O comando cin só pode processar a entrada do teclado depois que a tecla ENTER for pressionada. Sendo assim, mesmo que você peça um único caractere, o cin não irá processar a entrada até que o usuário pressione ENTER depois que o caractere tenha sido digitado. Você precisa sempre considerar o tipo da variável que você está usando para guardar o valor extraído pelo cin. Se você pedir um inteiro, você receberá um inteiro, se você pedir um caractere, você receberá um caractere, e se você pedir uma string de caracteres, você receberá uma string de caracteres.
return;
A instrução return faz com que a função main() termine e retorne o código que segue a instrução, nesse caso o 0. Essa é a maneira mais comum de terminar um programa que não encontrou nenhum erro durante sua execução. Como você verá em exemplos seguintes, todos os programas em C++ terminam com um comando parecido com esse.
Exemplo de aplicação:
Desenvolva um algoritmo que receba a massa e o volume de uma amostra qualquer e calcule sua densidade.
Solução:
#include<iostream.h> #include<conio.h> float massa, vol, den; main{ cout<< “Digite a massa do material”<<endl; cin>>massa; cout<< “Digite a massa do material”<<endl; cin>>vol; den = massa/vol; // Aqui será calculado o valor da densidade cout<< “A densidade do material sera ”<<den<<endl; return 0; getch();} Observe que as estruturas utilizadas para a resolução desse programa já foram explicadas e detalhadas.
Observação importante:
Sendo assim, você deve ter notado que nem todas as linhas desse programa realizaram uma ação. Havia linhas contendo apenas comentários (aquelas iniciadas por //), linhas com instruções para o
pré-processador do compilador (aquelas iniciadas por #), também haviam linhas que iniciavam a declaração de uma função (nesse caso, a função main) e, finalmente linhas com instruções (como a chamada à cout <<), todas essas últimas foram incluídas dentro do bloco delimitado pelas chaves ({}) da função main O programa foi estruturado em linhas diferentes para que seja mais fácil lê-lo, mas isso não é obrigatório. Por exemplo, ao invés de:
#include <iostream.h> #include <conio.h> int main () { cout << " Exemplo "<<endl; return 0; getch();}
Poderíamos ter escrito: int main () { cout << " Exemplo"; return 0; } em apenas uma linha e isso teria exatamente o mesmo significado. Porém, as estruturas “#include <iostream.h>” e “#include <conio.h>” devem ser inseridas em linhas diferentes, pois o compilador não consegue diferencia-las quando essas estão inseridas na mesma linha.
Exercícios Propostos
Cálculo da média de quatro números inteiros dados.
Cálculo do quadrado de um número dado.
Cálculo da função f(x,y) = 2x+3y , com x e y sendo números reais dados.
Um bloco de concreto cai do topo de um prédio cuja altura é X metros acima do solo. Determinar o tempo de queda até o solo e a sua velocidade linear no instante em que atinge o solo. Despreze a resistência do ar e considere g=10 m/s 2. ( S=So+Vot+at 2 /2 V=Vo+at).
Determine a média final de um aluno, dados as notas das provas (P1, P2) e dos trabalhos (T1, T2) obedecendo ao seguinte critério: Média = 0.2(0,4T1+0,6T2)+0,4(0,4P1+0,6P2)
Um veterinário realizou uma compra para abastecer sua clínica. Os itens comprados e os respectivos valores das unidades são: X coleiras (XR), Y casinhas de cachorro (YR), M camas para gatos (MR), 26/3 de sacos de ração (S), V vacinas contra raiva (VR). Determine o custo total da compra.
Dado um número inteiro A de quatro dígitos, obtenha dois outros números B e C sendo B formado pelos dois primeiros dígitos de A e C pelos dois últimos dígitos. Ex: A= 3421 B=34 e C=
Dado um número inteiro A de três dígitos obtenha a soma destes dígitos Ex: A=872 soma=
Comentários no Programa
Comentários são pedaços de código-fonte descartados do código pelo compilador. Eles não fazem nada. O objetivo deles é somente permitir que o programador insira notas ou descrições dentro
É necessário para programar, ter conhecimento de constantes e operadores, e seu respectivo significado, praticamente todos os programas fazem uso deles. São indispensáveis para a criação de programas de forma rápida e mais eficiente.
Constantes de Barra Invertida
Código Significado \b Retrocesso (backspace) \f Alimentação de Formulário (form feed) \t Tabulação Horizontal (tab) \n Nova Linha \” Aspas \’ Apostrofo \0 Nulo \ Barra Invertida \a Sinal Sonoro (Beep) \N Constante Octal (N é o valor da constante) \xN Constante Hexadecimal (N é o valor da constante)
Operadores Aritméticos
Operador Ação
Operadores Relacionais
Operador Ação
Maior que = Maior que ou igual a < Menor que <= Menor que ou igual a == Igual a != Diferente de
Operadores lógicos
Operador Ação && AND || OR ! NOT
Operadores Lógicos Bit a Bit
Operador Ação & AND Lógico | OR Lógico ^ XOR (OR exclusivo) ~ NOT
Shift Rigth << Shift Left
Constantes e Variáveis
Restrições para a atribuições de variáveis
As constantes são valores que serão mantidos fixos pelo compilador O nome das variáveis deve começar com uma letra ou um sublinhado “_”. Os demais caracteres podem ser letras, números ou sublinhado. O nome da variável não pode ser igual a uma palavra reservada e aos nomes das funções. Tamanho máximo para o nome de uma variável é 32 caracteres.
Classificação de Constantes e Variáveis
Locais Podem ser usadas apenas na função onde foi declarada, sendo inutilizáveis para as demais funções.
Globais Podem ser usadas em qualquer lugar do programa
Modificador const
A linguagem C++ introduz um novo modificador chamado const , que tem comportamento variado dependendo do local onde está sendo declarado. Sua função, basicamente, é estabelecer um vínculo entre declaração e obrigatoriedade da coerência no uso do símbolo declarado. A princípio, quando declaramos uma constante com este modificador fazemos com que seja obrigatório o uso do símbolo de forma que o mesmo não possa ter seu valor alterado. Assim, se fizermos:
const int x = 4 ;
O inteiro x não poderá deixar de ter valor igual a 4. Qualquer tentativa de modificar o valor da constante ao longo do programa será reportada como erro pelo compilador.
O comando Include e as Bibliotecas
Existem vários processos em um algoritmo que podemos simplesmente determinar como operações matemáticas ou cálculos sendo executados pelo nosso programa. Levando para a questão realmente matemática, em C++ existe uma biblioteca própria para cálculos matemáticos um pouco mais complexos, a biblioteca ao qual nos referimos é a < math.h> Com a biblioteca <math.h> podemos encontrar facilmente funções para calcular potências, raíz quadrada, funções trigonométricas para cálculos que envolvem seno, co-seno e tangente, além de constantes para números irracionais como, por exemplo, PI (Π) e √2.
Simbologia O que é Valor da constante no C++ e Número de Euler 2, log2 e Logaritmo de e na base 2 1, log10 e Logaritmo de e na base 10 0, Ln2 (x) Logaritmo neperiano binário 0, Ln10 (x) Logaritmo neperiano ou natural 2, Π Pi 3, Π/2 Meio Pi 1, Π/4 Quarto de Pi 0, √ 2 Raiz quadrada de 2 1, √½ Raiz quadrada de meio 0,
Como podemos ver, todas as constantes são valores do tipo double. E isso se reflete nas funções.
Trigonométricas
sin () : Retorna o valor do seno. Recebe como argumento o valor dos graus em double. cos () : Retorna o valor do co-seno. Recebe como argumento o valor dos graus em double. tan () : Retorna o valor da tangente. Recebe como argumento o valor dos graus em double.
Logarítmicas
log () : Retorna o valor do logaritmo na base 2. Exige um argumento do tipo double. log10 () : Retorna o valor do logaritmo na base 10. Exige um argumento do tipo double.
Potências
pow () : Retorna o valor da base elevada ao expoente. Recebe dois argumentos do tipo double, o primeiro é a base e o segundo o expoente. Por exemplo: se quisermos saber o resultado da operação 2^10 , faríamos pow (2, 10). sqrt () : Retorna o valor da raiz quadrada. Recebe como argumento um double do qual ele deve extrair a raiz.
Controle de Fluxo de Execução – Decisão
Os métodos de tomada de decisão no C++, estão presentes para as tarefas mais corriqueiras que o programa deve executar. Além desta forma de controle de decisões, C++ provê certas
funcionalidades relacionadas a objetos que modificam a forma como o código é estruturado e, por consequência, decidem como o programa deve se comportar em determinadas situações. Examinemos os métodos básicos e analisemos de forma simples as estruturas de decisão, para entender como isso poderá nos ajudar a tornar o código mais bem construído.
Estrutura IF/ELSE
Uma ação muito importante que o processador de qualquer computador executa, e que o torna diferente de qualquer outra máquina, é a tomada de decisão definindo o que é verdadeiro e o que é falso. Se quisermos fazer um bom programa, esse programa deve ser capaz de definir caminhos diferentes de acordo com decisões que o próprio programa toma. Para isso, precisamos de uma estrutura seletiva da qual o único valor possível é o bit 1 ou 0, resumindo: retornar o valor VERDADEIRO ou FALSO. Em C / C++, como em muitas linguagens de programação, quem faz isso é o “if” , ou seja, se for tal coisa, faça isso! Simples desse jeito. O ELSE é o que chamamos de caso contrário, ou seja, se for falso execute o que está no ELSE. Exemplificando: Se (IF) for tal coisa, faça isso! Caso contrário (ELSE), faça aquilo, com essa idéia, selecionaremos apenas uma ação ou um único conjunto de ações, não podendo realizar 2 condições diferentes.
1 condição:
if (condição) {declaração}
2 condições:
if (condição) {declaração 1;} else {declaração 2;}
3 condições:
if (condição 1) {declaração1;} else if (condição 2) {declaração 2} else {declaração 3;}
N condições:
if (condição 1) {declaração1;} else if (condição 2) {declaração 2} else if (condição 3) {declaração 3}
#include<iostream.h> #include<conio.h> main() { float a,b; cout<<"digite o primeiro numero"<<endl; cin>>a; cout<<"digite o segundo numero"<<endl; cin>>b; if (b==a) {cout<<"Os números digitados sao iguais"<<endl;} else {cout<<"Os números digitados sao diferentes"<<endl;} getch(); }
#include<iostream.h> #include<conio.h> main() { float a; cout<<"digite o numero"<<endl; cin>>a; if (a==0) {cout<<"O número digitado e nulo"<<endl;} else if (a>0) {cout<<"O número digitado e positivo"<<endl;} else {cout<<"O número digitado e negativo"<<endl;} getch(); }
#include<iostream.h> #include<conio.h> #include <math.h> main() {int n; cout<<"digite o numero"<<endl; cin>>n; if (n%2==0) { if (n==0)
{cout<<" nulo "<<endl;} else {cout<<" par "<<endl;} } else {cout<<"impar"<<endl;} getch();}
Observação : Note atentamente a hierarquia das estruturas do terceiro exemplo.
#include<iostream.h> #include<conio.h> #include<math.h> main() {float n,a; cout<<"digite um numero"<<endl; cin>>n; a= pow (n,0.5); cout<<“A raiz de ”<<n<<“ é ”<<a<<endl; getch(); }
Observe que o comando pow serve para realizar operações com exponenciais. No nosso caso: a = pow(n,0.5), estamos atribuindo à variável a, a seguinte expressão exponencial n elevado a 0.5. De forma genérica, no comando pow (A,B), teremos a função exponencial, onde A é a base e B o expoente.
Exercícios Propostos
Dados três valores distintos, colocá-los em ordem decrescente.
Fazer um algoritmo para resolver o seguinte problema: calcular a soma dos dígitos de um número inteiro de quatro dígitos.Caso o número de entrada não possuir 4 dígitos, reportar erro ao usuário.
Dados os coeficientes de uma equação do segundo grau, verificar se a mesma possui raízes reais, (iguais ou diferentes). Escreva os valores das raízes. Se as raízes não forem reais emitir uma mensagem informando o fato.
O número 3025 tem a seguinte característica: 30+25=55 => 55*55=3025. Fazer um algoritmo que lê um número inteiro de quatro algarismos e testa se ele tem ou não a característica do 3025.
Dados três valores distintos, colocá-los em ordem crescente, decrescente e calcular o valor médio dos mesmos.
Dada a função f (x) a seguir, faça um programa que calcule f (x) para qualquer valor de x: