Mudanças entre as edições de "AULA 21 - Programação 1 - Engenharia"
(3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 45: | Linha 45: | ||
} | } | ||
− | /* retorna o total de jogos na mesma cidade */ | + | /* retorna o total de jogos na mesma cidade e estado*/ |
− | int total_jogos_mesmo_local(char estado[ | + | int total_jogos_mesmo_local(char estado[], char cidade[]) |
{ | { | ||
} | } | ||
Linha 55: | Linha 55: | ||
int vetor[6] = {8,12,23,29,56,59}; | int vetor[6] = {8,12,23,29,56,59}; | ||
− | if (teste_jogo_sena()==1) { | + | if (teste_jogo_sena(vetor)==1) { |
printf("Este jogo consta no histórico!!\n"); | printf("Este jogo consta no histórico!!\n"); | ||
} | } | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | Solução: | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | #include <string.h> | ||
+ | |||
+ | #define TAM_MAX 5 | ||
+ | |||
+ | struct tipo_local{ | ||
+ | char rua[30]; | ||
+ | int numero; | ||
+ | char cidade[30]; | ||
+ | char estado[3]; | ||
+ | }; | ||
+ | |||
+ | struct tipo_jogo { | ||
+ | int ganhadores_sena; | ||
+ | float premio_sena; | ||
+ | struct tipo_local local; | ||
+ | int resultado[6]; | ||
+ | } Jogos[TAM_MAX] = | ||
+ | { | ||
+ | { 1, 12500.50, {"Rua Pedro da Silva", 30, "Florianopolis", "SC"}, {1,2,3,4,5,6}}, | ||
+ | { 4, 1563000.00, {"Rua Joao da Silva", 30, "Cruz Alta", "RS"},{10,20,33,44,54,6}}, | ||
+ | { 3, 232000.30, {"Rua Maria da Silva", 30, "Curitiba", "PR"}, {1,2,3,4,5,43}}, | ||
+ | { 2, 1300000.45, {"Rua Jose da Silva", 30, "Tijucas", "SC"}, {1,2,3,44,5,6}}, | ||
+ | { 10, 1800000.60, {"Rua Ana da Silva", 30, "Tijucas", "SC"}, {1,2,33,4,5,6}}, | ||
+ | }; | ||
+ | |||
+ | /* retorna a media dos premios da sena (prêmio por por pessoa) em todos os jogos | ||
+ | que ocorreram em um dado estado*/ | ||
+ | |||
+ | float media_premio_sena(char *estado) | ||
+ | { | ||
+ | int i, cont_acertos=0; | ||
+ | float soma_ac=0; | ||
+ | |||
+ | for(i=0;i<TAM_MAX;i++){ | ||
+ | if( strcmp(estado, Jogos[i].local.estado) == 0 ) { | ||
+ | soma_ac= soma_ac + Jogos[i].premio_sena; | ||
+ | cont_acertos = cont_acertos + Jogos[i].ganhadores_sena; | ||
+ | } | ||
+ | } | ||
+ | printf("Parcial de ganhadores %d em %s - Total de Premiação no Estado %.2f\n", cont_acertos, estado, soma_ac); | ||
+ | |||
+ | if (cont_acertos!=0) | ||
+ | return soma_ac/cont_acertos; | ||
+ | else | ||
+ | 0; | ||
+ | } | ||
+ | |||
+ | /* retorna | ||
+ | 0 se NÃO existe jogo com sena existente no vetor passado | ||
+ | 1 se existe jogo com sena | ||
+ | */ | ||
+ | |||
+ | int teste_jogo_sena(int *p) | ||
+ | { | ||
+ | /* supondo que o vetor vem de forma correta (sem repetição de números e todos números válidos (1 a 60) */ | ||
+ | int i,j,k,ocorrencias; | ||
+ | int existe_jogo =0; | ||
+ | |||
+ | for (i=0;i<TAM_MAX;i++){ /* loop para acessar cada estrutura do vetor Jogos */ | ||
+ | ocorrencias=0; | ||
+ | for (j=0;j<6;j++) { /* loop para acessar cada número do vetor p[j] do vetor p */ | ||
+ | for (k=0;k<6;k++) { /* loop para pesquisar a existência do número p[j] no vetor resultado */ | ||
+ | if (Jogos[i].resultado[k]==p[j]) { | ||
+ | ocorrencias++; | ||
+ | break; /* encerrar a busca do número p[j] no vetor Jogos.resultado - o número foi encontrado*/ | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | if (ocorrencias==6) | ||
+ | break; /* não precisa continuar - encontramos uma ocorrência do vetor p em Jogos - note que o código poderia ser otimizado ainda mais*/ | ||
+ | } | ||
+ | if (ocorrencias==6) | ||
+ | return 1; | ||
+ | else | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | /* retorna o total de jogos na mesma cidade e estado */ | ||
+ | int total_jogos_mesmo_local(char estado[], char cidade[]) | ||
+ | { | ||
+ | int i, contador_jogos=0; | ||
+ | |||
+ | for (i=0;i<TAM_MAX;i++){ /* loop para acessar cada estrutura do vetor Jogos */ | ||
+ | if (strcmp(estado, Jogos[i].local.estado) ==0 && strcmp(cidade, Jogos[i].local.cidade)==0) { | ||
+ | contador_jogos++; | ||
+ | } | ||
+ | } | ||
+ | return contador_jogos; | ||
+ | } | ||
+ | |||
+ | void main() | ||
+ | { | ||
+ | /* testar as funções aqui */ | ||
+ | int vetor1[6] = {8,12,23,29,56,59}; | ||
+ | int vetor2[6] = {1,2,33,4,5,6}; | ||
+ | |||
+ | if (teste_jogo_sena(vetor1)==1) | ||
+ | printf("O jogo do vetor 1 consta no histórico!!\n"); | ||
+ | else | ||
+ | printf("O jogo do vetor 1 não consta do histórico!!\n"); | ||
+ | |||
+ | if (teste_jogo_sena(vetor2)==1) | ||
+ | printf("O jogo do vetor 2 consta no histórico!!\n"); | ||
+ | else | ||
+ | printf("O jogo do vetor 2 não consta do histórico!!\n"); | ||
+ | |||
+ | /* teste da função media_premio_sena() */ | ||
+ | printf("Estado %s Média %.2f\n", "SC", media_premio_sena("SC")); | ||
+ | printf("Estado %s Média %.2f\n", "PR", media_premio_sena("PR")); | ||
+ | |||
+ | /* teste da função total_jogos_mesmo_local */ | ||
+ | |||
+ | printf("Total de Jogos em Tijucas - SC = %d\n",total_jogos_mesmo_local("SC", "Tijucas")); | ||
+ | |||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | EXERCÌCIO 2 | ||
+ | |||
+ | Considere o mesmo exercício 2. Faça uma modificação para fornecer o vetor a ser testado com ''teste_jogo_sena'' na linha de comando. O vetor a ser repassado para a função deve ser alocado dinamicamente. | ||
+ | |||
+ | mega_sena 1 20 33 4 5 6 | ||
+ | |||
+ | Solução | ||
+ | |||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | #include <string.h> | ||
+ | #include <stdlib.h> | ||
+ | |||
+ | #define TAM_MAX 5 | ||
+ | |||
+ | struct tipo_local{ | ||
+ | char rua[30]; | ||
+ | int numero; | ||
+ | char cidade[30]; | ||
+ | char estado[3]; | ||
+ | }; | ||
+ | |||
+ | struct tipo_jogo { | ||
+ | int ganhadores_sena; | ||
+ | float premio_sena; | ||
+ | struct tipo_local local; | ||
+ | int resultado[6]; | ||
+ | } Jogos[TAM_MAX] = | ||
+ | { | ||
+ | { 1, 12500.50, {"Rua Pedro da Silva", 30, "Florianopolis", "SC"}, {1,2,3,4,5,6}}, | ||
+ | { 4, 1563000.00, {"Rua Joao da Silva", 30, "Cruz Alta", "RS"},{10,20,33,44,54,6}}, | ||
+ | { 3, 232000.30, {"Rua Maria da Silva", 30, "Curitiba", "PR"}, {1,2,3,4,5,43}}, | ||
+ | { 2, 1300000.45, {"Rua Jose da Silva", 30, "Tijucas", "SC"}, {1,2,3,44,5,6}}, | ||
+ | { 10, 1800000.60, {"Rua Ana da Silva", 30, "Tijucas", "SC"}, {1,2,33,4,5,6}}, | ||
+ | }; | ||
+ | |||
+ | /* retorna a media dos premios da sena (prêmio por por pessoa) em todos os jogos | ||
+ | que ocorreram em um dado estado*/ | ||
+ | |||
+ | float media_premio_sena(char *estado) | ||
+ | { | ||
+ | int i, cont_acertos=0; | ||
+ | float soma_ac=0; | ||
+ | |||
+ | for(i=0;i<TAM_MAX;i++){ | ||
+ | if( strcmp(estado, Jogos[i].local.estado) == 0 ) { | ||
+ | soma_ac= soma_ac + Jogos[i].premio_sena; | ||
+ | cont_acertos = cont_acertos + Jogos[i].ganhadores_sena; | ||
+ | } | ||
+ | } | ||
+ | printf("Parcial de ganhadores %d em %s - Total de Premiação no Estado %.2f\n", cont_acertos, estado, soma_ac); | ||
+ | |||
+ | if (cont_acertos!=0) | ||
+ | return soma_ac/cont_acertos; | ||
+ | else | ||
+ | 0; | ||
+ | } | ||
+ | |||
+ | /* retorna | ||
+ | 0 se NÃO existe jogo com sena existente no vetor passado | ||
+ | 1 se existe jogo com sena | ||
+ | */ | ||
+ | |||
+ | int teste_jogo_sena(int *p) | ||
+ | { | ||
+ | /* supondo que o vetor vem de forma correta (sem repetição de números e todos números válidos (1 a 60) */ | ||
+ | int i,j,k,ocorrencias; | ||
+ | int existe_jogo =0; | ||
+ | |||
+ | for (i=0;i<TAM_MAX;i++){ /* loop para acessar cada estrutura do vetor Jogos */ | ||
+ | ocorrencias=0; | ||
+ | for (j=0;j<6;j++) { /* loop para acessar cada número do vetor p[j] do vetor p */ | ||
+ | for (k=0;k<6;k++) { /* loop para pesquisar a existência do número p[j] no vetor resultado */ | ||
+ | if (Jogos[i].resultado[k]==p[j]) { | ||
+ | ocorrencias++; | ||
+ | break; /* encerrar a busca do número p[j] no vetor Jogos.resultado - o número foi encontrado*/ | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | if (ocorrencias==6) | ||
+ | break; /* não precisa continuar - encontramos uma ocorrência do vetor p em Jogos - note que o código poderia ser otimizado ainda mais*/ | ||
+ | } | ||
+ | if (ocorrencias==6) | ||
+ | return 1; | ||
+ | else | ||
+ | return 0; | ||
+ | } | ||
+ | |||
+ | /* retorna o total de jogos na mesma cidade e estado */ | ||
+ | int total_jogos_mesmo_local(char estado[], char cidade[]) | ||
+ | { | ||
+ | int i, contador_jogos=0; | ||
+ | |||
+ | for (i=0;i<TAM_MAX;i++){ /* loop para acessar cada estrutura do vetor Jogos */ | ||
+ | if (strcmp(estado, Jogos[i].local.estado) ==0 && strcmp(cidade, Jogos[i].local.cidade)==0) { | ||
+ | contador_jogos++; | ||
+ | } | ||
+ | } | ||
+ | return contador_jogos; | ||
+ | } | ||
+ | |||
+ | void main(int argc, char *argv[]) | ||
+ | { | ||
+ | /* testar as funções aqui */ | ||
+ | |||
+ | int i, *p_vetor; | ||
+ | |||
+ | /* omitido o teste de argc por simplicidade - admitido que não haverá erro na passagem de parâmetros */ | ||
+ | if ((p_vetor=(int *) malloc (6*sizeof(int)))==NULL) | ||
+ | exit(1); /* não conseguiu alocar ... */ | ||
+ | |||
+ | for (i=0;i<6;i++) { | ||
+ | p_vetor[i] = atoi(argv[i+1]); /* notar que começa em i+1 pois a string apontada por argv na posição 0 é o nome do arquivo executável */ | ||
+ | printf("valor armazenado %d \n", p_vetor[i]); | ||
+ | } | ||
+ | |||
+ | if (teste_jogo_sena(p_vetor)==1) | ||
+ | printf("O jogo do vetor passado consta no histórico!!\n"); | ||
+ | else | ||
+ | printf("O jogo do vetor passado NÂO consta do histórico!!\n"); | ||
+ | |||
} | } | ||
Linha 70: | Linha 316: | ||
Exercício de lista ligada | Exercício de lista ligada | ||
− | |||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> |
Edição atual tal como às 15h46min de 3 de março de 2016
Exercícios Adicionais de Preparação para Avaliação
EXERCÍCIO 1:
Considere que o vetor de estrutura "Jogos" representa um histórico de jogos da mega-sena. Implementar as funções indicadas abaixo. Usar funções de operação com strings da biblioteca.
#include <stdio.h>
struct tipo_local{
char rua[30];
int numero;
char cidade[30];
char estado[3];
};
struct tipo_jogo {
int ganhadores_sena;
float premio_sena;
struct tipo_local local;
int resultado[6];
} Jogos[5] =
{
{ 1, 12500.50, {"Rua Pedro da Silva", 30, "Florianopolis", "SC"}, {1,2,3,4,5,6}},
{ 4, 1563000.00, {"Rua Joao da Silva", 30, "Cruz Alta", "RS"},{10,20,33,44,54,6}},
{ 3, 232000.30, {"Rua Maria da Silva", 30, "Curitiba", "PR"}, {1,2,3,4,5,43}},
{ 2, 1300000.45, {"Rua Jose da Silva", 30, "Tijucas", "SC"}, {1,2,3,44,5,6}},
{ 10, 1800000.60, {"Rua Ana da Silva", 30, "Itajai", "SC"}, {1,2,33,4,5,6}},
};
/* retorna a media dos premios da sena (prêmio por por pessoa) em todos os jogos
que ocorreram em um dado estado*/
float media_premio_sena(char *estado)
{
}
/* retorna
0 se NÃO existe jogo com sena existente no vetor passado
1 se existe jogo com sena
*/
int teste_jogo_sena(int *p)
{
}
/* retorna o total de jogos na mesma cidade e estado*/
int total_jogos_mesmo_local(char estado[], char cidade[])
{
}
void main()
{
/* testar as funções aqui */
int vetor[6] = {8,12,23,29,56,59};
if (teste_jogo_sena(vetor)==1) {
printf("Este jogo consta no histórico!!\n");
}
}
Solução:
#include <stdio.h>
#include <string.h>
#define TAM_MAX 5
struct tipo_local{
char rua[30];
int numero;
char cidade[30];
char estado[3];
};
struct tipo_jogo {
int ganhadores_sena;
float premio_sena;
struct tipo_local local;
int resultado[6];
} Jogos[TAM_MAX] =
{
{ 1, 12500.50, {"Rua Pedro da Silva", 30, "Florianopolis", "SC"}, {1,2,3,4,5,6}},
{ 4, 1563000.00, {"Rua Joao da Silva", 30, "Cruz Alta", "RS"},{10,20,33,44,54,6}},
{ 3, 232000.30, {"Rua Maria da Silva", 30, "Curitiba", "PR"}, {1,2,3,4,5,43}},
{ 2, 1300000.45, {"Rua Jose da Silva", 30, "Tijucas", "SC"}, {1,2,3,44,5,6}},
{ 10, 1800000.60, {"Rua Ana da Silva", 30, "Tijucas", "SC"}, {1,2,33,4,5,6}},
};
/* retorna a media dos premios da sena (prêmio por por pessoa) em todos os jogos
que ocorreram em um dado estado*/
float media_premio_sena(char *estado)
{
int i, cont_acertos=0;
float soma_ac=0;
for(i=0;i<TAM_MAX;i++){
if( strcmp(estado, Jogos[i].local.estado) == 0 ) {
soma_ac= soma_ac + Jogos[i].premio_sena;
cont_acertos = cont_acertos + Jogos[i].ganhadores_sena;
}
}
printf("Parcial de ganhadores %d em %s - Total de Premiação no Estado %.2f\n", cont_acertos, estado, soma_ac);
if (cont_acertos!=0)
return soma_ac/cont_acertos;
else
0;
}
/* retorna
0 se NÃO existe jogo com sena existente no vetor passado
1 se existe jogo com sena
*/
int teste_jogo_sena(int *p)
{
/* supondo que o vetor vem de forma correta (sem repetição de números e todos números válidos (1 a 60) */
int i,j,k,ocorrencias;
int existe_jogo =0;
for (i=0;i<TAM_MAX;i++){ /* loop para acessar cada estrutura do vetor Jogos */
ocorrencias=0;
for (j=0;j<6;j++) { /* loop para acessar cada número do vetor p[j] do vetor p */
for (k=0;k<6;k++) { /* loop para pesquisar a existência do número p[j] no vetor resultado */
if (Jogos[i].resultado[k]==p[j]) {
ocorrencias++;
break; /* encerrar a busca do número p[j] no vetor Jogos.resultado - o número foi encontrado*/
}
}
}
if (ocorrencias==6)
break; /* não precisa continuar - encontramos uma ocorrência do vetor p em Jogos - note que o código poderia ser otimizado ainda mais*/
}
if (ocorrencias==6)
return 1;
else
return 0;
}
/* retorna o total de jogos na mesma cidade e estado */
int total_jogos_mesmo_local(char estado[], char cidade[])
{
int i, contador_jogos=0;
for (i=0;i<TAM_MAX;i++){ /* loop para acessar cada estrutura do vetor Jogos */
if (strcmp(estado, Jogos[i].local.estado) ==0 && strcmp(cidade, Jogos[i].local.cidade)==0) {
contador_jogos++;
}
}
return contador_jogos;
}
void main()
{
/* testar as funções aqui */
int vetor1[6] = {8,12,23,29,56,59};
int vetor2[6] = {1,2,33,4,5,6};
if (teste_jogo_sena(vetor1)==1)
printf("O jogo do vetor 1 consta no histórico!!\n");
else
printf("O jogo do vetor 1 não consta do histórico!!\n");
if (teste_jogo_sena(vetor2)==1)
printf("O jogo do vetor 2 consta no histórico!!\n");
else
printf("O jogo do vetor 2 não consta do histórico!!\n");
/* teste da função media_premio_sena() */
printf("Estado %s Média %.2f\n", "SC", media_premio_sena("SC"));
printf("Estado %s Média %.2f\n", "PR", media_premio_sena("PR"));
/* teste da função total_jogos_mesmo_local */
printf("Total de Jogos em Tijucas - SC = %d\n",total_jogos_mesmo_local("SC", "Tijucas"));
}
EXERCÌCIO 2
Considere o mesmo exercício 2. Faça uma modificação para fornecer o vetor a ser testado com teste_jogo_sena na linha de comando. O vetor a ser repassado para a função deve ser alocado dinamicamente.
mega_sena 1 20 33 4 5 6
Solução
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define TAM_MAX 5
struct tipo_local{
char rua[30];
int numero;
char cidade[30];
char estado[3];
};
struct tipo_jogo {
int ganhadores_sena;
float premio_sena;
struct tipo_local local;
int resultado[6];
} Jogos[TAM_MAX] =
{
{ 1, 12500.50, {"Rua Pedro da Silva", 30, "Florianopolis", "SC"}, {1,2,3,4,5,6}},
{ 4, 1563000.00, {"Rua Joao da Silva", 30, "Cruz Alta", "RS"},{10,20,33,44,54,6}},
{ 3, 232000.30, {"Rua Maria da Silva", 30, "Curitiba", "PR"}, {1,2,3,4,5,43}},
{ 2, 1300000.45, {"Rua Jose da Silva", 30, "Tijucas", "SC"}, {1,2,3,44,5,6}},
{ 10, 1800000.60, {"Rua Ana da Silva", 30, "Tijucas", "SC"}, {1,2,33,4,5,6}},
};
/* retorna a media dos premios da sena (prêmio por por pessoa) em todos os jogos
que ocorreram em um dado estado*/
float media_premio_sena(char *estado)
{
int i, cont_acertos=0;
float soma_ac=0;
for(i=0;i<TAM_MAX;i++){
if( strcmp(estado, Jogos[i].local.estado) == 0 ) {
soma_ac= soma_ac + Jogos[i].premio_sena;
cont_acertos = cont_acertos + Jogos[i].ganhadores_sena;
}
}
printf("Parcial de ganhadores %d em %s - Total de Premiação no Estado %.2f\n", cont_acertos, estado, soma_ac);
if (cont_acertos!=0)
return soma_ac/cont_acertos;
else
0;
}
/* retorna
0 se NÃO existe jogo com sena existente no vetor passado
1 se existe jogo com sena
*/
int teste_jogo_sena(int *p)
{
/* supondo que o vetor vem de forma correta (sem repetição de números e todos números válidos (1 a 60) */
int i,j,k,ocorrencias;
int existe_jogo =0;
for (i=0;i<TAM_MAX;i++){ /* loop para acessar cada estrutura do vetor Jogos */
ocorrencias=0;
for (j=0;j<6;j++) { /* loop para acessar cada número do vetor p[j] do vetor p */
for (k=0;k<6;k++) { /* loop para pesquisar a existência do número p[j] no vetor resultado */
if (Jogos[i].resultado[k]==p[j]) {
ocorrencias++;
break; /* encerrar a busca do número p[j] no vetor Jogos.resultado - o número foi encontrado*/
}
}
}
if (ocorrencias==6)
break; /* não precisa continuar - encontramos uma ocorrência do vetor p em Jogos - note que o código poderia ser otimizado ainda mais*/
}
if (ocorrencias==6)
return 1;
else
return 0;
}
/* retorna o total de jogos na mesma cidade e estado */
int total_jogos_mesmo_local(char estado[], char cidade[])
{
int i, contador_jogos=0;
for (i=0;i<TAM_MAX;i++){ /* loop para acessar cada estrutura do vetor Jogos */
if (strcmp(estado, Jogos[i].local.estado) ==0 && strcmp(cidade, Jogos[i].local.cidade)==0) {
contador_jogos++;
}
}
return contador_jogos;
}
void main(int argc, char *argv[])
{
/* testar as funções aqui */
int i, *p_vetor;
/* omitido o teste de argc por simplicidade - admitido que não haverá erro na passagem de parâmetros */
if ((p_vetor=(int *) malloc (6*sizeof(int)))==NULL)
exit(1); /* não conseguiu alocar ... */
for (i=0;i<6;i++) {
p_vetor[i] = atoi(argv[i+1]); /* notar que começa em i+1 pois a string apontada por argv na posição 0 é o nome do arquivo executável */
printf("valor armazenado %d \n", p_vetor[i]);
}
if (teste_jogo_sena(p_vetor)==1)
printf("O jogo do vetor passado consta no histórico!!\n");
else
printf("O jogo do vetor passado NÂO consta do histórico!!\n");
}
Listas Ligadas
Por vezes não se conhece o tamanho dos dados que se vai manipular e o uso de uma lista pode ser conveniente para armazená-los. Um sistema de estoque de produtos, por exemplo, poderia ser armazenado na forma de uma lista. O exercício a seguir explora esta estrutura.
Exercício de lista ligada
#include <stdlib.h>
#include <stdio.h>
/*========================*/
/** OPERAÇÔES COM LISTA LIGADA ******/
/*========================*/
/*
tipos e variáveis globais
*/
struct TProduto{
int codigo;
struct TProduto *next;
} *head, *tail;
/*
adiciona item a cabeça da lista
retorna 0 se tudo ok e -1 se erro
*/
int add_nodo_head(int codigo)
{
}
/*
adiciona item ao final lista
retorna 0 se tudo ok e -1 se erro
*/
int add_nodo_tail(int codigo)
{
struct TProduto *p = malloc (sizeof(struct TProduto));
if (!p)
return -1;
p->codigo = codigo;
p->next = NULL;
if (tail==NULL) {
/* lista vazia */
tail = head = p;
}else {
/*lista não vazia */
tail->next = p;
tail = p;
}
return 0;
}
/*
imprimir lista
*/
void print_list()
{
}
main()
{
int i;
head = tail = NULL;
print_list ();
for (i=0;i<5;i++)
add_nodo_tail(i);
print_list ();
}
Exercício 1
No exercício anterior:
- Implementar a função add_node_head()
- Implementar a função print_list()
- Implementar a função delete_node(int codigo)
Exercício 2
Considere um sistema de estoque de uma livraria representado por uma tabela conforme abaixo. Elabore as funções para adicionar, remover e listar um livro na/da tabela. Considere que uma entrada livre possui o ponteiro titulo igual a NULL.
#include <stdio.h>
#define TAM 10
struct tLivro {
char *titulo;
char *autor;
char *isbn;
float *preco;
int estoque;
};
typedef struct tLivro TLivro;
TLivro Livros[10]; /* iniciar a tabela com NULL */
TLivro *retornar_entrada_livre()
{
}
int adicionar_livro()
{
char aux_isbn[20];
TLivro *p;
/* Ler ISBN */
if(verificar_livro_existe(aux_isbn)==1)
return 0;
if((p=retornar_entrada_livre())==NULL)
return -1;
/* Ler os dados do livro pelo teclado e colocar na estrutura
apontada por p*/
}
/* retorna 0 se removido com sucesso e -1 caso contrário */
int remover_livro(char *isbn)
{
}
void imprimir_dados_livro(char *isbn)
{
}
main()
{
/* testar as funções aqui */
}
Exercício 3
Refazer o exercício anterior usando filas.
Exercício 5
Seja a seguinte estrutura:
struct tipo_carro {
char *marca;
char *modelo;
int potencia;
};
typedef tipo_carro tcarro;
Implpementar as funções abaixo:
/* cria dinamicamente uma estrutura,
preenche os dados dos campos
e retorna um ponteiro para a estrutura criada
Retorna NULL caso não consiga alocar área
*/
tcarro *ler_carro()
{
}
/*
recebe dois ponteiros para estruturas do tipo carro e
retorna -1 caso pelo menos um dos ponteiros seja NULL,
retorna 0 se os modelos forem iguais
e retorna 1 se os modelos forem diferentes */
int compara_modeloa(tcarro *p1, tcarro *p2)
{
}
/* libera a área da estrutura passada como parâmetro */
void deleta_estrutura(tcarro *p)
{
}
main()
{
/*testar as funções aqui */
/* criar dois carros */
/* comparar o modelo dos dois carros. Testar o retorno */
/* liberar a área das estruturas */
}