Академический Документы
Профессиональный Документы
Культура Документы
Lógica de Programação
• Márcio Soussa
▫ marcio.soussa10@gmail.com
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”
• 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;
unsigned 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”
• CONSTANTES BARRA INVERTIDA
São utilizadas para controlar a exibição de dados na
tela e na impressora.
CÓDIGO SIGNIFICADO
\n nova linha (line feed)
\b retrocesso (backspace)
\t tabulação horizontal
\v tabulação vertical
\a alerta(beep)
\” para exibir aspas
\\ para exibir barra invertida
\f salto de folha (form fee)
\r retorna ao início da linha (return)
\0 nulo
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.
#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 27
• 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 28
do{
scanf(“%f”,&a);
scanf(“%d”,&b);
} while ((a<=0) || (b<=0));
Comandos em C 30
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
31
• 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
33
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> 38
#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
39
• 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();
for(j=0;j<4;++j){ 2 9 10 11 12
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 Diagonal
printf("\n"); principal da Matriz e apresente na
} tela.
getchar();
}
Função 40
• Forma Geral:
• Abrir
• Fechar
• Apagar
• Copiar
• Renomear
OPERAÇÕES BÁSICAS COM ARQUIVO
48
MODO SIGNIFICADO
w Cria um arquivo texto para escrita. Se o arquivo existir 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
50
• 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
51
• Acesso Seqüencial:
▫ Quando desejamos ter acesso aos dados de um
determinado registro mas não sabemos a localização
desse registro no arquivo devemos vasculhar o arquivo
desde o início em busca do registro desejado até o
final do arquivo se necessário. Esta operação deverá
ser repetida seqüencialmente, isto é, avançando pelos
registros armazenados até que se encontre o registro
procurado. Isto significa que para acessar um registro
específico precisamos obedecer a ordem com que os
registros foram armazenados no arquivo, o que
implica em percorrer todos os registro que o
antecedem.
ORGANIZAÇÃO DE ARQUIVOS 56
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
59
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
62
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
63
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
64
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
65
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
66
// 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
67
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
68
// 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
69
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
70
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);
}