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!

Tags :