Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Apostila-C -Básico2, Notas de estudo de Informática

Programação em C básica

Tipologia: Notas de estudo

2015

Compartilhado em 24/02/2015

bruno-baka-8
bruno-baka-8 🇧🇷

1 documento

1 / 42

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Departamento de Matemática
Introdução à Ciência da Computação
Curso de
C++ Básico
Discente: Leonardo Ito Perillo
Curso: Engenharia Elétrica
Orientador: Prof. Dr. Anirio Salles Filho
Ilha Solteira, 30 de Julho de 2010.
UNIVERSIDADE ESTADUAL PAULISTA
“JÚLIO DE MESQUITA FILHO”
FACULDADE DE ENGENHARIA
DE ILHA SOLTEIRA
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a

Pré-visualização parcial do texto

Baixe Apostila-C -Básico2 e outras Notas de estudo em PDF para Informática, somente na Docsity!

Departamento de Matemática

Introdução à Ciência da Computação

Curso de C++ Básico

Discente: Leonardo Ito Perillo

Curso: Engenharia Elétrica

Orientador: Prof. Dr. Anirio Salles Filho

Ilha Solteira, 30 de Julho de 2010.

UNIVERSIDADE ESTADUAL PAULISTA

“JÚLIO DE MESQUITA FILHO”

FACULDADE DE ENGENHARIA

DE ILHA SOLTEIRA

Sumário

  • Uma Breve História do C++
  • Introdução à Lógica de Programação
  • Compiladores
  • Tipos de Variáveis
  • Alguns Comandos Básicos
  • Comentários no Programa
  • Operadores
  • Constante e Variáveis
  • O comando Include e as Bibliotecas
  • Biblioteca <Math.h>
  • Controle de Fluxo de Execução - Decisão
  • Controle de Fluxo de Execução - Repetição
  • Arrays Unidimensionais – Vetores

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

  1. Cálculo da média de quatro números inteiros dados.

  2. Cálculo do quadrado de um número dado.

  3. Cálculo da função f(x,y) = 2x+3y , com x e y sendo números reais dados.

  4. 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).

  5. 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)

  6. 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.

  7. 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=

  8. 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

  • Soma
  • Subtração ou troca de sinal
  • Multiplicação / Divisão % Resto da divisão inteira ++ Incremento -- Decremento

 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(); }

  1. Dado um número qualquer, determinar se este é neutro, positivo ou negativo. Solução:

#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(); }

  1. Elabore um programa que identifique se um número inteiro digitado é par, impar ou nulo Solução:

#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.

  1. Dado um número real qualquer, calcule sua raiz quadrada. Solução:

#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

  1. Dados três valores distintos, colocá-los em ordem decrescente.

  2. 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.

  3. 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.

  4. 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.

  5. Dados três valores distintos, colocá-los em ordem crescente, decrescente e calcular o valor médio dos mesmos.

  6. Dada a função f (x) a seguir, faça um programa que calcule f (x) para qualquer valor de x:

x^2 – 2 se x <-