Escolar Documentos
Profissional Documentos
Cultura Documentos
RECUPERAÇÃO DA
INFORMAÇÃO
(ERI)
SISTEMAS DE INFORMAÇÃO
AULA 02– Revisão e Conceitos Iniciais
Profa. Dra. Lúcia F. A. Guimarães
ESTRUTURAS
Estruturas
• ESTRUTURAS????
• São utilizadas para agrupar informações
relacionadas de tipos diferentes de dados;
• Seria:
Estruturas
• Exemplo: struct produto
{
• Código; int codigo;
• nome do produto; char nome[50];
• quantidade estocada; int quantidade;
• valor de compra; float valor_compra;
• valor a ser vendido; float valor_venda;
};
Estruturas
• Exemplo: struct produto
{
• Código; int codigo;
• nome do produto; char nome[50];
• quantidade estocada; int quantidade;
• valor de compra; float valor_compra;
• valor a ser vendido; float valor_venda;
};
Estruturas
• Exemplo: struct produto
{
• Código; int codigo;
• nome do produto; char nome[50];
• quantidade estocada; int quantidade;
• valor de compra; float valor_compra;
• valor a ser vendido; float valor_venda;
};
Estruturas
• Exemplo: struct produto
{
• Código; int codigo;
• nome do produto; char nome[50];
• quantidade estocada; int quantidade;
• valor de compra; float valor_compra;
• valor a ser vendido; float valor_venda;
};
Estruturas
• Exemplo:
struct produto item;
• Observe que esta sintaxe obedece a sintaxe normal
para a declaração de variáveis em C.
Estruturas
NOME_DA_ESTRUTURA.CAMPO
Observe que o
código digitado
pelo usuário foi
78439
PONTEIROS
Ponteiros
• int e
• float,
• Exemplo:
• int *A;
• struct cadastro *aluno
Ponteiros
• Cuidados:
• Como toda variável, todo ponteiro deve ser
inicializado
system("PAUSE");
return 0;
}
Ponteiros
• Uma solução para o erro seria:
Esquematicamente, na memória
#include <stdio.h>
#include <stdlib.h> y
2
int main(int argc, char *argv[]) E10
{
float *x, y;
x=NULL;
y=2; x
E10
x=&y;
E50
*x=3;
printf("\n\n %f %f \n", y,*x);
system("PAUSE");
return 0;
}
Ponteiros
• Uma solução para o erro seria:
Esquematicamente, na memória
#include <stdio.h>
#include <stdlib.h> y
3
int main(int argc, char *argv[]) E10
{
float *x, y;
x=NULL;
y=2; x
E10
x=&y;
E50
*x=3;
printf("\n\n %f %f \n", y,*x);
system("PAUSE");
return 0;
}
Unindo os dois
conceitos.......
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h>
struct teste
{
int a;
float b;
};
int main()
{
struct teste x,*y;
x.a=5;
x.b=6.2;
y=&x;
printf("y.a= %d, y.b = %.2f", y->a,y->b);
}
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h>
struct teste
{ ESTRUTURA teste COM UM
int a; CAMPO DEFINIDO COMO
float b; INTEIRO E OUTRO CAMPO
}; PONTO FLUTUANTE
int main()
{
struct teste x,*y;
x.a=5;
x.b=6.2;
y=&x;
printf("y.a= %d, y.b = %.2f", y->a,y->b);
}
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h> Esquematicamente, na memória
x é uma x
struct teste variável do tipo a b
{ estrutura teste
int a; *y é um E10
float b;
ponteiro de
};
uma variável do
int main() tipo estrutura
{ teste
struct teste x,*y;
x.a=5;
x.b=6.2;
y
y=&x;
printf("y.a= %d, y.b = %.2f", y->a,y->b);
E50
}
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h> Esquematicamente, na memória
x
struct teste
a b
{
5 6.2
int a;
E10
float b;
};
x
struct teste
a b
{
5 6.2
int a;
E10
float b;
}; y recebe o
endereço
int main() variável x do
{ tipo teste.
struct teste x,*y; Ou seja, y
x.a=5; aponta para
x.b=6.2; x
y
y=&x;
E10
printf("y.a= %d, y.b = %.2f", y->a,y->b);
E50
}
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h> Esquematicamente, na memória
x
struct teste
a b
{
5 6.2
int a;
Impressão dos valores que E10
float b;
estão armazenados no
};
endereço contido na variável y
int main()
{
struct teste x,*y;
x.a=5;
x.b=6.2;
y
y=&x;
E10
printf("y.a= %d, y.b = %.2f", y->a,y->b);
E50
}
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h> Esquematicamente, na memória
x
struct teste
a b
{
5 6.2
int a;
Observe que a manipulação E10
float b;
não é mais usando ponto(.) e
};
sim ->
int main()
{
struct teste x,*y;
x.a=5;
x.b=6.2;
y
y=&x;
E10
printf("y.a= %d, y.b = %.2f", y->a,y->b);
E50
}
Alocação Dinâmica.......
Alocação Dinâmica
• Alocação Dinâmica
• A alocação dinâmica permite ao programador
criar variáveis em tempo de execução, ou seja,
• Alocação Dinâmica
• Biblioteca padrão “stdlib.h”
• contém uma série de funções pré-definidas para
tratar alocação dinâmica de memória
Alocação Dinâmica
• Alocação Dinâmica
• Função “malloc”:
• Recebe como parâmetro o número de bytes que se
deseja alocar
• Alocação Dinâmica
• Função “malloc”:
Exemplo: alocação dinâmica de um vetor de inteiros
com 10 elementos
int *v;
v = (int *) malloc(10*sizeof(int));
Alocação Dinâmica
• Alocação Dinâmica
• Função “malloc”:
Exemplo: alocação dinâmica de um vetor de inteiros
com 10 elementos
int *v;
v = (int *) malloc(10*sizeof(int));
Retorna o endereço da
área alocada para
armazenar valores inteiros
Alocação Dinâmica
• Alocação Dinâmica
• Função “malloc”:
Exemplo: alocação dinâmica de um vetor de inteiros
com 10 elementos
int *v;
v = (int *) malloc(10*sizeof(int));
Ponteiro de inteiro
Retorna o endereço da
recebe endereço
área alocada para
inicial do espaço
armazenar valores inteiros
alocado
Alocação Dinâmica
Esquematicamente, na memória
• Alocação Dinâmica
• Função “malloc”:
int *v;
v = (int *) malloc(10*sizeof(int));
v
E50
Alocação Dinâmica
Esquematicamente, na memória
• Alocação Dinâmica
• Função “malloc”: E20
int *v;
v = (int *) malloc(10*sizeof(int));
v
E20
Reserva espaço de
E50
memória da área
livre
e atribui endereço à
variável
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h> Esquematicamente, na memória
struct teste
{ y
int a;
float b; E10
};
int main()
{
struct teste *y;
y = (struct teste *)malloc(1*sizeof(struct
teste));
y->a=5;
y->b=6.2;
printf("\n\n\ty->a= %d, y->b = %.2f\n\n\t",
y->a,y->b);
}
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h> Esquematicamente, na memória
struct teste
{ y
int a; E50
float b; E10
};
int main()
{
struct teste *y;
a b
y = (struct teste *)malloc(1*sizeof(struct
teste));
E50
y->a=5;
y->b=6.2;
printf("\n\n\ty->a= %d, y->b = %.2f\n\n\t",
y->a,y->b);
}
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h> Esquematicamente, na memória
struct teste
{ y
int a; E50
float b; E10
};
int main()
{
struct teste *y;
a b
y = (struct teste *)malloc(1*sizeof(struct
5
teste));
E50
y->a=5;
y->b=6.2;
printf("\n\n\ty->a= %d, y->b = %.2f\n\n\t",
y->a,y->b);
}
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h> Esquematicamente, na memória
struct teste
{ y
int a; E50
float b; E10
};
int main()
{
struct teste *y;
a b
y = (struct teste *)malloc(1*sizeof(struct
5 6.2
teste));
E50
y->a=5;
y->b=6.2;
printf("\n\n\ty->a= %d, y->b = %.2f\n\n\t",
y->a,y->b);
}
Estruturas e Ponteiros
#include <stdio.h>
#include <stdlib.h> Esquematicamente, na memória
struct teste
{ y
int a; E50
float b; E10
};
int main()
{
struct teste *y;
a b
y = (struct teste *)malloc(1*sizeof(struct
5 6.2
teste));
E50
y->a=5;
y->b=6.2;
printf("\n\n\ty->a= %d, y->b = %.2f\n\n\t",
y->a,y->b);
}
MODULARIZAÇÃO.......
Modularização
• Modularização:
• Técnica aplicada na programação estruturada;
• Ferramenta para a elaboração de programas visando,
os aspectos de
• confiabilidade,
• legibilidade,
• manutenção e flexibilidade, etc.
• Vantagens
• Independência do módulo
• permite uma manutenção mais simples e evita efeitos
colaterais no restante do algoritmo;
• Corpo
• Contém declarações locais e os comandos.
Modularização
• Exemplo Simples de um programa com um
procedimento Cabeçalho e corpo do
procedimento soma
void soma(int num, int num1, int *valor)
{
*valor=num+num1;
}
int main( )
{
Chamada int a, b, resultado_soma;
do printf("\n\n\tDIGITE O PRIMEIRO VALOR:"); scanf("%d",&a);
procedim
ento
printf("\n\n\tDIGITE O SEGUNDO VALOR:"); scanf("%d",&b) ;
soma soma(a,b,&resultado_soma);
printf("\n\n\tO RESULTADO OBTIDO FOI:\n\n");
printf("\t%2d + %2d = %2d\n\n",a,b,resultado_soma);
system("PAUSE");
return 0;
}
Modularização
• Outro exemplo Simples de um programa com um
procedimento PROTÓTIO do procedimento soma
void soma(int num, int num1, int *valor) ;
int main( )
{
int a, b, resultado_soma;
printf("\n\n\tDIGITE O PRIMEIRO VALOR:"); scanf("%d",&a);
printf("\n\n\tDIGITE O SEGUNDO VALOR:"); scanf("%d",&b) ;
soma(a,b,&resultado_soma);
printf("\n\n\tO RESULTADO OBTIDO FOI:\n\n");
printf("\t%2d + %2d = %2d\n\n",a,b,resultado_soma);
system("PAUSE");
return 0; Cabeçalho e corpo do procedimento
} soma
void soma(int num, int num1, int *valor)
{
*valor=num+num1;
}
Modularização
• Passagem de Parâmetros
• Há duas formas básicas pelas quais um subprograma
pode acessar os dados que deve processar:
• pelo acesso direto a variáveis não locais
• declaradas em outro local, mas visível no subprograma
(variáveis globais)
• Passagem de Parâmetros
• Passagem por Valor:
• O valor do parâmetro real é usado para inicializar o
parâmetro formal correspondente
• Passagem de Parâmetros
• Passagem por Referência:
• Transmite um caminho de acesso,
• Normalmente um endereço de memória, para o
subprograma chamado