Rozwiązałem zadanie 6 z tegorocznej mautry z inforamtyki, ale wydaje mi sie ze zrobilem to źle bo ilosc kodu jest chyba za duza i na penwo da sie to zrobic lepiej, szybciej, wydajniej.
link do arkusza:
http://pliki.serwisyregionalne.pl/maturainformatykapp2.pdf
a tutaj kod:
#include<iostream>
#include<fstream>
#include<string.h>
#include<stdio.h>
#include <sstream>
using namespace std;
int main ()
{
fstream plik;
string napis;
char *x;
int j = 0;
string dzieci[180][7];
/*
1-180 - Dzieci
0 - Identyfikator
1 - Syn albo Córka
2 - Imie dziecka
3 - Data urodzenia
4 - Waga
5 - Wzrost
6 - Identyfikator matki
*/
plik.open("noworodki.txt",ios::in);
while(getline(plik,napis)) {
char * cstr;
cstr = new char [napis.size()+1];
strcpy(cstr,napis.c_str());
x = strtok(cstr," ");
int k = 0;
while(x != NULL)
{
dzieci[j][k]=x;
x = strtok (NULL," ");
k++;
}
j++;
}
fstream plik2;
string napis2;
char *x2;
int j2 = 0;
string mamy[174][7];
/*
1-180 - Dzieci
0 - Identyfikator
1 - Imie matki
2 - Imie dziecka
*/
plik2.open("mamy.txt",ios::in);
while(getline(plik2,napis2)) {
char ciag2[napis2.length()];
for(int i=0;i<napis2.length();i++)
{
ciag2[i] = napis2[i];
}
x2 = strtok(ciag2," ");
int k = 0;
while(x2 != NULL)
{
mamy[j2][k]=x2;
x2 = strtok (NULL," ");
k++;
}
j2++;
}
/*------------------------------------A------------------------------------*/
int maxS=0;
int maxC=0;
int IDS;
int IDC;
for (int i=0;i<180;i++)
{
if (dzieci[i][1] == "s")
{
int wzrost = atoi(dzieci[i][5].c_str());
if (wzrost > maxS)
{
maxS = wzrost;
IDS = i;
}
}
else
{
int wzrost = atoi(dzieci[i][5].c_str());
if (wzrost > maxC)
{
maxC = wzrost;
IDC = i;
}
}
}
cout <<"A:"<<endl<< "najwyzszy chlopczyk ma na imie: " << dzieci[IDS][2]<< " i ma: "<<maxS<<"cm"<<endl;
cout << "najwyzsza dziewczynka ma na imie: " << dzieci[IDC][2]<< " i ma: "<<maxC<<"cm";
/*------------------------------------B------------------------------------*/
string dni[180][3];
/*
0 - Rok
1 - Miesiąc
2 - Dzien
*/
int max=0;
int ktore=0;
int ilW = 0;
string data;
int p=0;
for (int i=0;i<180;i++)
{
int dl = dzieci[i][3].length();
string tmp = dzieci[i][3];
char dataCiag[dl];
for (j=0;j<dl;j++)
{
dataCiag[j] = tmp[j];
}
x = strtok(dataCiag,"-"); /
int k=0;
while(x != NULL)
{
dni[p][k]=x;
x = strtok (NULL,"-");
k++;
}
p++;
}
cout << endl;
for (int i=0;i<179;i++)
{
ilW=1;
for (int j=i+1;j<179;j++)
{
if (atoi(dni[i][2].c_str()) == atoi(dni[j][2].c_str()))
{
ilW=ilW+1;
}
if (ilW > max)
{
ktore = atoi(dni[i][2].c_str());
data = "Rok: "+dni[i][0] +" Miesiac: "+dni[i][1] +" Dzien: " + dni[i][2];
max = ilW;
}
}
}
cout << "B:"<<endl<<"Najwiecej dzieci urodzilo sie w: "<<endl<<data<<endl<<"i bylo ich: "<<max<<endl;
/*------------------------------------C------------------------------------*/
int ile;
ile=0;
for (int i=0;i<174;i++)
{
if (atoi(mamy[i][2].c_str()) < 25)
{
ile++;
}
}
string mamySpel[174][3];
/*
0 - id
1 - imie
2 - wiek
*/
for (int i=0;i<174;i++)
{
if (atoi(mamy[i][2].c_str()) < 25)
{
string id = mamy[i][0];
char * cid;
cid = new char [id.size()+1];
strcpy(cid,id.c_str());
mamySpel[i][0] = cid;
string imie = mamy[i][1];
char * cimie;
cimie = new char [imie.size()+1];
strcpy(cimie,imie.c_str());
mamySpel[i][1] = cimie;
string lat = mamy[i][2];
char * clat;
clat = new char [lat.size()+1];
strcpy(clat,lat.c_str());
mamySpel[i][2] = clat;
}
}
cout << "C:"<<endl;
for (int i=0;i<180;i++)
{
if (atoi(dzieci[i][4].c_str()) > 4000)
{
for (int j=0;j<180;j++)
{
if (atoi(dzieci[i][6].c_str()) == atoi(mamySpel[j][0].c_str()))
{
cout <<"Imie matki: "<<mamySpel[j][1]<<endl;
}
}
}
}
/*------------------------------------D------------------------------------*/
cout << "D: "<<endl;
for (int i=0;i<180;i++)
{
for (int j=0;j<174;j++)
{
if (atoi(dzieci[i][6].c_str()) == atoi(mamy[j][0].c_str()))
{
if (dzieci[i][2] == mamy[j][1] && dzieci[i][1] == "c")
{
cout <<"Imie: "<< dzieci[i][2]<<" dziecko urodzilo sie: "<< dzieci[i][3]<<endl;
}
}
}
}
/*------------------------------------E------------------------------------*/
cout << "E: "<<endl;
for (int i=0;i<180;i++)
{
for (int j=i+1;j<180;j++)
{
if (dzieci[i][6] == dzieci[j][6])
{
if (dzieci[i][3] == dzieci[j][3])
{
cout << dzieci[i][2] << " i "<< dzieci[j][2]<<" urodzili sie w: "<< dzieci[i][3]<<endl;
}
}
}
}
getchar();
return 0;
}