Автор Тема: Задача С++  (Прочетена 5890 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #15 -: 15 Януари 2013, 09:44:46 »
Код: C++
  1. #include <iostream>
  2. #include <fstream>
  3. #include <cstring>
  4.  
  5. using namespace std;
  6.  
  7. void inputdata();
  8. void showdata();
  9. void showdata2();
  10.  
  11. int SIZE=0;
  12.  
  13. struct chars
  14. {
  15.         char route[100];
  16.         char shipname[100];
  17.         char captainname[100];
  18. };
  19. struct data
  20. {
  21.         chars route[25];
  22.         chars shipname[25];
  23.         chars captainname[25];
  24.         float price1[25];
  25.         float price2[25];
  26.         int tickets1[25];              
  27.         int tickets2[25];
  28.         int month[25];
  29. }ship;
  30.  
  31. int main(void)
  32. {
  33.         int input;
  34.         system("cls");
  35.         do
  36.         {
  37.                 cout << "########################################################################\n";
  38.                 cout << "#                                                                      #\n";
  39.                 cout << "#   1. Introduction of information about ships and cruises             #\n";
  40.                 cout << "#                                                                      #\n";
  41.                 cout << "#   2. Display of information about ships and cruises                  #\n";
  42.                 cout << "#                                                                      #\n";
  43.                 cout << "#   3. Display of information about ship with the most tickets sold    #\n";
  44.                 cout << "#                                                                      #\n";
  45.                 cout << "#   4. Exit                                                            #\n";
  46.                 cout << "#                                                                      #\n";
  47.                 cout << "########################################################################\n";
  48.                 do
  49.                 {
  50.                         cout << "\n    Make your choice: ";
  51.                         cin >> input;
  52.                 }
  53.                 while(input<1 || input>4);
  54.                         switch(input)
  55.                         {
  56.                                 case 1:
  57.                                         inputdata();
  58.                                         break;
  59.                                 case 2:
  60.                                         showdata();
  61.                                         break;
  62.                                 case 3:
  63.                                         showdata2();
  64.                                         break;
  65.                         }
  66.  
  67.         }
  68.         while(input!=4);
  69. }
  70.  
  71. void inputdata()
  72. {
  73.         int i=0;
  74.         int counter=0;
  75.         ofstream datafile;
  76.         char again;
  77.         do
  78.         {
  79.                 datafile.open("data.txt",ios::app);
  80.                 datafile << "Ship: " << counter << endl;
  81.                 cout << "Please input ship route: ";
  82.                         cin.ignore();
  83.                         cin.getline(ship.route[counter].route,100);
  84.                         datafile << "Route: " << ship.route[counter].route << endl;
  85.                 cout << "Please enter the name of the ship: ";
  86.                         cin.getline(ship.shipname[counter].shipname,100);
  87.                         datafile << "Name of ship: " << ship.shipname[counter].shipname << endl;
  88.                 cout << "Please enter the name of the captain: ";
  89.                         cin.getline(ship.captainname[counter].captainname,100);
  90.                         datafile << "Name of captain: " << ship.captainname[counter].captainname << endl;
  91.                 cout << "Ticket price first class: $";
  92.                         cin >> ship.price1[counter];
  93.                         datafile << "Price first class: $" << ship.price1[counter] << endl;
  94.                 cout << "Ticket price second class: $";
  95.                         cin >> ship.price2[counter];
  96.                         datafile << "Price second class: $" << ship.price2[counter] << endl;
  97.                 cout << "Tickets sold first class: ";
  98.                         cin >> ship.tickets1[counter];
  99.                         datafile << "Tickets sold first class: " << ship.tickets1[counter] << endl;
  100.                 cout << "Tickets sold second class: ";
  101.                         cin >> ship.tickets2[counter];
  102.                         datafile << "Tickets sold second class: " << ship.tickets2[counter] << endl;
  103.                 do
  104.                 {
  105.                         cout << "Enter month of journey (from 1 to 12): ";
  106.                         cin >> ship.month[counter];
  107.                 }while(1>ship.month[counter] || ship.month[counter]>12);
  108.                         datafile << "Month: " << ship.month[counter] << endl;
  109.                 datafile.close();
  110.                 counter++;
  111.                 cout << "Do you want to input data for another ship? (y/n): ";
  112.                 cin >> again;
  113.         }while(counter<25 && (again!='n' && again!='N'));
  114.         SIZE=counter;
  115.         for(i;i<counter;i++)
  116.         {
  117.                 cout << "\n\nRoute: " << ship.route[i].route << endl;
  118.                 cout << "Name of ship: " << ship.shipname[i].shipname << endl;
  119.                 cout << "Name of captain: " << ship.captainname[i].captainname << endl;
  120.                 cout << "Price first class: $" << ship.price1[i] << endl;
  121.                 cout << "Price second class: $" << ship.price2[i] << endl;
  122.                 cout << "Tickets sold first class: " << ship.tickets1[i] << endl;
  123.                 cout << "Tickets sold second class: " <<ship.tickets2[i] << endl;
  124.                 cout << "Month of journey: " << ship.month[i] << endl;
  125.         }
  126.         system("pause");
  127.         system("cls");
  128. }
  129. void showdata()
  130. {
  131.         if(SIZE==0)
  132.         {
  133.                 cout << "First enter information about ships" << endl;
  134.         }
  135.         else
  136.         {
  137.                 int i=0;
  138.                 char name[100];
  139.                 cout << "Information about ship: ";
  140.                 cin.ignore();
  141.                 cin.getline(name,100);
  142.                 for(i;i<SIZE;i++)
  143.                 {
  144.                                 if(strcmp(ship.shipname[i].shipname,name)==0)
  145.                                 {
  146.                                         cout << "\nRoute: " << ship.route[i].route << endl;
  147.                                         cout << "Name of ship: " << ship.shipname[i].shipname << endl;
  148.                                         cout << "Name of captain: " << ship.captainname[i].captainname << endl;
  149.                                         cout << "Price first class: $" << ship.price1[i] << endl;
  150.                                         cout << "Price second class: $" << ship.price2[i] << endl;
  151.                                         cout << "Tickets sold first class: " << ship.tickets1[i] << endl;
  152.                                         cout << "Tickets sold second class: " <<ship.tickets2[i] << endl;
  153.                                         cout << "Month of journey: " << ship.month[i] << endl << endl;
  154.                                 }
  155.                 }
  156.         }
  157.         system("pause");
  158.         system("cls");
  159. }
  160. void showdata2()
  161. {
  162.         if(SIZE==0)
  163.         {
  164.                 cout << "First enter information about ships" << endl;
  165.         }
  166.         else
  167.         {
  168.                 float* temp1;
  169.                 temp1 = new float[SIZE];
  170.                 float* temp2;
  171.                 temp2 = new float[SIZE];
  172.                 float* temp3;
  173.                 temp3 = new float[SIZE];
  174.                 for(int i=0;i<SIZE;i++)
  175.                 {
  176.                         temp1[i] = ship.price1[i]*ship.tickets1[i];
  177.                         temp2[i] = ship.price2[i]*ship.tickets2[i];
  178.                         temp3[i] = temp1[i]+temp2[i];
  179.                 }
  180.                 /* TO DO */
  181.                 /* TO DO */
  182.                 /* TO DO */
  183.                 /* TO DO */
  184.                 /* TO DO */
  185.                 /* TO DO */
  186.                 /* TO DO */
  187.         }
  188.         system("pause");
  189.         system("cls");
  190. }
Това е кода който съм написал до момента. Моля някой, ако може да го прегледа и съответно, ако някъде нещо не е наред да даде насока какво да направя.
Накрая има TO DO просто ми се спеше много и не съм го довършил все още. Там трябва да изчислява за кой кораб има най-голяма сума от продадени билети.

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Задача С++
« Отговор #16 -: 15 Януари 2013, 11:26:36 »
Трябва да запиша от текстов файл в двумерен масив[ x ][2] информация...

Или аз не съм те разбрал или ти правиш точно обратното на задачата си. Ти трябва да четеш от файл, а не да пишеш във файл.
Структорите нещо си ги объркал. Първата структора изглежда да е излишна. А употребата и във втората изглежда да е грешна. Защо ти е структурата chars  и защо след като ползваш С++ не използваш string?
struct data
{
chars route[25];
.
.
        .
}ship;
Тука декларираш масив от структори chars на име route, и всяка от тези структори съдържа елементите char route[100], char shipname[100], char captainname[100]. Същото се отнася и за следващите две chars shipname[25] и chars captainname[25].
Структората представлява едно цяло/капсулована информация. Т.е. информацията от кораб до месец е една структура data.  И ти правиш масив от такива структори в зависимост от броя на корабите, а не да наджаскаш всичката информация за всички кораби в една единствена  структора.

btw introduction е въвеждане, но във съвсем друг смисъл. Пробвай с  input information ...

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #17 -: 15 Януари 2013, 11:44:09 »
Идеята на първия пост беше, че това което вече съм го записал във файл да го запиша и в масив[ x ][2], но после приятел ми спомена за структори и ми прати някой и друга негова курсова работа и да видя какво е правил там. Съответно и малко четиво от един учебник (но там нали всичко трябва да е обяснено като за 'хакери' и малко не ги хванах нещата).
По късно ще погледна как трябва да го редактирам тъй като сега излизам.
А как трябва да дефинирам масива не ми става ясно?

Код: C++
  1. struct data
  2. {
  3.         char route[100];
  4.         char shipname[100];
  5.         char captainname[100];
  6.         float price1;
  7.         float price2;
  8.         int tickets1;
  9.         int tickets2;
  10.         int month;
  11. }ship[25];
  12.  
??
« Последна редакция: 15 Януари 2013, 11:56:38 от svilen88 »

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Задача С++
« Отговор #18 -: 15 Януари 2013, 12:22:59 »
Примерно така:

Код: C++
  1. struct data
  2. {
  3.         string route;
  4.         string shipname;
  5.         string captainname;
  6.         float price1;
  7.         float price2;
  8.         int tickets1;
  9.         int tickets2;
  10.         int month;
  11. };
  12.  
  13. int main()
  14. {
  15.    data shipData [25];
  16.    .  
  17.    .
  18.    return 0;
  19. }
  20.  

В менюто също махни ot 2 и 3 "of" след Display, а и третото е грешно по принцип. ПОказваш най-много приходи, а не най-много продадени билети.

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #19 -: 15 Януари 2013, 12:39:17 »
Направих ги на string и съответно ги въвеждам по този начин: getline(cin,ship[counter].route/shipname/captainname).

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Задача С++
« Отговор #20 -: 15 Януари 2013, 13:27:59 »
Ами хубаво правиш. Друите елементи на структурата по същия начин ги въвеждай, но добави проверка за валидност.
Ето тука линк с доста добре обяснени примери за cin да погледнеш.
http://goo.gl/s8lkn

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #21 -: 16 Януари 2013, 10:27:44 »
Интересно четиво, мерси.

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #22 -: 17 Февруари 2013, 14:43:35 »
Здравейте,
имам един въпрос, а не искам да пускам нова тема само за него.
Имам един масив, който ще запълвам с елементи въведени от клавиатурата. Идеята е на всеки 3-ти елемент да оставям един празен ред (не ме питайте защо ми е такава е задачата  ??? ). Имам някаква идея, при самия цикъл:
Код: C++
  1.  for(int i=0;i<size;i++)
  2. {
  3.       cout << "Element " << i << " = ";
  4.       cin >> num[i];
  5.       cout << endl;
  6.       // и тук да напиша един if
  7.       if(i = ?? 3-ти елемент)
  8.       {
  9.              cout << endl;
  10.       }
  11. }
Как да разбера дали е 3-ти елемент ?

EDIT:
А май разбрах как става... направих го така if((i+1)%3==0)... и то взе, че стана !
« Последна редакция: 17 Февруари 2013, 14:51:23 от svilen88 »