tutorial linguagem c
Post on 08-Mar-2016
258 Views
Preview:
DESCRIPTION
TRANSCRIPT
FACULDADE DO ESPÍRITO SANTO
UNES
PROGRAMAÇÃO DE COMPUTADORES
DOUGLAS YEE
ELIZEU BAPTISTA
MARCOS RIBEIRO
THOMAS SOUZA
25 DE JUNHO DE 2012, CACHOEIRO DE ITAPEMIRIM, ES
ALGORÍTMO
Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas
cada uma das quais pode ser executada mecanicamente num período de tempo finito e com
uma quantidade de esforço finita.
O conceito de algoritmo é frequentemente ilustrado pelo exemplo de uma receita
culinária, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos
(fazer iterações) ou necessitar de decisões (tais como comparações ou lógica) até que a tarefa
seja completada. Um algoritmo corretamente executado não irá resolver um problema se
estiver implementado incorretamente ou se não for apropriado ao problema.
Um algoritmo não representa, necessariamente, um programa de computador, e sim
os passos necessários para realizar uma tarefa. Sua implementação pode ser feita por
um computador, por outro tipo de autômato ou mesmo por um ser humano. Diferentes
algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instruções em
mais ou menos tempo, espaço ou esforço do que outros. Tal diferença pode ser reflexo
da complexidade computacional aplicada, que depende de estruturas de dados adequadas ao
algoritmo.
Um programa de computador é essencialmente um algoritmo que diz
ao computador os passos específicos e em que ordem eles devem ser executados, como por
exemplo, os passos a serem tomados para calcular as notas que serão impressas nos boletins
dos alunos de uma escola. Logo, o algoritmo pode ser considerado uma sequência de
operações que podem ser simuladas por uma máquina de Turing completa.
Quando os procedimentos de um algoritmo envolvem o processamento de dados, a
informação é lida de uma fonte de entrada, processada e retornada sob novo valor após
processamento, o que geralmente é realizado com o auxílio de uma ou mais estrutura de
dados.
Para qualquer processo computacional, o algoritmo precisa estar rigorosamente
definido, especificando a maneira que ele se comportará em todas as circunstâncias. A
corretividade do algoritmo pode ser provada matematicamente, bem como a quantidade
assintótica de tempo e espaço (complexidade) necessários para a sua execução. Estes aspectos
dos algoritmos são alvo da análise de algoritmos.
A maneira mais simples de se pensar um algoritmo é por uma lista de procedimentos
bem definida, na qual as instruções são executadas passo a passo a partir do começo da lista,
uma idéia que pode ser facilmente visualizada através de umfluxograma. Tal formalização
adota as premissas da programação imperativa, que é uma forma mecânica para visualizar e
desenvolver um algoritmo. Concepções alternativas para algoritmos variam em programação
funcional e programação lógica.
Fluxograma, um exemplo de
algoritmo imperativo. O estado
em vermelho indica a entrada
do algoritmo enquanto os
estados em verde indicam as
possíveis saídas.
DIRETIVAS
As diretivas são os comandos utilizados pelo pré-processador, na qual o pré-
processador é um programa que examina e modifica o código-fonte antes da compilação.
Estes comando estarão disponíveis no código-fonte, mas não no código compilado.
As diretivas iniciam com # .
-Exemplo:
# include <stdio.h>
Essa diretiva permite inserir um arquivo qualquer no código-fonte.
COMANDOS DE LEITURA E ESCRITA
*ESCRITA
A função printf é uma das funções de entrada e saída que mostra na tela parâmetros que são
passados como argumento. Seu protótipo stá na biblioteca <stdio.h>.
-Exemplo:
Pintf ( “<expressão de controle>”, lista de argumento)
*LEITURA
A função scanf realiza a leitura de um texto a partir do teclado. Os paramentros são, uma
string, indicando os tipos das variáveis que serão lidos e o formato da leitura, e uma lista de
variáveis.
Ela aguarda que o usuário digite um valor e atribui o valor digitado a variável.
COMANDOS LÓGICOS
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 (SE traduzindo).
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!
Usando IF
Para usar o IF basta digitar entre parênteses o que deve ser comparado.
IMPORTANTE: IF é uma palavra reservada que não aceita ponto-e-vírgula (;) no final.
Se for verdadeiro, o programa executará a primeira linha logo abaixo do if.
Mas, e se quisermos executar várias linhas se if for verdadeiro?
Se o if tiver que executar várias linhas, todas as linhas que devem ser enquadradas dentro do
bloco de dados - as chaves ({}).
Usando ELSE
O ELSE só existe se tiver um IF. O else só será executado se o IF for falso.
Else executará só a primeira linha abaixo dele. Se o else tiver que executar várias linhas, vale a
mesma regra de if. Todas as linhas a ser executadas deverão estar contidas dentro do bloco de
dados ({}).
No exemplo abaixo está um exemplo de uso do if e else com apenas uma linha a ser
executada.
01.#include <cstdio>
02.#include <cstdlib>
03.
04.int main (void){
05.int nr;
06.printf ("Digite um numero:\n");
07.scanf ("%d", &nr);
08.getchar ();
09.if (nr>=0)
10.printf ("O numero digitado e positivo\n\n");
11.//se nr for maior ou igual a 0 o numero sera positivo
12.else
13.printf ("O numero digitado e negativo\n\n");
14.//caso contrario, ele sera negativo!
15.system ("pause");
16.}
COMANDOS DE REPTIÇÃO (LOOP)
*FOR
As estruturas de repetições são muito importantes para programas, pois muitas vezes
o mesmo procedimentos têm que ser executados mais de uma vez.
Em C/C++, basicamente existem três tipos de estrutura de repetição: FOR, WHILE e DO
WHILE. Nessa seção estudaremos o FOR.
O FOR como qualquer iteração* precisa de uma variável para controlar os loops
(voltas). Em for, essa variável deverá ser inicializada, indicada seu critério de execução, e forma
de incremento ou decremento. Ou seja, for precisa de três condições. Vale salientar que essas
condições são separadas por ponto-e-vírgula (;).
*ITERAÇÃO é sinônimo de repetição.
Como procedemos:
FOR (inicialização ; até quando irá ser executado ; incremento ou decremento).
No exemplo, faremos um programa que contará de 1 a 100. Você verá que é um
programa que faz algo muito simples, ele soma um a uma variável várias vezes. O x começa em
1, o loop só será executado enquanto x for menor ou igual a 100 e a cada loop será somado 1
a x. Veja:
//loop com FOR
02.#include <iostream>
03.#include <cstdlib>
04.using namespace std;
05.
06.int main (void){
07.int x;
08.for (x=1; x<=100; x++)
09./* inicialização: x começa em 1
10.critério: executar enquanto x for menor ou igual a 100
11.incremento (++) será somado 1 a x */
12.cout << x <<"\t"; system ("pause");
O FOR também segue a mesma regra de IF. Caso haja mais de uma linha a ser
executada pelo comando FOR, essas deverão estar agrupadas num bloco de dados ( { } ).
Este comando não se limita a operações com constantes, por exemplo: x=1, executar
enquanto x for menor ou igual a 100... Às vezes, o usuário pode entrar com dados para
controlar o loop. Veja:
No exemplo 1, a contagem começará a partir do número que o usuário digitar.
01.//exemplo 1
02.#include <iostream>
03.#include <cstdlib>
04.using namespace std;
05.
06.int main (void){
07.int x, user;
08.cout <<"Digite um numero menor que 100 para iniciar a contagem\n";
09.cin >> user;
10.cin.ignore ();
11.system ("cls"); // limpa a tela
12.for (x=user; x<=100; x++)
13.cout << x <<"\t";
14.system ("pause");
15.}
No exemplo 2, a contagem começará no 1 e terminará no número digitado pelo usuário.
01.//exemplo 2
02.#include <iostream>
03.#include <cstdlib>
04.using namespace std;
05.
06.int main (void){
07.int x, user;
08.cout <<"Digite um numero menor que 100 para iniciar a contagem\n";
09.cin >> user;
10.cin.ignore ();
11.system ("cls"); // limpa a tela
12.for (x=1; x<=user; x++)
13.cout << x <<"\t";
14.system ("pause");
15.}
*WHILE
Uma outra forma de iteração (repetição) em C/C++ é o WHILE. While executa uma comparação
com a variável. Se a comparação for verdadeira, ele executa o bloco de instruções ( { } ) ou
apenas a próxima linha de código logo abaixo.
Procedemos da seguinte maneira:
WHILE (comparação)
Veja o exemplo abaixo.
01.#include <iostream>
02.#include <cstdlib>
03.using namespace std;
04.
05.int main (void){
06.int par=0;
07.cout <<"Os numeros pares de 0 a 100 sao:\n\n";
08.while (par<=100)
09.{
10.cout <<par<<"\t";
11.par+=2; //o mesmo que par=par+2
12.}
13.system ("pause");
14.return 0;
15.}
Neste exemplo serão mostrados os números pares entre 0 e 100.
Algumas precauções
O WHILE muitas vezes pode nos pregar peças. Se prestarmos atenção, no exemplo
acima inicializamos a variávelpar em 0, pois quando usamos no while uma variável sem
inicializa-la pode causar comportamentos estranhos. E por que isso acontece? É simples. C/C++
não inicializa variáveis automaticamente em 0, ou seja, se você comparar uma variável não
inicializada, essa variável pode ser qualquer coisa, ex.: 1557745, -9524778, 1 ou até mesmo 0.
Outro problema comum com o while é o loop infinito. O WHILE, diferentemente de
FOR, não incrementa ou decrementa automaticamente uma variável, isso deve estar
expressado dentro do bloco de instruções, como podemos ver na linha par+=2. Caso
contrário, par sempre seria zero e nunca chegaria a 100 para o loop parar, causando o loop
infinito.
O ideal é utilizar o WHILE em um loop definido pelo usuário, que a partir de uma
entrada ele termine. Ou seja, enquanto o usuário não fizer determinada ação, o loop
continuará a dar voltas. Como no exemplo abaixo.
01.#include <iostream>
02.#include <cstdlib>
03.using namespace std;
04.
05.int main (void){
06.int nr=1;
07.while (nr!=0) //enquanto nr for diferente de 0
08.{
09.cout <<"Digite um numero (0 para finalizar): ";
10.cin >> nr;
11.cin.ignore ();
12.if (nr>0)
13.cout <<"Este numero e positivo\n";
14.else
15.cout <<"Este numero e negativo\n";
16.}
17.return 0;
18.}
No exemplo, o programa só irá parar quando o usuário digitar 0, qualquer outro
número fará com que o programa continue dando loop. Perceba que a variável ainda está
sendo inicializada.
MATRIZ – VETORES
As matrizes em geral são caracterizadas por se tratarem de uma única variável de um
determinado tamanho que guarda varias informações do mesmo tipo. Essas informações são
gravadas na memória seqüencialmente e são referenciadas através de índices. As matrizes
podem ser tanto unidimensionais (vetores) como multidimensionais.
*MATRIZES UNIDIMENSIONAIS
São matrizes de uma única dimensão. Essas matrizes também são chamadas de
vetores. A declaração de vetores em C deve obedecer a seguinte sintaxe:
Tipo nome_vetor[tamanho];
O tipo deve ser especificado conforme a tabela 2 do primeiro artigo. E o tamanho
representa a quantidade de elementos que esta matriz irá conter. É importante dizer que na
linguagem c as matrizes começam pelo índice 0 que guarda o primeiro elemento da matriz.
Para entender melhor, considere que seja necessário declarar um vetor do tipo inteiro que
contenha 10 elementos. Isto é feito da seguinte forma:
int vetor_exemplo[9];
Isso por que a matriz “vetor_exemplo” vai de 0 a 9, ou seja, contém 10 elementos.
Também é possível inicializar o vetor no momento de sua declaração. Para isso veja a sintaxe
abaixo:
Tipo nome_vetor[tamanho]={lista_de_valores};
Sendo que todos os elementos da lista de valores devem ser separados por virgula e serem
todas do mesmo tipo de dados especificado. A seguir temos a declaração do “vetor_exemplo”
com os valores atribuídos.
int vetor_exemplo[9]={0,1,2,3,4,5,6,7,8,9};
Exemplo de um programa completo utilizando vetores e outros conceitos estudados até o
momento.
#include<stdio.h>
void main()
{
int vet1[5]={1,2,3,4,5}; /*declaração e inicialização do vetor vet1*/
int vet2[5]={6,1,2,2,5}; /*declaração e inicialização do vetor vet2*/
int vetSoma[5]; /*declaração do vetor vetSoma que vai guardar o resutado da soma dos dois
vetores(vet1 e vet2).*/
int x;
printf("Este programa soma os dois vetores abaixo:\n");
printf("vet1={1,2,3,4,5}\n");
printf("vet2={6,1,2,2,5}\n");
printf("\n");
printf("vetor resultante da soma:\n");
for(x=0; x<5; x++)
{
vetSoma[x]=vet1[x]+vet2[x]; /*soma os valores*/
printf("vetSoma[%d]:%d\n",x,vetSoma[x]); /*exibe na tela*/
} /*fim do for*/
} /*fim do programa*/
O programa acima soma dois vetores (vet1 e vet2) e exibe sua resposta na tela. O objetivo
deste exemplo é mostrar como declarar e inicializar um vetor. Veja a seguir a saída do
programa:
Este programa soma os dois vetores abaixo:
vet1={1,2,3,4,5}
vet2={6,1,2,2,5}
vetor resultante da soma:
vetSoma[0]:7
vetSoma[1]:3
vetSoma[2]:5
vetSoma[3]:6
vetSoma[4]:10
Os vetores são muito usados para criar uma string de caracteres, pois em C não existe nenhum
tipo de dados para definir uma string.A declaração de um vetor contendo uma string sempre
deve ser maior que o número de caracteres, pois o compilador acrescenta automaticamente
no final da string um espaço nulo que indica o seu término. Este segundo exemplo é muito
simples, mostra apenas como podem ser feitas a declaração e inicialização de um vetor de
string.
#include<stdio.h>
void main()
{
char c1 = 'a';
char vet1[30]="Aprendendo a mexer com string\n";
/*Imprimindo os dados na tela*/
printf("O tipo de dado char guarda apenas um caractere\n");
printf("A variavel c1 do tipo char contem o caractere: %c\n",c1);
printf("\n");
printf("Para trabalhar com uma string deve ser declarado um vetor do tipo char");
printf("\nO vetor do tipo char contem a string: %s",vet1);
} /*fim do programa*
top related