Guião laboratorial n.º 2 – exercício 3
Pretende-se criar uma agenda para armazenar números de telefone (nome, rede e número).
a) Crie um tipo estruturado que lhe permita armazenar essa informação.
b) Declare uma tabela que lhe permita armazenar 100 números de telefones. A tabela deve ser uma variável local da função main().
c) Desenvolva uma função que inicialize uma estrutura do tipo telefone. É passado como argumento um ponteiro para a estrutura a inicializar. Os dados são fornecidos pelo utilizador.
d) Desenvolva uma função que liste todas as pessoas cujo telefone pertença a uma determinada rede. A função recebe como argumentos um ponteiro para o início da tabela, o número de elementos que esta contém e a indicação de qual a rede em causa.
e) Desenvolva uma função que descubra todas as pessoas que vivem na mesma casa. Considere que duas pessoas vivem na mesma casa se tiverem o mesmo número de telefone;
f) Desenvolva uma função para retirar da tabela a informação relativa a uma pessoa cujo nome é passado como parâmetro. Pode assumir que os nomes são únicos.
g) Criar um programa que inicialize tabela com informação sobre determinado número de pessoas (o número de pessoas é introduzido através da linha de comando). A seguir deve listar todas as pessoas que pertencem a uma determinada rede (cuja identificação também é passado como argumento da linha de comando). Finalmente, o programa deve pedir ao utilizador que introduza o nome de uma pessoa para ser retirada da tabela.
#include <stdio.h> #include <stdlib.h> #include <string.h> #define TAM 100 struct agenda{ char nome[20]; char rede[20]; int numero; }; void preenhcer(struct agenda *a, int *t, int tam){ char r; do{ printf("\nQuer inserir?"); scanf(" %c", &r); if(r=='s'){ printf("\n---------------------------"); printf("\nQual o nome?"); scanf(" %[^\n]", &(a->nome)); printf("\nQual a rede?"); scanf(" %[^\n]", &(a->rede)); printf("\nQual o numer?"); scanf(" %d", &(a->numero)); (*t)++; a=a+(*t); } }while(r=='s' && *t < tam); } void listar(struct agenda *l, int *t){ int i, a = *t; for(i=0;i<a;i++, l++){ printf("\n%s", l->nome); printf("\n%s", l->rede); printf("\n%d", l->numero); } } void listar_filtro(struct agenda *l, int t, char *f){ struct agenda *k; int i; printf("\n--------------------------- listar com filtro1 %s", f); for(i=0, k=l; i<t; i++, k++){ if(strcmp(f, k->rede)==0){ printf("\n%s", k->nome); printf("\n%s", k->rede); printf("\n%d", k->numero); } } } void listar_filtro2(struct agenda *r, int t, int f){ int i; printf("\n--------------------------- listar com filtro2 %d", f); for(i=0;i<t; i++, r++){ if(r->numero == f){ printf("\n %d: %s", i, r->nome); } } r=0; } int retirar(struct agenda *l, int t, char *f){ struct agenda *k; int i; printf("\n--------------------------- retriar da lista: %s", f); for(i=0, k=l; i<t; i++, k++, l++){ if(strcmp(f, k->nome)==0){ k[i]=k[i+1]; t=t-1; } } return t; } void listaR(struct agenda *l, int t){ int i; for(i=0;i<t;i++, l++){ printf("\n%s", l->nome); printf("\n%s", l->rede); printf("\n%d", l->numero); } } int main() { //alinea a struct agenda guarda[TAM]; int t=0; preenhcer(guarda, &t, TAM); //listar(guarda, t); //alinea d - listar filtro char filtro[20]="meo"; printf("total: %d", t); //listar_filtro(guarda, t, filtro); //alinea e - listar filtro mesma casa int filtro2=91; //listar_filtro2(guarda, t, filtro2); //alinea f char nome_retirar[20]="Pedro"; int auxR; auxR=retirar(guarda, t, nome_retirar); t=auxR; listaR(guarda, t); return 0; }
entendo que a alinea g) é igual a todas as outras por isso não a fiz!
0 thoughts on “Guião laboratorial n.º 2 – exercício 3”