Escolar Documentos
Profissional Documentos
Cultura Documentos
Bibliografia (Ementa)
BIBLIOGRAFIA COMPLEMENTAR
SCHILDT, Herbert, C Completo e Total, Ed. Makron Books
FARRER, Harry et al, Algoritmos Estruturados, Ed. Campus
Bibliografia Complementar
Algoritmo:
Seqüência de passos que visam atingir um
objetivo bem definido.
Torres de Hanói.
Considere o seguinte problema: Temos três
hastes. Uma das hastes serve de suporte para
três discos de tamanhos diferentes. Os discos
menores são sempre colocados sobre os discos
maiores.
Desejamos mover todos discos para outra
haste, porém só podemos movimentar um disco
de cada vez e um disco maior nunca pode ser
colocado sobre um disco de menor tamanho.
Exemplo de Algoritmo
Exemplo de Algoritmo
A corrida de carros:
Oito carros, de marcas e cores diferentes, que nada tem a ver com suas
cores da Formula 1, estão alinhados, lado a lado, para uma corrida.
Estabeleça a ordem em que os carros estão dispostos, baseando-se nas
seguintes informações:
Fluxograma
Geralmente usada por profissionais de análise de
sistema, bem como profissionais de Organização e
Métodos.
Diagrama de Blocos
Ferramenta usada basicamente por profissionais que
está envolvido diretamente com a programação.
Algoritmo
Um processo de cálculos matemáticos ou resoluções
de problemas, utilizando regras formais, englobando
fórmulas de expressões aritméticas.
Exemplos
Fluxograma:
Exemplos
Diagrama de bloco
N
Exemplos
Algoritmo
...
Média = (Nota1+Nota2)2
N
S
“Reprovado” Média >= 7 “Aprovado”
...
Simbologia Básica
Seta de Fluxo
Conectores
Processamento
Entrada manual
de dados
Display
Entrada e Saída
de dados
Princípios de resolução de problemas
Problema
É uma proposta duvidosa, que pode ter
numerosas soluções.
Calcular a média e
determinar a
aprovação do aluno.
Fim
Princípios de resolução de problemas
Exemplo 2
Início
Entrada com
4 Notas
Calcular a média e
determinar a
Aprovação.
Apresentar se houve
ou não aprovação
Fim
Princípios de resolução de problemas
Exemplo 3
Início
Entrada com
4 Notas
Calcular a
média
N S
Média >= 7
“Reprovado” “Aprovado”
Fim
Estrutura
Linear
N
Estrutura
Estruturada
N S
Técnicas Básicas de programação
Operadores matemáticos
Operadores Operação
+ Soma
- Subtração
* Multiplicação
/ Divisão
^ Exponenciação
Mod Resto da Divisão
Técnicas Básicas de programação
Operadores Lógicos
Operadores Operação
= Atribuição
== Igualdade
!= Diferença
> Maior Que
< Menor Que
>= Maior e Igual
<= Menor e Igual
Técnicas Básicas de programação
Operadores Incremento
Operadores Operação
++ Incremento
-- Decremento
Técnicas Básicas de programação
Tipos de Informações
Um computador nada mais é que uma
ferramenta utilizada para resolver problemas
que envolvam a manipulação de informações,
sendo que estas informações classificam-se
basicamente em dois tipos:
Dados e Instruções.
Técnicas Básicas de programação
Tipos de Dados.
Os dados são representados pelas
informações a serem tratadas (processadas)
por um computador.
Tipos Reais:
Abrangem inteiros, negativos, positivos e
fracionários:
35, 0, -35, 1.25, -45.1245547 ......
Técnicas Básicas de programação
Tipos Caracteres:
Seqüência de textos e letras, válida quando estiver
entre (“”) aspas:
“oi.. Tudo bem”, “Telefone: 5555-4444” ....
Tipos Lógicos:
Assumem apenas dois valores:
Verdadeiro ou Falso.
Podendo ser representado como:
Sim ou Não
True ou False
.V. ou .F.
Etc...
Técnicas Básicas de programação
Uso de variáveis:
Variável: Tudo aquilo que é sujeito a
variações, que é incerto, instável ou
inconstante.
Uso de constantes:
É tudo aquilo que é fixo ou estável;
O valor do PI = 3,14156
Técnicas Básicas de programação
Expressões Aritméticas ou formulas
matemáticas:
2
ÁREA= PI. RAIO ÁREA = PI * RAIO^2
X = 43. 55 X = (43*(55/(30+2)))
30+2
Técnicas Básicas de programação
Instruções Básicas:
São representadas por um conjunto de
palavras – chaves ou vocabulário de uma
determinada linguagem de programação.
Português estruturado:
início, fim, var, programa, enquanto, se, então,
para, escreva, leia, faça, repita e até_que.
Técnicas Básicas de programação
Regras básicas:
Todo problema a ser resolvido será previamente
entendido, passado para um algoritmo, para depois
ser representado graficamente;
SOMA = A + B
SOMA
Fim
Técnicas Básicas de programação
Português estruturado
programa SOMA_DOIS_NUMEROS
var
SOMA : inteiro
A : inteiro
B : inteiro
início
leia A
leia B
SOMA = A + B
escreva SOMA
fim
Técnicas Básicas de programação
Desenvolva o algoritmo, Diagrama de blocos e
codificação em português estruturado, para o seguinte
problema:
Ler quatro números e apresentar o resultado
dois a dois dois da adição e multiplicação,
baseando-se na utilização da propriedade
distributiva. Ou seja, se forem lidas as
variáveis A, B, C e D, deverão ser somadas e
multiplicadas A com B, A com C e A com D.
Técnicas Básicas de programação
Técnicas Básicas de programação
Estrutura de Controle – Tomada de Decisões
N S
Condição
Condição Verdadeira
Condição Falsa
Estrutura de Controle – Tomada de Decisões
Português estruturado
se ( <condição> ) então
<instruções para a condição verdadeira>
fim_se
<instruções para a condição falsa>
Estrutura de Controle – Tomada de Decisões
Algoritmo
1 – Ler dois valores respectivamente nas variáveis A e B
2 – efetuar a soma dos valores das variáveis A e B
implicando o valor da soma na variável X
3 – Apresentar o valor da soma contido na variável X.
Estrutura de Controle – Tomada de Decisões
Diagrama de Bloco.
Início
A, B
X=A+B
N S
X > 10
Fim
Estrutura de Controle – Tomada de Decisões
Português estruturado
programa SOMA_NUMEROS
var
X : inteiro
A : inteiro
B : inteiro
início
leia A, B
X = A + B
se ( X > 10 ) então
escreva X
fim_se
fim
Estrutura de Controle – Tomada de Decisões
N S
Condição
Português estruturado
se ( <condição> ) então
<instruções para a condição verdadeira>
senão
<instruções para a condição falsa>
fim_se
Estrutura de Controle – Tomada de Decisões
Algoritmo
1 – Ler dois valores respectivamente nas variáveis A e B
2 – efetuar a soma dos valores das variáveis A e B
implicando o valor da soma na variável X
3 – Verificar se X é maior ou iguala 10, caso sim mostre
X + 5 se não mostre X - 7
Estrutura de Controle – Tomada de Decisões
Português estruturado
programa SOMA_NUMEROS
var
X : inteiro
A : inteiro
B : inteiro
início
leia A, B
X = A + B
se ( X >= 10 ) então
escreva X + 5
senão
escreva X - 7
fim_se
fim
Estrutura de Controle – Tomada de Decisões
Instrução executada
N S quando a Condição 1
Condição 2 Verdadeira
senão
<instruções para a condição 1 falsa e condição 2 falsa>
fim_se
fim_se
Estrutura de Controle – Tomada de Decisões
Algoritmo
1 – Definir uma variável para o salário reajustado como
NOVO_SALARIO;
2 – Ler um valor para a variável SALARIO;
3 – Verificar se o valor de SALARIO < 500, se sim reajustar em 15%;
4 – Verificar se o valor de SALARIO <= 1000, se sim reajustar em 10%
5 – Verificar se o valor de SALARIO > 1000, se sim reajustar em 5%;
6 – Apresentar o valor reajustado implicando na variável
NOVO_SALARIO.
Estrutura de Controle – Tomada de Decisões
Diagrama de blocos Início
SALARIO
N S
SALARIO < 500
N S
SALARIO <= 1000
NOVO_SALARIO
Fim
Estrutura de Controle – Tomada de Decisões
N
Condição 1 S
.e.
Condição 2
Instrução executada
se ambas as condições
forem verdadeiras
Estrutura de Controle – Tomada de Decisões
fim_se
Estrutura de Controle – Tomada de Decisões
N
Condição 1 S
.ou.
Condição 2
Instrução executada
se pelo menos
uma das condição
for verdadeira
Estrutura de Controle – Tomada de Decisões
fim_se
Estrutura de Controle – Tomada de Decisões
CONDIÇÃO 1 RESULTADO
Falso Verdade
Verdade Falso
Estrutura de Controle – Tomada de Decisões
N
S
.não.
Condição
Instrução executada
se condição
for falsa
Estrutura de Controle – Tomada de Decisões
Exercício de fixação
Estrutura de Controle – Tomada de Decisões
Exercício:
O índice de Massa Corporal (IMC) é uma fórmula que indica se um
adulto está acima do peso, se está obeso ou abaixo do peso ideal
considerado saudável. A fórmula para calcular o Índice de Massa
Corporal é: IMC = peso / (altura)2.
Desenvolva o algoritmo, Diagrama de blocos e codificação em
português estruturado, para o seguinte problema:
Ler dois valores, peso e altura em seguida calcular o índice de massa
corporal (IMC) e apresentar em tela se a pessoa está abaixo do peso,
no peso normal, acima do peso ou obeso obedecendo a tabela da
Organização Mundial de Saúde.
Diagrama de blocos
N
Condição
Instrução executada
Enquanto a condição
é verdadeira
Estrutura de Controle – Tomada de Decisões
Português estruturado
Cont = 1
N
Cont <= 1
R=X*3
Início
Estrutura de Controle – Tomada de Decisões
Português estruturado
programa LOOPING_1A
var
X, R, CONT : inteiro
início
CONT = 1
enquanto ( CONT < = 5 ) faça
leia X
R = X * 3
escreva R
CONT = CONT + 1 /// ou CONT ++
fim_enquanto
fim
Estrutura de Controle – Tomada de Decisões
Exercício:
Desenvolva um programa que leia cinco vezes
um determinado valor e que este valor seja
multiplicado por três e apresentado o
resultado em tela.
Cont = 1
R=X*3
N
Cont > 5
Fim
Estrutura de Controle – Tomada de Decisões
Português estruturado
programa LOOPING_2A
var
X, R, CONT : inteiro
início
CONT = 1
repita
leia X
R = X * 3
escreva R
CONT = CONT + 1 /// ou CONT ++
até_que ( CONT > 5 )
fim
Estrutura de Controle – Tomada de Decisões
Diagrama de blocos
Instruções
Estrutura de Controle – Tomada de Decisões
Português estruturado
Exemplo:
Algoritmo
1 – Definir um contador variando de 1 a 5;
2 – Ler um valor para a variável X;
3 – Efetuar a multiplicação do valor de X por
3, implicando o resultado na variável R;
4 – Apresentar o valor calculado contido na
variável R;
5 – Repetir os passos 2, 3, 4 e 5 até que o
contador seja encerrado.
Estrutura de Controle – Tomada de Decisões
Diagrama de blocos
Início
Cont = 1, 5, 1
R=X*3
Fim
Estrutura de Controle – Tomada de Decisões
Português estruturado
programa LOOPING_2A
var
X, R, CONT : inteiro
início
para CONT de 1 até 5 passo 1
leia X
R = X * 3
escreva R
fim_para
fim
Estrutura de Controle – Tomada de Decisões
Exercício
Elaborar o algoritmo, diagrama de blocos e
português estruturado de um programa que
efetue o cálculo, e apresente em tela o
resultado, da fatorial do número 5, 5!
Desta forma temos 5! = 5 x 4 x 3 x 2 x 1
Que equivale a 120
Estrutura de Controle – Tomada de Decisões
Exercício
Elaborar o algoritmo, diagrama de blocos e
português estruturado de um programa que
efetue o cálculo da fatorial de um número
fornecido pelo usuário, e após a apresentação
do resultado em tela perguntar se ele deseja
efetuar outro fatorial ?
Exercícios para fixação
Desenvolva o diagrama de blocos e a
codificação em português estruturado para
os seguintes problemas:
main(){
// corpo da função – bloco de comandos
}
Os parênteses após a palavra “main()”, indica
que é uma função. O nome das demais funções
desenvolvidas em C, pode ser qualquer um,
menos “main”.
Estrutura básica de um programa em “C”
Modificadores de tipo
Exceto o void, os tipos de dados básicos podem ter
vários modificadores precedendo-os. Um modificador
é usado para alterar o significado de um tipo básico
para adaptá-lo mais precisamente às necessidades
de diversas situações:
IDENTIFICADORES
São usados para dar nomes às variáveis,
constantes, tipos e ou funções. Para a
criação desses identificadores deverá ser
consideradas as informações a seguir:
Podem ser formados por letras, números ou sublinhado(_);
Tem que começar por letra ou sublinhado;
Letras maiúsculas e minúsculas são caracteres distintos;
Não podem ser palavras reservadas;
Podem conter qualquer tamanho porém somente os
31primeiros caracteres são significativos.
Estrutura básica de um programa em “C”
VARIÁVEL
É uma posição de memória com um nome,
que é usada para armazenar uma
informação de um tipo específico que
pode ser modificada pelo programa.
Forma Geral :
tipo lista_de variáveis;
Exemplo: int a,b,d;
float x,y;
unsigened int w;
Estrutura básica de um programa em “C”
Inicialização de variáveis:
As variáveis podem ser inicializadas no
mesmo momento em que elas são
declaradas, colocando um sinal de igual e
a informação desejada.
Exemplo:
char op=‘S’; /* as informações do tipo caracter são envolvidas por aspas
simples */
int primeiro=0;
char mensagem[20]=”Bom Dia !!”; /* as strings são
envolvidas por aspas */
Estrutura básica de um programa em “C”
#include <nome_da_biblioteca.h>
Bibliotecas de funções .h
FUNÇÕES DE TELA
Biblioteca <conio.h>
#include <conio.h>
Nela encontramos as seguintes funções
mais usadas:
clrscr() - limpar a tela; Linux : printf("\033[2J");
clreol() - limpa a linha;
gotoxy(coluna,linha) - posiciona o cursor;
window(coluna incial,linha inicial,coluna final, linha final)
-cria uma janela na tela;
textcolor(cor) - seleciona a cor dos caracteres de texto;
textbackground(cor) – seleciona a cor do fundo da tela;
Bibliotecas de funções .h
TABELA DE CORES:
0 PRETO
1 AZUL
2 VERDE
3 CIANO
4 VERMELHA
5 MAGENTA
6 MARROM
7 CINZA CLARO
8 CINZA ESCURO
9 AZUL CLARO
10 VERDE CLARO
11 CIANO CLARO
12 ALARANJADO
13 MAGENTA CLARO
14 AMARELO
15 BRANCO
Bibliotecas de funções .h
FUNÇÕES DE ENTRADA E SAÍDA DE DADOS
Biblioteca <stdio.h>
#include <stdio.h>
getchar() - entrada de um caracter individual;
getch() - entrada de um caracter. O caracter não é exibido na tela não é
necessário teclar <enter>;
getche() - entrada de um caracter. O caracter é exibido na tela não é
necessário teclar <enter>;
putchar - exibe um caracter na tela;
gets() - entrada de string;
puts() - saída de string;
scanf() - entrada de dados formatada com string de controle de acordo com
o tipo da variável;
printf() - saída de dados formatada com string de controle de acordo com o
tipo da variável;
cprintf() - saída de dados formatada colorida com string de controle de
acordo com o tipo da variável;
Estrutura básica de um programa em “C”
COMANDOS DE FORMATO
São constantes que definem o tipo e o
formato dos dados a serem exibidos.
Comando Formato
%c caracter
%d inteiros decimais com sinal
%i inteiros decimais com sinal
%f decimais com ponto flutuante
%s string
%e notação científica
%o octal
%x hexadecimal
%l inteiro longo
%lf double
%u decimal sem sinal
Utilização das funções C.
A função printf( )
A função printf serve para exibir uma
informação no vídeo ou na impressora e
possui a seguinte estrutura.
Forma Geral:
printf(“expressão de controle”, lista de argumentos);
Exemplo1:
int i=4;
float j=5.5;
printf(“%d\n”, i);
printf(“Este numero e inteiro: %d e este e real: %f”, i , j);
Resultado: 4
Este número é inteiro: 4 e este é real: 5.5
Utilização das funções C.
A Função scanf()
A função scanf() é outra das funções de E/S
implementadas em todos os compiladores C.
Ela é o complemento de printf() e nos permite
ler dados formatados da entrada padrão
(teclado).
Forma Geral:
scanf(“expressão de controle”, lista de argumentos)
Utilização das funções C.
A lista de argumentos deve consistir nos
endereços das variáveis. C oferece um
operador para tipos básicos chamado
operador de endereço e referenciado pelo
símbolo & que retorna o endereço do
operando. Na função scanf() cada nome
de variável deve ser precedida por um
ampersand(&) ou E-comercial. Somente
strings não devem conter & na frente.
Utilização das funções C.
Exemplo1: O programa a seguir exibe a idade em dias de uma pessoa.
#include <stdio.h>
#include <conio.h>
void main()
{
int anos, dias;
printf(“Digite sua idade em anos: “);
scanf(“%d”,&anos);
dias = anos*365;
printf(“Sua idade em dias é %.d\n”,dias);
getchar();
}
Resultado:
Digite sua idade em anos: 4
Sua idade em dias é 1460
Utilização das funções C.
Exercício:
Calcula a média aritmética de duas notas de um aluno.
#include <stdio.h>
#include <conio.h>
void main()
{
float media,nota1,nota2;
clrscr();
printf(“\t Digite a 1ª nota: “);
scanf(“%f",¬a1);
printf("\t Digite a 2ª nota: ");
scanf("%f",¬a2);
media=(nota1 + nota2)/2;
printf(“\t A média é: %5.2f”, media);
getch();
}
Comandos em C
Comandos de Seleção
if (x>9)
y=100;
else
y=200; if((x == 2) && (x!=1)){
a=10;
b=20;
c=30;
}
else
a=b=c=0; if ((x == 2) && (x!=1)) {
a=10;
b=20;
c=30;
} else {
a=1;
b=c=0;
}
Comandos em C
Comando de Seleção Múltipla
char ch;
switch (ch){
case ‘1’ :
printf(“Inclusão”);
break;
case ‘2’ :
printf(“Consulta”); int num,a,b;
break; switch (num) {
default : case 1,2 :
printf(“Fim”); a=2*2;
} b=-1;
break;
case 3,4,5 :
a=2*3;
b=0;
break;
}
Comandos em C
Comandos de Repetição – while - do
while (ch!=’A’){
c=a+b; while ((a>0) || (b>0)){
printf(“%d”,c); c+=b;
scanf(“%c”,&ch); --a;
} --b;
}
do{
a++
printf(“%d”,a);
} while (a<100);
do{
scanf(“%f”,&a);
scanf(“%d”,&b);
} while ((a<=0) || (b<=0));
Comandos em C
Comandos de Repetição - for
for ( x=1;x<=100;x++ )
printf(“%d”,x);
for (x=0,y=0;x<10;x++,y--)
printf(“%d %d”,x,y);
for (x=100;x!=65;x-=5) {
z = x*x;
printf(“O quadrado de %d e %d”,x,z);
}
for(x=0; ;x++) {
printf(“%d”,x);
if (x==10) break;
}
Estrutura de Dados – Matriz ou Vetor
MD[2] = 6.5
i = 1, 8, 1
MD[3] = 8.0
MD[4] = 3.5 MD[i]
MD[5] = 6.0
SOMA = SOMA + MD[i]
MD[6] = 7.0
MD[7] = 6.5 Média =SOMA/8
MD[8] = 6.0
Média
Fim
Estrutura de Dados – Matriz ou Vetor
Português estruturado
programa Média
var
MD : conjunto[1..8] de real
SOMA, Média : real
i : inteiro
início
SOMA = 0
para i de 1 até 8 passo 1
leia MD[i]
SOMA = SOMA + MD[i]
fim_para
Média = SOMA/8
escreva Média
fim
Estrutura de Dados – Matriz ou Vetor
STRING
Em linguagem “C” não existe o tipo string. A utilização
desse tipo de variável se dá através da utilização de
um cadeia de caracteres, isto é um vetor de
caracteres terminados por um nulo (\0). Para
implementar esse tipo de dado deve-se ter sempre
um caracter a mais para armazenar o terminador nulo
Para declarar um tipo string:
char nome[11];
0 1 2 3 4 5 6 7 8 9 10
P a u l o \0
Estrutura de Dados – Matriz ou Vetor
Para manipular as informações armazenadas em uma
string podemos utilizar as funções string ou utilizamos as
funções caracter , já que uma string é um vetor de
caracteres.
void main() {
float notas[7],media=0;
int i;
for (i=0; i<7; i++) {
pritf(“Digite a nota do aluno %d: “,i);
scanf(“%f”, ¬as[i]);
media+=notas[i];
}
media=media/8;
printf(“A média Geral= %5.2f”,media);
}
Exemplos – usando Matriz ou Vetor
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
void main(){
char nome[20],op='S';
float va,rl;
do {
clrscr();
printf("\t\tAPLICACOES\n");
printf("\t Nome.....: ");
gets(nome);
printf("\t Valor....: ");
scanf("%f",&va);
if (va<=10000.00)
rl=va*0.014-0.002*va;
else
rl=va*0.018-0.002*va;
printf("\t Rendimento .. : %8.2f\n\n",rl);
printf("Deseja Continuar %s <s/n > ? ",nome);
do {
gotoxy(50,6);
clreol();
scanf("%c",&op);
op=toupper(op);
} while ((op!='S') && (op!='N'));
getchar();
} while (op=='S');
}
Exemplos – usando Matriz ou Vetor
Matriz multidimensional:
#include <stdio.h>
Resultado:
#include <conio.h> j/i 0 1 2 3
void main(){
0 1 2 3 4
int j,i,num[4][4];
1 5 6 7 8
clrscr();
2 9 10 11 12
for(j=0;j<4;++j){
for(i=0;i<4;++i){ 3 13 14 15 16
num[j][i] = (j*4)+i+1;
printf("%2.0d ",num[j][i]);
} Agora efetue a soma da
printf("\n"); Diagonal principal da Matriz
}
e apresente na tela.
getchar();
}
Função
Função é um seguimento independente do
programa que executa uma tarefa
específica.
Forma Geral :
tipo *identificador;
Ponteiros
Exemplo:
int *px,*py;
Para atribuir valores as variáveis ponteiro e para acessar
as informações usamos:
*px=3;
*py=5;
px=&x;
py=&y;
O resultado será:
px=65488, *px=5, &px=65492
py=65490, *py=6, &py=65494
OBS: O formato %p no printf indica que vai ser exibido um endereço.
Ponteiros
X Y
Onde:
5 6 px => retorna o endereço para o qual o
ponteiro aponta;
65492 65494
Ponteiros
Podemos fazer algumas operações aritméticas com ponteiros. A primeira, e mais
simples, é a de igualar dois ponteiros p1=p2, assim p1 aponta para o mesmo lugar que
p2. Se quisermos que a variável apontada por p1 tenha o mesmo conteúdo da variável
apontada por p2 devemos fazer *p1=*p2.
Outras operações com ponteiros também bastante usadas são o incremento e o
decremento. Quando incrementamos um ponteiro ele passa a apontar para o próximo
valor do mesmo tipo para o qual o ponteiro aponta (avança um número de bytes na
memória) como por exemplo:
int *p;
p++; // avança dois bytes na memória
p--; // decrementa dois bytes na memória
Para incrementar o conteúdo da variável apontada pelo ponteiro p temos:
*p++;
Outras operações podem ser efetuadas com ponteiros como a adição e subtração de
inteiros com ponteiros, bem como os operadores de (== , !=, >, <, >=,<=).
Exemplos:
p=p+15; // desloca o ponteiro 15 posições;
*(p+15); // utiliza o conteúdo do ponteiro 15 posições adiante;
p1>p2; // compara qual dos dois ponteiros está mais adiante na memória.
Existem operações que não podem ser efetuadas com ponteiros, como por exemplo
dividir ou multiplicar ponteiros
Ponteiros
#include <stdio.h>
void main(){
int num,valor;
int *p;
num=70;
p=# // recebe o endereço de num
valor=*p; // valor recebe o mesmo conteúdo de num
printf(“\n\n %d \n”,valor);
printf(“Endereço para onde o ponteiro aponta: %p \n”,p);
printf(“Valor da variável apontada: %d \n”,*p);
*p=100; // modifica o conteúdo da variável num indiretamente
printf(“Valor da variável modificada %d \n”,*p);
}
Ponteiros e Matrizes
Uma das aplicações mais importantes com
ponteiros e a varredura seqüencial de uma
matriz, isto é, quando temos que percorrer
todos os elementos de uma matriz de uma
forma seqüencial, podemos usar um
ponteiro incrementando-o até o final da
matriz.
Ponteiros e Matrizes
Em uma matriz o próprio nome da matriz é o
endereço do primeiro elemento da matriz.
Se x é uma matriz unidimensional, então, o
endereço do primeiro elemento da matriz pode
ser expresso &x[0] ou simplesmente x.
Além disso o endereço do segundo elemento da
matriz pode ser expresso por &x[1] ou (x + 1), e
assim por diante até o enésimo elemento da
matriz &x[ i ] ou (x + i) .
ESTRUTURA
Uma estrutura é uma coleção de tipos diferentes referenciadas por um
nome, isto é, a estrutura é uma forma de se ter informações agrupadas.
Forma Geral:
struct nome {
tipo nome_da_variável;
tipo nome_da_variável; elem. da estrutura
....
} variáveis da estrutura;
Exemplo:
struct veículo {
char modelo[25];
char marca[15];
float custo;
};
Exemplo:-
a.x =10; b.x =5;
a.y =2.5; b.y = 0.5;
gets(carro.modelo);
scanf(“%f”,&carro.custo);
Estruturas, Uniões, Tipos Definidos e Enumerações
É possível também ter-se uma matriz de estruturas. Exemplos:
struct veículo {
char modelo[20];
char marca[15];
float custo;
} carro[100];
/* isto cria 100 conjuntos de variáveis que estão organizadas com os elementos acima */.
for (x=0;x<5;x++){
clrscr();
printf("\t\t\t CONTROLE BANCARIO \n");
printf("\t Nr da Conta.........: ");gets(cli[x].conta);
printf("\t Saldo ..............: ");scanf("%f",&aux);
cli[x].saldo=aux;
saldo_medio += cli[x].saldo;
getchar();
}
saldo_medio=saldo_medio/5;
clrscr();
printf("\t\t CLIENTES COM SALDO ACIMA DA MEDIA \n\n\n");
printf("\t Nr da conta \t Saldo \n\n");
for (x=0;x<5;x++){
if (cli[x].saldo >=saldo_medio)
printf("\t %s \t\t %8.2f \n", cli[x].conta,cli[x].saldo);
}
getchar();
}
Exercício
Vamos supor que várias pedras do jogo de xadrez estão no
tabuleiro. Para facilitar a indicação das peças, vamos
convencionar:
1 – peões 2 – cavalos
3 – torres 4 – bispos
5 – reis 6 – rainhas
0 – ausência de peças
O tabuleiro
1 3 0 5 4 0 2 1
a) Construa um programa que determine a 1 0 1 0 0 1 0 0
soma total entre peões e bispos e a
0 0 0 0 1 0 6 0
quantidade de posições com ausência de
peças;
1 0 0 1 1 0 0 1
0 1 0 4 0 0 1 0
tabuleiro. 1 0 5 0 1 1 0 6
Solução
#include <stdio.h>
#include <conio.h>
void main(){
int tabuleiro[8][8] = { {1,3,0,5,4,0,2,1},
{1,0,1,0,0,1,0,0},
{0,0,0,0,1,0,6,0},
{1,0,0,1,1,0,0,1},
{0,1,0,4,0,0,1,0},
{0,0,3,1,0,0,1,1},
{1,0,6,6,0,0,1,0},
{1,0,5,0,1,1,0,6} };
int i,j;
int branco=0, peao=0, cavalo=0, torre=0, bispo=0, rei=0, rainha=0;
printf("\tApresentação do tabuleiro\n");
for (i=0;i<8;i++){
for (j=0;j<8;j++){
printf("%2.0d",tabuleiro[i][j]);
}
printf("\n");
}
// Continua …..
Solução --- Continuação ----
for (i=0;i<8;i++){
for (j=0;j<8;j++){
switch (tabuleiro[i][j]){
case 0: branco++; break;
case 1: peao++; break;
case 2: cavalo++; break;
case 3: torre++; break;
case 4: bispo++; break;
case 5: rei++; break;
case 6: rainha++; break;
}
}
}
printf("\n");
printf("Soma de Peoes ou bispos e brancos =%d\n",(peao + bispo + branco));
printf("Peoes =%d, cavalos=%d, torres=%d, bispos=%d, reis=%d, rainhas=%d,
branco=%d",peao, cavalo, torre, bispo, rei, rainha, branco);
}
Arquivos
ARQUIVO : É um conjunto de registros logicamente
organizados armazenados em um dispositivo de
memória secundária (disco rígido, disquetes, fitas
magnéticas, cd, etc), onde cada registro compreende
um conjunto de informações denominadas campos.
Em um arquivo é possível armazenar um volume
grande de dados.
Arquivo
Registro
Campo
Acesso a disco
“Linguagem C” divide as categorias de
acesso a disco em dois grupos.
Alto nível, ou leitura e gravação bufferizada
Baixo nível, ou leitura e gravação não
bufferizada.
Iremos estudar a categoria do grupo de
alto nível por possuir algumas vantagens
sobre a de baixo nível.
“facilidade para ler e gravar qualquer tipo de
dado e a portabilidade”
Acesso a disco
É possível classificar os arquivos conforme a forma como
eles são abertos:
Modo texto
Modo binário
Abrir
Fechar
Apagar
Copiar
Renomear
OPERAÇÕES BÁSICAS COM ARQUIVO
ABRIR O ARQUIVO: Para podermos utilizar as informações
contidas no arquivo ou para guardá-las nesse arquivo
devemos primeiramente abrir o arquivo:
É necessária a declaração de uma estrutura do tipo FILE que
receberá um ponteiro para o arquivo que está sendo aberto.
MODO SIGNIFICADO
w Cria um arquivo texto para escrita. Se o arquivo exitir será recriado por cima caso não exista será criado.
a Abre um arquivo texto para gravação.Se o arquivo existir os dados serão anexados no final do arquivo se não existir será criado um
novo.
r+ Abrir um arquivo texto para leitura e gravação. O arquivo tem que existir.
w+ Abre um arquivo texto para leitura e gravação. Se o arquivo existir será recriado por cima. Se não existir será criado.
a+ Abre um arquivo texto para atualização e para adicionar dados no fim do arquivo se ele existir se não cria-se um novo arquivo
wb Cria um arquivo binário para escrita. Se o arquivo exitir será recriado por cima caso não exista será criado.
ab Abre um arquivo binário para gravação.Se o arquivo existir os dados serão anexados no final do arquivo se não existir será criado um
novo.
rb+ Abre um arquivo binário para leitura e gravação. O arquivo deve existir e pode ser atualizado.
wb+ Abrir um arquivo binário para leitura e gravação. Se o arquivo existir ele será destruído e reinicializado. Se não existir será criado.
ab+ Abrir um arquivo binário para atualização e para adicionar dados ao fim do arquivo existente ou um novo arquivo será criado.
OPERAÇÕES BÁSICAS COM ARQUIVO
Exemplo.:
#include <stdio.h>
#include <conio.h>
void main(){
struct aluno {
char ra[9];
char nome[20];
}teste;
FILE *ARQ;
int x;
long N;
gets(teste.ra);
gets(teste.nome); A função ftell() retorna um número
ARQ=fopen ("curso.dat","ab+");
fseek(ARQ,sizeof(teste),SEEK_END); inteiro longo que representa o número de
N=(ftell(ARQ)/sizeof(teste)-1); bytes do começo do arquivo até a posição
fseek(ARQ,N*sizeof(teste),SEEK_CUR); atual.
fwrite(&teste,sizeof(teste),1,ARQ);
fclose(ARQ);
}
FECHAR ARQUIVO: Todo arquivo aberto deverá ser fechado para garantir a
integridade dos dados armazenados, caso isso não ocorra poderá haver
perda de informações.
fclose().
OPERAÇÕES BÁSICAS COM ARQUIVO
Forma Geral:
feof(ponteiro);
Onde: ponteiro é o nome da variável do tipo FILE;
No DOS a função feof() retorna –1 caso seja final de arquivo e 0 caso contrário.
Exemplo:
while ( !feof(ponteiro))
fread(&estrutura,sizeof(estrutura),1,ponteiro);
COMANDOS E FUNÇÕES PARA MANIPULAÇÃO DE
REGISTROS
void menu(){
int op;
do{
clrscr();
gotoxy(20,2);printf("<<< M E N U D E O P C O E S >>>");
gotoxy(30,6);printf("1 - INCLUSAO ");
gotoxy(30,8);printf("2 - CONSULTA SEQUENCIAL");
gotoxy(30,10);printf("3 - CONSULTA DIRETA");
gotoxy(30,12);printf("4 - ALTERACAO");
gotoxy(30,14);printf("5 - EXCLUSAO");
gotoxy(30,16);printf("6 - FIM ");
gotoxy(25,18);printf("Digite a opcao <1-6> ?");
do{
gotoxy(47,18);clreol();scanf("%d",&op);
} while (op<1 || op>6);
if (op!=6){
switch (op){
case 1:inclusao();break;
case 2:consulta_s();break;
case 3:consulta_d();break;
case 4:alteracao();break;
case 5:exclusao();break;
}
}
}while (op!=6);
}
Exemplo prático ... Continuação
void inclusao(){
char op;
int x;
long N;
fseek(parq,sizeof(reg),SEEK_END);
N=(ftell(parq)/sizeof(reg)-1);
do {
tela1();
getchar();
gotoxy(10,6);printf("O NUMERO DO REGISTRO: %ld",N);
gotoxy(40,8);gets(reg.modelo);
gotoxy(40,10);gets(reg.marca);
gotoxy(40,12);scanf("%f",®.preco);
fseek(parq,N*sizeof(reg),SEEK_CUR);
fwrite(®,sizeof(reg),1,parq);
op=resposta();
N++;
}while(op!='N');
}
Exemplo prático ... Continuação
void consulta_s(){
int num,lin=8;
tela2();
rewind(parq);
fread(®,sizeof(reg),1,parq);
while (!feof(parq)){
gotoxy(10,lin);printf("%s",reg.modelo);
gotoxy(40,lin);printf("%s",reg.marca);
gotoxy(60,lin);printf("%10.2f",reg.preco);
fread(®,sizeof(reg),1,parq);
lin++;
}
getch();
}
Exemplo prático ... Continuação
void consulta_d(){
int num;
long tam;
char op;
fseek(parq,sizeof(reg),SEEK_END);
tam=(ftell(parq)/sizeof(reg))-2;
do{
tela1();
gotoxy(10,6);printf("QUAL REGISTRO DESEJA CONSULTAR ?");
do{
gotoxy(45,6);clreol();scanf("%d",&num);
}while (num<0 || num>tam);
fseek(parq,num*sizeof(reg),SEEK_SET);
fread(®,sizeof(reg),1,parq);
gotoxy(40,8);printf("%s",reg.modelo);
gotoxy(40,10);printf("%s",reg.marca);
gotoxy(40,12);printf("%10.2f",reg.preco);
op=resposta();
}while(op!='N');
}
Exemplo prático ... Continuação
void alteracao(){
int num;
long tam;
char op, resp[20]="";
fclose(parq);
abre_arquivo2();
fseek(parq,sizeof(reg),SEEK_END);
tam=(ftell(parq)/sizeof(reg))-2;
do{
tela1();
gotoxy(10,6);printf("QUAL REGISTRO DESEJA ALTERAR ?");
do{
gotoxy(45,6);clreol();scanf("%d",&num);
}while (num<0 || num>tam);
fseek(parq,num*sizeof(reg),SEEK_SET);
fread(®,sizeof(reg),1,parq);
gotoxy(40,8);printf("%s",reg.modelo);
gotoxy(40,10);printf("%s",reg.marca);
gotoxy(40,12);printf("%10.2f",reg.preco);
getchar();
gotoxy(40,8);gets(resp);
if (strcmp(resp,"") !=0){
strcpy(reg.modelo,resp);
gotoxy(40,8);clreol();printf("%s",reg.modelo);
}
// Continua………………………………………………………………………………
Exemplo prático ... Continuação
// Continuação…………………………………………………
gotoxy(40,10);gets(resp);
if (strcmp(resp,"") !=0){
strcpy(reg.marca,resp);
gotoxy(40,10);clreol();printf("%s",reg.marca);
}
do{
gotoxy(40,12);gets(resp);
if (strcmp(resp,"") !=0){
reg.preco=atof(resp);
gotoxy(40,12);clreol();printf("%8.2f",reg.preco);
}
}while (reg.preco <=0);
fseek(parq,num*sizeof(reg),SEEK_SET);
fwrite(®,sizeof(reg),1,parq);
op=resposta();
}while(op!='N');
fclose(parq);
abre_arquivo1();
}
Exemplo prático ... Continuação
void exclusao(){
int num,cont=0;
long tam;
char op;
fclose(parq);
abre_arquivo2();
fseek(parq,sizeof(reg),SEEK_END);
tam=(ftell(parq)/sizeof(reg))-2;
do{
tela1();
gotoxy(10,6);printf("QUAL REGISTRO DESEJA CONSULTAR ?");
do{
gotoxy(45,6);clreol();scanf("%d",&num);
}while (num<0 || num>tam);
fseek(parq,num*sizeof(reg),SEEK_SET);
fread(®,sizeof(reg),1,parq);
if (strcmp(reg.modelo,"***") == 0){
gotoxy(20,22);printf("Registro ja excluido !!");
delay(1000);
} else
// Continuação ……………………………………………………
Exemplo prático ... Continuação
// Continuação ……………………………………………………
{
gotoxy(40,8);printf("%s",reg.modelo);
gotoxy(40,10);printf("%s",reg.marca);
gotoxy(40,12);printf("%10.2f",reg.preco);
gotoxy(40,19);printf("Confirma Exclusao ?");
op=resposta();
if (op=='S'){
strcpy(reg.modelo,"***");
fseek(parq,num*sizeof(reg),SEEK_SET);
fwrite(®,sizeof(reg),1,parq);
cont++;
gotoxy(40,19);printf("Registro Excluido !!");delay(1000);
}
}
gotoxy(40,19);clreol();
op=resposta();
}while(op!='N');
fclose(parq);
abre_arquivo1();
if (cont > 0) reorganizar();
}
Exemplo prático ... Continuação
void reorganizar(){
FILE *parq2;
parq2=fopen("t3.bak","wb+");
fclose(parq);
abre_arquivo2();
rewind(parq);
while (! feof(parq)){
if (fread(®,sizeof(reg),1,parq) >=1)
if (strcmp(reg.modelo,"***") !=0)
fwrite(®,sizeof(reg),1,parq2);
}
fclose(parq);
fclose(parq2);
remove("t3.dad");
rename("t3.bak","t3.dad");
abre_arquivo1();
}
Exemplo prático ... final
void tela2(){
clrscr();
gotoxy(30,3); printf("CADASTRO DE VEICULOS ");
gotoxy(10,5);printf("MODELO \t\t\t MARCA \t\t\t PRECO R$\n");
}
void tela1(){
clrscr();
gotoxy(40,2);printf("CADASTRO DE VEICULOS");
gotoxy(10,8);printf(" MODELO............: ");
gotoxy(10,10);printf(" MARCA.............: ");
gotoxy(10,12);printf(" PRECO.............: R$");
}
char resposta(){
char op;
gotoxy(40,20);printf("Deseja Continuar <S/N> ?");
do{
gotoxy(65,20);clreol();scanf("%c",&op);
op=toupper(op);
}while (op!='N' && op !='S');
return(op);
}