Zadanie ocena matura informatyka 2010

Zadanie ocena matura informatyka 2010
AT
  • Rejestracja: dni
  • Ostatnio: dni
0

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:

Kopiuj
#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;
}
nav
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
0

Popraw temat - chociaż o info co to za zadanie. Pamiętaj, że później ktoś może chcieć to wyszukać.

firefox napisał(a)

Firefox nie może odnaleźć serwera pliki.serwisyregionalne.pl.

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Gydybś umiał zastosować tutaj klasy albo choćby struktury to kodu byłoby 2x mniej.
Gdybyś umiał uzywać klasy string a nie cały czas mieszał jej z <cstring> i rozwiązaniami rodem z C to kodu byloby jeszcze mniej.

AT
  • Rejestracja: dni
  • Ostatnio: dni
0

Może jakiś przyklad jak to co mam powinno wedlug was wygladac ? byloby mi latwiej.

RE
  • Rejestracja: dni
  • Ostatnio: dni
0

Przede wszystkim to zadanie powinno być zrobione w Accessie. I wtedy zajmie ono tyle, co zaimportowanie danych i sklecenie kilku prostych zapytań.

AT
  • Rejestracja: dni
  • Ostatnio: dni
0

Oh Jesus!
Rzeczywiście tam jest napisane: "wykorzystaj dostepne narzedzia..." czyli można też access a ja myslalem ze to wszystko trzeba w c. W takim razie ta matura to jakas kpina.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.