eccole qua.. la formattazione è leggermente diversa (è il file originale) ma sono identici nel resto

codice:
int main ()
{
  persona * pos;
  char cognome[NmaxCognome];
  char nome[NmaxNome];
  persona p;
  gruppo g;
  char s[2];

  inizializza_gruppo(g);   
  do {    
    cout << endl;
    cout << " i: inserisci\n";
    cout << " f: inserisci da file\n";
    cout << " n: stampa per ordine di nome\n";
    cout << " c: stampa per ordine di cognome\n";
    cout << " o: cerca per nome\n";
    cout << " g: cerca per cognome\n";
    cout << " e: esci\n";
    cout << "\nInserisci Scelta: ";
    cin >> s;

    switch (s[0]) {
    case 'i': leggi_persona(p); 
      inserisci_persona_gruppo(p,g);
      break;
    case 'f': file_acquire(argc, argv, p, g); break;
    case 'n': stampa_gruppo_per_nome (g); break;
    case 'c': stampa_gruppo_per_cognome (g); break;
    case 'o': leggi_nome(nome);
      pos=cerca_per_nome(nome,g); 
      if (pos==NULL)
	cout << "Non trovato\n";
      else {
	cout << "Trovato: "  << endl;
	stampa_persona(*pos);
      }
      break;
    case 'g': leggi_cognome(cognome);
      pos=cerca_per_cognome(cognome,g); 
      if (pos==NULL)
	cout << "Non trovato\n";
      else {
	cout << "Trovato: "  << endl;
	stampa_persona(*pos);
      }
      break;
    case 'e': break;
    default: cout << "scelta non capita\n";
    }
  }
  while ((s[0]=='i' || s[0]=='n' || s[0]=='c' || s[0]=='o' || s[0]=='g'));
}

codice:
void inserisci_persona_gruppo (persona & p, gruppo & g) 
{
  persona * tmp;
  tmp = new(persona);
  *tmp = p;
  g.nomi[g.npers] = tmp;
  g.cognomi[g.npers] = tmp;
  g.npers++;
  ordina_per_nome(g.nomi,g.npers);
  ordina_per_cognome(g.cognomi,g.npers);
}