Sunteți pe pagina 1din 31

Lógica de Programação

A forma mais simples para se começar a trabalhar com linguagem de


programação, seja ela C ou qualquer outra, é treinar lógica de programação, que nada
mais é do que definir todos os passos para a execução de uma tarefa antes de se iniciar a
programação propriamente dita.

As formas tradicionais de se desenvolver esta competência são por meio de


“Algoritmos” e de “Fluxogramas”.

Algoritmos

É uma sequência de passos claros e objetivos que levam a execução de uma tarefa.

Exemplo:

“Ir para a escola”

1. Colocar uniforme;

2. Preparar o material;

3. Dirigir-se à escola;

4. Entrar na escola;

5. Aguardar o sinal;

6. Entrar na sala de aula.

OBS: Um algoritmo deve ser independente de qualquer linguagem de programação.

Regras para a construção de um algoritmo:

- Usar somente um verbo por frase;

- Imaginar que está desenvolvendo um algoritmo para pessoas que não trabalham com
informática;

- Usar frases curtas e simples;

- Ser objetivo;

Fases de um algoritmo:

Um algoritmo, assim como na programação, deve ser dividido em três fases:

 Entrada: São os dados de entrada do algoritmo;


 Processamento: Procedimentos utilizados para chegar ao resultado final;
 Saída: São os dados já processados.

Prof. Rodrigo Rech


Lógica de Programação

Exemplo: Cálculo de média.

Deve ser calculada a média de quatro notas (P1, P2, P3, P4).

Fases:

1. Quais são os dados de entrada?


P1, P2, P3 e P4.
2. Qual o processamento que deve ser feito?
Realizar a soma dos números e dividir o resultado por quatro.
3. Quais serão os dados de saída?
Média final.

Algoritmo:

1. Receba a nota 1;
2. Receba a nota 2;
3. Receba a nota 3;
4. Receba a nota 4;
5. Some os valores das 4 notas;
6. Divida o resultado por 4;
7. Mostre o resultado da divisão.

Prof. Rodrigo Rech


Lógica de Programação

Fluxograma:

Outra forma de representar os passos lógicos para a execução de uma tarefa,


porém, agora é utilizada uma simbologia padronizada.

Os principais símbolos utilizados são:

Indica início ou o fim de um processamento

Processamento em geral

Estrutura condicional

Conector

Existem outros símbolos, porém utilizando apenas estes é possível representar


qualquer tipo de programa.

Exemplo: Cálculos da média.

Início

Receba nota 1

Receba nota 2

M = (N1 + N2)/2

Mostra o valor de M

Fim

Prof. Rodrigo Rech


Lógica de Programação

Exemplo: Utilização de uma condição.

Desenvolver um fluxograma que receba a nota de um aluno e avise caso tenha


sido aprovado, reprovado ou está em recuperação.

Condições: N>=6 – aprovado, N<4 – reprovado, N >=4 e N<6 – recuperação.

Início

Recebe a nota do
aluno

N >= 6

N<4

Reprovado Recuperação Aprovado

Fim

Prof. Rodrigo Rech


Lógica de Programação

Exercícios:

1- Desenvolva um algoritmo que some dois números e depois multiplique o


resultado pelo primeiro número;

2- Descreva com detalhes a sequência lógica para trocar um pneu de um carro;

3- Faça um algoritmo para trocar uma lâmpada. Descreva com detalhes;

4- Identifique os dados de entrada, processamento e saída no algoritmo abaixo:


 Receba código da peça;
 Receba valor da peça;
 Receba Quantidade de peças;
 Calcule o valor total da peça (Quantidade * Valor da peça);
 Mostre o código da peça e seu valor total.

5- Faça um algoritmo para calcular o estoque médio de uma peça, sendo que:
ESTOQUEMÉDIO= (QUANTIDADE MÍNIMA + QUANTIDADE MÁXIMA) /2;

6- Construa um fluxograma que:


 Leia a cotação do dólar;
 Leia um valor em dólares;
 Converta esse valor para Real;
 Mostre o resultado.

7- Desenvolva um fluxograma que:


 Leia quatro números;
 Calcule o quadrado para cada um;
 Somem todos e;
 Mostre o resultado.

8- Implemente o exemplo dado (Aprovado ou reprovado) com a comparação do


número de faltas. Caso ultrapasse 25 faltas o aluno fica reprovado independente
da nota.

Prof. Rodrigo Rech


Lógica de Programação

Introdução a linguagem C

A linguagem C nasceu na década de 70 como uma evolução da linguagem BCPL, e foi


criada por Dennis Ritchi. Essa linguagem foi rapidamente absorvida pelos programadores
e por isso, em 1989 foi criado um padrão para que todos a utilizassem da mesma forma.
Este é o padrão ANSI/ISO (American National Standarts Institute / International
Standarts Organization).

C é considerada uma linguagem de médio nível, ou seja, é feita para que o


programador tenha mais facilidade na interpretação de seus comandos, linguagens como
o Assembly é caracterizada como baixo nível, pois seus comandos são mais próximos à
linguagem da máquina e linguagens como BASIC, Pascal e FORTRAN são de alto nível,
ou seja, são ainda mais simples de interpretar do que a linguagem C.

Outra característica da linguagem C é pelo fato de ser uma linguagem estruturada,


que resumidamente é a capacidade de separar o código em sub-rotinas que podem ser
reutilizadas durante toda a programação, deixando o código mais enxuto e simples de se
efetuar manutenção.

Compiladores e interpretadores

Para o desenvolvimento de um programa em qualquer linguagem é necessário um


software para converter a linguagem de programação na linguagem da máquina, este
software pode ser um compilador ou um interpretador.

No caso da linguagem C é utilizado um compilador, que converte todo o código na


linguagem de máquina para depois executá-lo.

Já a linguagem BASIC utiliza um interpretador, que executa linha a linha do


programa desenvolvido.

Para que um compilador funcione corretamente são necessárias algumas extensões


específicas de arquivos:

Extensão Função
.c Código fonte do programa
.h Arquivo “header”, utilizado para armazenar os cabeçalhos das bibliotecas
.exe Arquivo compilado e pronto para ser executado

Prof. Rodrigo Rech


Lógica de Programação

Desenvolvimento de um código em linguagem C

A estrutura básica de um código de linguagem C é descrita abaixo:

1) INCLUSÃO DE ARQUIVOS EXTERNOS: É utilizado para utilizar funções


criadas fora de seu programa.

2) DECLARAÇÃO DE VARIÁVEIS GLOBAIS: São variáveis que podem


utilizadas em qualquer trecho do programa.

3) DECLARAÇÃO DE PROTÓTIPOS DE FUNÇÕES: Declarações das funções


criadas pelo programador.

4) FUNÇÃO PRINCIPAL (main): Função onde o programa começa a ser


executado.

5) FUNÇÕES: Funções criadas pelo programador.

Abaixo segue um programa simples que escreve um texto na tela:

/*Inclusão dos arquivos externos:*/


#include <stdio.h>
#include <stdlib.h>

/*Função principal*/
void main()
{
/*Função utilizada para escrever um texto na tela*/
/*Esta é uma função retirada da biblioteca “stdio.h”
declarada no início da programação.*/
printf("Este e um programa em linguagem C...");
}

Observe os textos que estão depois de “//” ou “/* */”, isso significa que ele não
será compilado, é apenas um COMENTÁRIO do seu programa.

Prof. Rodrigo Rech


Lógica de Programação

Tipos de dados

Os dados que serão utilizados durante o programa devem ser armazenados em


posições da memória do computador, mas para isso é necessário indicar ao compilador
qual é o tamanho ou tipo do dado que será armazenado naquela posição, por exemplo,
caso seja necessário armazenar uma letra deve-se utilizar a palavra char, caso seja um
número deve se utilizar a palavra int. Abaixo segue uma relação dos tipos de variáveis
que podem ser utilizadas na linguagem.

Tipo Tamanho em bits Faixa mínima


char 8 -127 a 127
unsigned char 8 0 a 255
signed char 8 -127 a 127
int 32 -2.147.483.647 a 2.147.483.647
unsigned int 32 0 a 4.294.967.295
signed int 32 -2.147.483.647 a 2.147.483.647
float 32 Seis dígitos de precisão
double 64 Dez dígitos de precisão

Quando são utilizadas as palavras signed e unsigned significa que a variável pode
ou não ser sinalizada.

Prof. Rodrigo Rech


Lógica de Programação

Declaração de variáveis

Para se utilizar as variáveis é necessário declará-las no início das funções com os


tipos apresentados anteriormente. Exemplo:

int i, j, l;

unsigned char letra;

Neste caso foram criadas as variáveis i, j e l com o tipo inteiro (int) e a variável
“letra” do tipo caractere (char).

Exemplo: Leitura de teclado.

O programa a seguir faz a leitura do teclado e armazena o valor digitado em uma


variável, para isso será utilizada a função scanf().

#include <stdio.h>
#include <stdlib.h>

void main()
{
unsigned char caractere;
unsigned int numero;

printf("Neste programa sera digitado um caracter e um numero


e eles serao armazenados em variaveis...\n");
//A utilização do \n é para pular de linha
printf("Digite um caracter qualquer: \n");
scanf("%c",&caractere);
/*O %c é utilizado para indicar para a função
que a variável que será recebida vai ser do tipo
char e o "&" é obrigatório*/
printf("\nDigite um numero qualquer: \n");
scanf("%d",&numero);
/*O %d é utilizado para indicar para a função que
a variável que será recebida vai ser do tipo int e
o "&" é obrigatório*/
printf("\nO numero digitado foi %d e o caractere %c",
numero, caractere);
/*Na função printf os itens %d e %c serão substituídos pelo
valor das variáveis que estão depois da vírgula*/
}

Prof. Rodrigo Rech


Lógica de Programação

Exercícios:

1. Qual o tipo de software que deve ser utilizado para o desenvolvimento de


programas?

2. Qual a função das bibliotecas utilizadas no início dos programas?

3. Qual a diferença entre caractere e número? É possível que o número 8 também


seja um caractere?

4. Pesquise sobre tabela ASCII e explique qual a sua função.

5. É necessário desenvolver um menu onde as opções são escolhidas por letras. Qual
o tipo de variável indicado para esta aplicação?

6. Para o desenvolvimento de um programa que realiza cálculos matemáticos, qual


o tipo de variável indicada para armazenar os números?

7. Desenvolva um programa que receba um número inteiro, uma letra e um número


de ponto flutuante e no final sejam apresentados na tela.
OBS: Desenvolva o fluxograma.

Prof. Rodrigo Rech


Lógica de Programação

Operadores Aritméticos

As funções aritméticas simples já são nativas da linguagem, ou seja, não é necessário


atribuir uma biblioteca para utilizá-las.

Operadores aritméticos:

São utilizados para efetuar os cálculos no programa, abaixo segue uma tabela com
os operadores aceitos na linguagem C:

Operador Ação
= Atribuição de valor em uma variável
- Subtração
+ Adição
* Multiplicação
/ Divisão
% Módulo da divisão (resto)
-- Decremento
++ Incremento

Prof. Rodrigo Rech


Lógica de Programação

Exemplo:

O programa a seguir realiza algumas operações aritméticas e apresenta o resultado


na tela.

#include <stdio.h>
#include <stdlib.h>

void main()
{
//Declaração das variáveis
float a=0, b=0, c=0, d=0, e=0, f=0, g=0;

printf("Este programa realizara algumas operacoes aritmeticas.\n");


printf("Digite um numero para a variavel A: ");
scanf("%f",&a);
printf("\nDigite um numero para a variavel B: ");
scanf("%f",&b);

//Cálculos
c = a+b;
d = a-b;
e = a*b;
f = a/b;
g = (int)a%2;
a++;
b--;

//Apresenta o resultado dos cálculos


printf("A + B = %f \n", c);
printf("A - B = %f \n", d);
printf("A * B = %f \n", e);
printf("A / B = %f \n", f);
printf("A %% 2 = %f \n", g);
printf("A ++ = %f \n", a);
printf("B -- = %f \n", b);
}

Prof. Rodrigo Rech


Lógica de Programação

Exercícios:

1. Utilizando o exemplo do cálculo de média do tópico anterior com fluxograma,


desenvolva um programa que receba quatro notas e calcule sua média aritmética.

2. Desenvolva um programa que calcule a área das seguintes formas geométricas:


OBS: Um programa para cada item.
a) Quadrado;
b) Retângulo;
c) Triângulo;
d) Círculo.

3. Receber uma temperatura em graus Celsius e convertê-la para Fahrenheit.

4. Ler dois valores numéricos inteiros e apresentar o resultado do quadrado da


diferença do primeiro valor em relação ao segundo valor.

5. Elaborar um programa que apresente o valor da conversão em real de um valor


lido em dólar. O programa deve solicitar o valor da cotação do dólar e também a
quantidade de dólares disponível com o usuário.

6. Elaborar um programa que leia dois valores inteiros, os quais devem representar
a base e o expoente de uma potência, calcule a potência e apresente o resultado
obtido.

7. Construir um programa que leia um valor numérico inteiro e apresente como


resultado os seus valores sucessor e antecessor.

Prof. Rodrigo Rech


Lógica de Programação

Estruturas condicionais

Como já visto no tópico de lógica de programação, muitas vezes é necessário


realizar condições para que determinadas tarefas sejam realizadas, normalmente essas
condições são feitas por meio de perguntas. O fluxograma abaixo apresenta a
representação de uma estrutura condicional:

Início

Falsa Condição Verdadeira

Ação da condição Ação da condição


falsa verdadeira

Fim

A condição dos comandos condicionais é dada por meio de operadores relacionais.

Operadores relacionais
Operador Ação
> Maior que
>= Maior que ou igual
< Menor que
<= Menor que ou igual
== Igual
!= Diferente
Operadores lógicos
Operador Ação
&& AND
|| OR
! NOT

Prof. Rodrigo Rech


Lógica de Programação

Comandos if() e else

O comando “if” é utilizado para verificar quando uma condição é denominada


verdadeira, executando assim uma ou mais funções. Caso a condição testada seja falsa o
bloco que será executado será o “else”.

if(condição) //se(condição) faça...


{
//ação a ser tomada
}
else //senão, faça...
{
//ação a ser tomada caso a condição do “if” seja falsa.
}

Uma condição dita como verdadeira em linguagem C pode ser dada de duas
formas:
- Por meio do resultado de uma operação relacional, por exemplo:
Se (5 > 3), neste caso o número 5 é maior do que 3, logo a condição é
verdadeira!
Se (a == b), agora é fácil de observar que as letras são diferentes, logo a
condição é falsa!
- Ou caso o valor colocado no comando for diferente de 0:
Se (10), aqui a condição é verdadeira, pois o valor utilizado no comando é
diferente de 0!
Se (0), agora a condição é falsa, pois o valor é igual a 0!

Prof. Rodrigo Rech


Lógica de Programação

Exemplo:

Utilizando o exemplo onde deve ser mostrado se um aluno foi aprovado ou


reprovado dependendo da sua nota o programa pode ficar da seguinte forma:

#include <stdio.h>
#include <stdlib.h>

void main()
{
float media_aluno=0;

printf("Digite a media do aluno: ");


scanf("%f",&media_aluno);

//Pergunta se o aluno foi aprovado


if(media_aluno >= 6.0)
{
printf("O aluno foi aprovado...");
}

// Se não foi...
else
{
//Pergunta se está de recuperação...
if(media_aluno >= 4 && media_aluno < 6)
{
printf("O aluno esta de recuperacao...");
}

// Se não está de recuperação...


else
{
printf("O aluno foi reprovado...");
}
}
}

Prof. Rodrigo Rech


Lógica de Programação

Comando switch()

Neste comando uma variável é testada e pode assumir várias condições diferentes,
não limitando somente para verdadeiro ou falso. É muito comum utilizá-lo em
aplicações onde existem diversas possibilidades diferentes para uma determinada
variável. A sintaxe da função é:

switch(variável)
{
case 0: {
//ações realizadas caso a variável seja 0
Break;
}

case 1: {
//ações realizadas caso a variável seja 1
Break;
}

Default: {
//ações realizadas caso a variável não seja nenhuma
//das opções.
Break;
}
}

Podem existir outros casos além destes seguindo a mesma sintaxe, e o valor da
variável não precisa ser sempre numérico, também podem assumir valores do tipo
caracteres, neste caso o valor teria que ter aspas simples, por exemplo:

case ‘a’:...
case ‘1’:...

Nestes dois exemplos os valores esperados são os caracteres “a” e “1”.

OBS: O comando “switch()” não aceita variáveis com ponto flutuante.

Prof. Rodrigo Rech


Lógica de Programação

Exemplo:

Abaixo será demonstrado um exemplo simples de aplicação do comando switch.

#include <stdio.h>
#include <stdlib.h>

void main()
{
//variável que receberá o valor testado pelo switch
int selecao=0;

printf("Digite um numero entre 0 e 5...\n");

scanf("%d", &selecao);

//Estrutura do comando switch


switch(selecao)
{
case 0: {
printf("\nVoce digitou o numero 0!");
break;
/*A função do break é de sair do comando
switch no momento que ele for executado*/
}

case 1: {

printf("\nVoce digitou o numero 1!");


break;
}

case 2: {
printf("\nVoce digitou o numero 2!");
break;
}

case 3: {
printf("\nVoce digitou o numero 3!");
break;
}

case 4: {
printf("\nVoce digitou o numero 4!");
break;
}

case 5: {
printf("\nVoce digitou o numero 5!");
break;
}

default: {
printf("Opcao incorreta!!!");
break;
}

}
}

Prof. Rodrigo Rech


Lógica de Programação

Exercícios:

1. Desenvolva um programa que leia dois números, identifique qual é o maior e


apresente na tela.

2. Crie um programa que leia três números e os organize de forma crescente,


mostrando o resultado na tela.

3. Fazer a leitura de um valor inteiro e apresentar uma mensagem indicando se é par


ou ímpar.

4. Desenvolva um programa que calcule a área do quadrado, triângulo e círculo,


porém no início do programa deve se escolher uma opção indicando qual será a
forma a ser calculada.

Prof. Rodrigo Rech


Lógica de Programação

Laços de repetição

São utilizados para criar blocos que serão repetidos no programa enquanto uma
condição, testada periodicamente pelo bloco do laço de repetição, é verdadeira. Quando
esta condição atingir um valor e for considerada falsa o programa para de executar o laço.

A representação de um laço em fluxograma se dá da seguinte maneira:

Início

Ação do laço

Verdadeira

Condição do
laço

Falsa

Fim

Laços de repetição condicionais:

Neste tipo de laço sua estrutura é repetida até que a condição atribuída pelo
programador seja verdadeira (diferente de zero). Os comandos destes laços são:

while(condição) //enquanto a condição for verdadeira faça...


{
//Ações do laço while...
}

E:

do //Faça...
{
//ações do laço do while...
}while(condição); //Enquanto essa condição for verdadeira

Na estrutura while(condição), o programa só será executado caso a condição seja


verdadeira, caso seja falso este trecho do programa não será executado.
Já utilizando o comando do{} while(), o teste condicional só será efetuado ao final
da primeira execução, ou seja, este trecho do programa será executado ao menos uma
vez.

Prof. Rodrigo Rech


Lógica de Programação

Exemplo:

Utilizando o comando while():

#include <stdio.h>
#include <stdlib.h>

void main()
{
unsigned int condicao=0;

printf("Digite 1 para executar o programa e 0 para nao executar...");


scanf("%d",&condicao);

//O laço só será executado se a variável condição for diferente de 0


while(condicao)
{
printf("\nVoce executou o laco while...");
}

//Caso seja 0, aparece a mensagem...


if(condicao == 0)
{
printf("Voce nao executou o laco while...");
}
}

Utilizando o comando do{} while():

#include <stdio.h>
#include <stdlib.h>

void main()
{
unsigned int condicao=0;

do
{
printf("Digite 1 para repetir programa e 0 para encerrar...");
scanf("%d",&condicao);
/*Testa se a condição é verdadeira, se for, repete o laço*/
}while(condicao);
}

Prof. Rodrigo Rech


Lógica de Programação

Laço “for”:

Caso exista a necessidade de se desenvolver um laço no qual o número de


repetições seja determinado, ou seja, o número de vezes que ele deve ser repetido é
conhecido, pode ser utilizado o laço for. A sintaxe do comando se dá da seguinte forma:

for(inicialização da variável ; condição ; ação tomada no fim do laço)

Onde: A inicialização da variável depende da aplicação e não é obrigatória, pois pode


acontecer dela já estar com o valor desejado no início do laço. Na condição são utilizados
os operadores relacionais já estudados no capítulo de estruturas condicionais, eles serão
responsáveis por manter o laço repetindo enquanto esta condição for verdadeira, e a ação
tomada no fim do laço determina o que ocorre com a variável utilizada no laço para que
o mesmo se mantenha na condição desejada.

Exemplo:

O exemplo abaixo demonstra a utilização de um laço em um pequeno contador.

#include <stdio.h>
#include <stdlib.h>

void main()
{
unsigned int contador;

/*Inicio do laço for, ele será executado o número


de vezes declarado na inicialização da variável.*/
for(contador=10; contador > 0; contador--)
{
printf("Esta frase ainda sera repetida %d vezes \n",
contador);
/*A função getch serve apenas para aguardar o
pressionamento de uma tecla...*/
getch();
}
}

Prof. Rodrigo Rech


Lógica de Programação

Exercícios:

1. Elaborar um programa que mostre os resultados da tabuada de um número


qualquer, a qual deve ser apresentada de acordo com sua forma tradicional.

2. Elaborar um programa que apresente os valores da sequência de Fibonacci até que


apareça o sexto termo.

3. Elaborar um programa que apresente os valores de conversão de graus Celsius em


graus Fahrenheit, de dez em dez graus, iniciando a contagem em dez graus Celsius
e finalizando em cem graus Celsius. O programa deve apresentar os valores das
duas temperaturas.

4. Elaborar um programa que leia valores positivos inteiros até que um valor
negativo seja informado. Ao final devem ser apresentados o menor e o maior valor
informado pelo usuário.

5. No menu criado no tópico anterior de cálculo de área, adicione um item que ao


ser pressionado finalize o programa, caso não seja, volte ao menu e calcule a área
de outra figura.

Prof. Rodrigo Rech


Lógica de Programação

Arrays (vetores e matrizes)

Imagine uma situação onde é necessária a implementação de uma agenda eletrônica para
efetuar o registro de pelo menos 100 números. Logo a primeira impressão seria de criar 100
variáveis, uma para cada número, o que de certa forma não está errado, porém se torna inviável
quando percebemos o tamanho que ficaria o código. Para contornar este problema foram criados
os arrays, ou melhor, os vetores e as matrizes.

Os arrays nada mais são do que um conjunto de variáveis de mesmo tipo agrupadas por
um mesmo nome, por exemplo: Para criar a agenda poderia ser criada a variável número contendo
100 posições.

Em linguagem C a criação seria da seguinte maneira:

Tipo nome [número de posições];


Unsigned int num_tel [100];

Onde o que está em negrito é o tipo da variável, “num_tel” é o nome dado àquele conjunto
de dados, e o número dentro dos colchetes é a quantidade de “variáveis” de mesmo tipo contido
em “num_tel”.

Os arrays podem assumir qualquer tipo de variável: char, int, float, double. O tipo
utilizado depende da aplicação onde será utilizada.

O exemplo acima foi de um array chamado vetor, ou matriz unidimensional, pois possui
apenas uma linha e várias colunas, nas quais essas colunas devem ser localizadas por meio de
seus índices.

OBS: Todo índice de vetor inicia sua contagem no 0!!! Portanto um vetor de 10 posições
terá da posição 0 até a posição 9:

Valor Valor_1 Valor_2 Valor_3 Valor_4 Valor_5 Valor_6 Valor_7 Valor_8 Valor_9 Valor_10
Índice 0 1 2 3 4 5 6 7 8 9

Os valores de um vetor podem ser inicializados junto com a variável ou durante o


programa. Caso seja inicializado no início do programa a sintaxe ficará da seguinte forma:

Unsigned int numero[5] = {0,1,2,3,4};

E durante o programa ele deverá ser iniciado item a item, da seguinte maneira:

Numero[0] = 0;
Numero[1] = 1;
Numero[2] = 2;
Numero[3] = 3;
Numero[4] = 4;

Os números dentro dos colchetes são os índices do vetor.

Prof. Rodrigo Rech


Lógica de Programação

Além dos vetores também podem ser construídas matrizes bidimensionais,


tridimensionais e outras, porém de todas elas a mais comum é a bidimensional. A seguir é
apresentada a sintaxe de uma matriz bidimensional:

Unsigned char nome_da_matriz [n_linhas] [n_colunas];


Unsigned char matriz_xy [3] [3];

O acesso aos seus dados é feito de forma semelhante aos vetores, e seus índices também
iniciam com 0. Abaixo é mostrado como fica organizada uma matriz 3x3:

Linha Coluna 0 1 2
0 Valor_00 Valor_01 Valor_02
1 Valor_10 Valor_11 Valor_12
2 Valor_20 Valor_21 Valor_22

Uma aplicação comum dos vetores é na declaração das strings, ou seja, uma cadeia de
caracteres que formam uma palavra ou uma frase.

O exemplo abaixo apresenta um programa de captura de string:

#include <stdio.h>
#include <stdlib.h>

void main()
{
/*O vetor criado é unidimensional, logo o
texto será limitado pelo laço for.*/
unsigned char nome[20];
unsigned char indice;

printf("este programa captura uma string.\n");

/*Laço responsável por capturar os caracteres e formar a string


a condição do laço for determina o tamanho máximo da string*/
for(indice=0;indice<5;indice++)
{
nome[indice] = getche();
//a função getche lê um caractere e não
//aguarda a tecla enter ser pressionada.

//Caso seja pressionado “enter” antes de


//terminar o for, o comando break finaliza o laço.
if(nome[indice] == 10) break;
}

//O formato %s imprime uma string dada por um vetor.


printf("\n\n%s",nome);
}

Prof. Rodrigo Rech


Lógica de Programação

Para preencher uma matriz com números deve ser utilizada a função scanf, como no
exemplo abaixo:

#include <stdio.h>
#include <stdlib.h>

void main()
{
unsigned int matriz[3][3];
unsigned char linha=0,coluna=0;

printf("este programa preenche uma matriz 3x3.\n");

//trecho utilizado para entrar com os valores da matriz


for(linha=0;linha<3;linha++)
{
printf("Digite os valores da linha %d separando-os com o
enter:\n", (linha+1));

for(coluna=0;coluna<3;coluna++)
{
scanf("%d",&matriz[linha][coluna]);
}
}

//trecho utilizado para apresentar a matriz na tela


for(linha=0;linha<3;linha++)
{
printf("\n");
for(coluna=0;coluna<3;coluna++)
{
printf("%d ",matriz[linha][coluna]);

}
}
}

Prof. Rodrigo Rech


Lógica de Programação

Exercícios:

1- Faça a leitura de 10 valores, armazene-os em um vetor e apresente sua média


aritmética;

2- Desenvolva um programa que leia dois vetores de 5 posições cada, efetue a


multiplicação entre os mesmos índices e armazene os resultados em um terceiro
vetor, apresentando-os na tela no final do programa.

3- Crie um programa onde um vetor já é inicializado com 5 caracteres, depois peça


para que o usuário digite outros 5 caracteres e armazene em um outro vetor. Caso
todos os caracteres forem iguais, apresenta uma mensagem de correto, caso
diferente, incorreto.

4- Escreva um algoritmo que leia e mostre um vetor de 10 números. A seguir, conte


quantos valores pares existem no vetor.

5- Escreva um algoritmo que leia 10 valores para um vetor de 10 posições. Mostre


depois somente os positivos.

6- Faça novamente a sequência de Fibonacci, porém agora utilize apenas um vetor


de 3 posições para o cálculo do resultado.

7- Desenvolva um programa que leia uma matriz 3x3 e calcule sua determinante.

8- Desenvolva uma matriz de 5x10 onde cada linha deverá ser digitado um nome de
até 10 caracteres.

Prof. Rodrigo Rech


Lógica de Programação

Criação de funções

Funções são sub-rotinas de um programa que executam determinadas tarefas e


podem ser chamadas sempre que necessário, alguns exemplos são as funções printf(),
scanf() e pow(), estas já criadas e utilizadas nos programas porque as bibliotecas que as
possuem já foram inseridas no cabeçalho.

A utilização das funções em um código auxilia na organização e otimização do


programa, já que tarefas que são repetidas no programa não precisam ser reescritas e sim
chamadas novamente.

Toda função criada pode receber ou retornar um valor da função principal, para
isso basta informar o tipo de dado que irá enviar, receber ou ambos. Abaixo é demonstrada
a sintaxe de criação de uma função:
Tipo_do_retorno nome_da_função (tipo_do_argumento)

OBS: Uma função pode receber quantos argumentos forem necessários, separados
por vírgula, porém pode retornar apenas uma variável.

Abaixo são mostradas as sintaxes para a criação de alguns tipos de funções:

Função que não envia e não recebe dado:


Void nome_da_função (void);

O tipo void significa vazio.

Função que retorna um valor do tipo inteiro positivo:


Unsigned int nome_da_função (void);

Função que recebe um ou mais argumentos e não retorna nenhum valor:


Void nome_da_função (tipo argumento 1, tipo argumento 2...);

Função que envia e recebe dados do tipo char:


Unsigned char nome_da_função (char arg1, char arg2);

As funções podem ser criadas diretamente no arquivo do projeto, junto da função


main, ou então em outros arquivos .c ou .h, porém na segunda opção é necessário
adicionar a biblioteca no cabeçalho do arquivo principal com a diretiva #include
“endereço do arquivo .h”, neste caso não foram utilizados os símbolos < e >, pois o
arquivo .h está em alguma pasta do computador e não é nativo do compilador.

Outro detalhe importante se dá pelo fato de ser necessário criar os protótipos das
funções, que nada mais são do que os nomes das funções com “ ; ” no final para indicar
ao compilador que aquela função existe naquele arquivo. Estes protótipos não precisam
ser adicionados caso as funções sejam criadas antes da função main.

Prof. Rodrigo Rech


Lógica de Programação

Como exemplo será criada uma função responsável por receber quatro argumentos
e retornar a média aritmética para o programa principal:
Float media(float valor_1, float valor_2, float valor_3, float valor_4)
{
Float resultado=0;
Resultado = (valor_1 + valor_2 + valor_3 + valor_4)/4;
Return resultado;
}

Caso seja necessário utilizar esta função na função principal (main), basta colocar
seu nome e os argumentos que serão utilizados:
void main()
{
Float nota_1, nota_2, nota_3, nota_4, media_final;

Media_final = Media(nota_1,nota_2,nota_3,nota_4);
}

Exemplo: Calculo de média:


#include <stdio.h>
#include <stdlib.h>

//Protótipo da função
//Pode ser eliminado caso a função seja criada antes da função main
float calcula_media(float nota_1, float nota_2, float nota_3, float
nota_4);

//--------------------------------------------------------------------
//Função principal
void main()
{
float nota[4], media;
unsigned int contador;

for(contador=0; contador<4; contador++)


{
printf("Digite a nota %d: ", contador+1);
scanf("%f",&nota[contador]);
}

media = calcula_media(nota[0],nota[1],nota[2],nota[3]);

printf("A media calculada foi: %.2f", media);


}

//--------------------------------------------------------------------
//Função criada para o calculo da média
float calcula_media(float nota_1, float nota_2, float nota_3, float
nota_4)
{
float resultado=0;

resultado = (nota_1+nota_2+nota_3+nota_4)/4;

return resultado;
}
//--------------------------------------------------------------------

Prof. Rodrigo Rech


Lógica de Programação

No exemplo acima a função foi criada no mesmo arquivo, por isso foi necessário
criar o protótipo antes da função main, e a função criada está localizada depois da função
main.

Caso seja necessário utilizar a mesma função criada em outros programas é


possível criar um arquivo de cabeçalho (header), contendo o protótipo e a função. O
exemplo abaixo mostra como fica o arquivo .h e em seguida o programa principal:

Arquivo header (.h):

//Protótipo da função
float calcula_media(float nota_1, float nota_2, float nota_3, float
nota_4);

//-----------------------------------------------------------------------
-
//Função criada para o calculo da média
float calcula_media(float nota_1, float nota_2, float nota_3, float
nota_4)
{
float resultado=0;

resultado = (nota_1+nota_2+nota_3+nota_4)/4;

return resultado;
}

Programa principal:

#include <stdio.h>
#include <stdlib.h>
#include "funcao_media.h"

//-----------------------------------------------------------------------
----
//Função principal
void main()
{
float nota[4], media;
unsigned int contador;

for(contador=0; contador<4; contador++)


{
printf("Digite a nota %d: ", contador+1);
scanf("%f",&nota[contador]);
}

media = calcula_media(nota[0],nota[1],nota[2],nota[3]);

printf("A media calculada foi: %.2f", media);


}

Observe que no cabeçalho do programa principal foi adicionada a biblioteca


“funcao_media.h”, sem ela o programa iria acusar um erro de compilação.

Prof. Rodrigo Rech


Lógica de Programação

É importante ressaltar que na diretiva #include, o argumento que está entre aspas
é o nome do arquivo onde a função foi criada e está localizado na mesma pasta do projeto.
Caso este arquivo esteja localizado em outra pasta, este argumento deve ser o caminho
completo até a pasta onde ele se encontra, por exemplo:
#include “c:/projetos/calculo_media/funcao_media.h”.

Variáveis globais

Antes de fazer o uso de funções próprias, todas as variáveis foram criadas dentro
da função main, porém é comum a necessidade de se utilizar as mesmas variáveis dentro
de funções diferentes. A melhor forma para enviar estes valores para uma função é por
meio dos argumentos, porém, como foi visto neste tópico, uma função tem a capacidade
de retornar apenas um valor, mas, e se fosse necessário retornar dois ou mais valores, ou
então receber um vetor como argumento? A forma mais simples para resolver estes
problemas é utilizando variáveis globais.

As variáveis globais são criadas fora de qualquer função, por isso podem ser lidas
e modificadas em qualquer parte do programa. Ao criar uma variável global deve se
prestar atenção em alguns detalhes:

a) Não poderá existir outra variável com o mesmo nome no programa inteiro, se
existir ocorrerá um erro na compilação;
b) Variáveis locais (aquelas criadas dentro da própria função) são apagadas da
memória sempre que a função acaba de ser executada, liberando espaço. Já as
variáveis globais não são apagadas, ou seja, possuem um endereço fixo na
memória durante toda a execução do programa. Este detalhe não é extremamente
impactante em programas pequenos para computadores, porém em dispositivos
com uma capacidade de memória menor é um agravante, por isso a recomendação
de se evitar variáveis globais sempre que possível;
c) Variáveis globais podem ser modificadas a qualquer momento e em qualquer
função, por isso deve se tomar cuidado para não alterar seus valores em momentos
indesejáveis.

Prof. Rodrigo Rech

S-ar putea să vă placă și