Witam, jak to zwykle przy programowaniu mam kolejny problem;/ Robię program który między innymi tworzy łańcuchy powiązań miedzy ludźmi i wybiera spośród nich najdłuższy. Wygląda to mniej więcej tak:
Ala i Michał są przyjaciółmi
Kasia i Michał są przyjaciółmi
Paweł i Marek są przyjaciółmi
najdłuższy łańcuch: Ala-Michał- Kasia
Program zrobiłem za pomocą struktur tak, że wiadomo jakich przyjaciół ma dana osoba oraz ilu ich ma. Niestety nie mam żadnej koncepcji żeby zrobić ten łańcuch. Będę bardzo wdzięczny za jakiś pomysł.
Kod programu:
//============================================================================
// Name : Przyjaciele.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
struct dane{
char* imie;
int wiek;
char* przyjaciele[99];
int ile_przyjaciol;
char* wrogowie[99];
int ile_wrogow;
} ;
int main() {
struct dane osoby[1000];
char* tab[10];
char* imie_max;
int i,j,w,z,bonus,max,suma,l_osoby,x;
float srednia,licznik;
FILE* plik;
char* tekst;
tekst = (char*) malloc( sizeof(char) );
char *n;
z=0;
l_osoby=0;
j=0;
plik = fopen("xxx.txt", "r");
while (feof(plik)==false){
i=0;
n=fgets( tekst, 100, plik );
///printf("%s\n",tekst);
char* k = tekst;
while (k != NULL) {
char* l = strchr(k+1,' ');
if (l != NULL) *l = '\0';
////cout << k << endl;
bonus=strlen(k);
if (k[bonus - 1] == '\n')
k[bonus - 1] = '\0';
tab[i]=k;
i=i+1;
if (l != NULL) k = l+1;
else k=NULL;
}
////////////osoby////////////////
if (strlen(tab[0])==5){
l_osoby=l_osoby+1;
osoby[j].imie=strdup(tab[1]);
osoby[j].wiek=atof(tab[2]);
/// printf("%d\n",j);
/// printf("imie %s\n",osoby[j].imie);
////printf("wiek %d\n",osoby[j].wiek);
////printf("\n");
}
///////////////////////////////////
/////////////////przyjaciele/////////////////////
if (strlen(tab[0])==11){
z=z+1;
///printf("%s\n",tab[0]);
for (i=0;i<=j-z;i++){
w=0;
//////////PRZYJACIELE////////////////////
if (osoby[i].imie==string(tab[1])){
while (osoby[i].przyjaciele[w]!=NULL){
w=w+1;
}
osoby[i].przyjaciele[w]=strdup(tab[2]);
osoby[i].ile_przyjaciol=w+1;
}
if (osoby[i].imie==string(tab[2])){
while (osoby[i].przyjaciele[w]!=NULL){
w=w+1;
}
osoby[i].przyjaciele[w]=strdup(tab[1]);
osoby[i].ile_przyjaciol=w+1;
}
}
}
/////////////////////////WROGOWIE/////////////////////
if (strlen(tab[0])==7){
z=z+1;
///printf("%s\n",tab[0]);
for (i=0;i<=j-z;i++){
w=0;
if (osoby[i].imie==string(tab[1])){
while (osoby[i].wrogowie[w]!=NULL){
w=w+1;
}
osoby[i].wrogowie[w]=strdup(tab[2]);
osoby[i].ile_wrogow=w+1;
}
if (osoby[i].imie==string(tab[2])){
while (osoby[i].wrogowie[w]!=NULL){
w=w+1;
}
osoby[i].wrogowie[w]=strdup(tab[1]);
osoby[i].ile_wrogow=w+1;
}
}
}
/////////////////////////////////////////
j=j+1;
}
/// printf("\n");
////printf("%d\n",j);
for (i=0;i<=j-z;i++){
printf("imie %s\n",osoby[i].imie);
printf("wiek %d\n",osoby[i].wiek);
printf("przyjaciel %s\n",osoby[i].przyjaciele[0]);
printf("ilosc przyjaciol: %d\n",osoby[i].ile_przyjaciol);
///printf("drugi przyjaciel Ali %s\n",osoby[i].przyjaciele[1]);
printf("\n");
}
////zadania programu///////////////
////najwiecej przyjaciol///////////
max=0;
for (i=0;i<=j-1;i++){
if(osoby[i].ile_przyjaciol>=max){
max=osoby[i].ile_przyjaciol;
imie_max=osoby[i].imie;
}
}
if (max==0){
printf("najwiecej przyjaciol: brak\n");
}else{
printf("najwiecej przyjaciol: %s\n",imie_max);
}
/////////////////////////
////najwiecej wrogow///////////
max=0;
for (i=0;i<=j-1;i++){
if(osoby[i].ile_wrogow>=max){
max=osoby[i].ile_wrogow;
imie_max=osoby[i].imie;
}
}
if (max==0){
printf("najwiecej wrogow: brak\n");
}else{
printf("najwiecej wrogow: %s\n",imie_max);
}
/////////////////////////
//////sredni wiek bez przyjaciol////////////
licznik=0;
suma=0;
srednia=0;
for (i=0;i<=j-1;i++){
if((osoby[i].ile_przyjaciol==0) && (osoby[i].imie!=NULL)){
suma=suma+osoby[i].wiek;
licznik=licznik+1;
}
}
srednia=suma/licznik;
printf("sredni wiek: %.1lf\n",srednia);
printf("liczba wczytanych osob: %d\n",l_osoby);
return 0;
}
Zawartość pliku z których program pobiera dane:
OSOBA Ala 18
OSOBA Iza 17
OSOBA Jan 16
OSOBA Marta 15
OSOBA Marcinek 13
OSOBA Marcin 13
OSOBA Gienek 12
PRZYJACIELE Ala Jan
PRZYJACIELE Marta Iza
PRZYJACIELE Marcin Ala
WROGOWIE Jan Ola