Научи ме

Програмиране => C/C++ => Темата е започната от: svilen88 в 28 Декември 2012, 12:13:42

Титла: Задача С++
Публикувано от: svilen88 в 28 Декември 2012, 12:13:42
Здравейте, имам курсова работа по С++, но не ме бива много в програмирането.
1) Създаване на програма с функция main() и избор чрез меню на финкции за:
а) Въвеждане на едномерен числов масив с проверка за коректност с N елемнта (N<=20)
б) Презаписване на масива в друг масив, в който елементите са подредени в обратен ред.
в) Презаписване на входния масив в трети масив и сортиране на този масив във възходящ ред
г) Извеждане на екрана информация за масивите и техните лементи.

До този момент съм направил ето това:
Код: C++
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int M[10],M2[10],M3[10],M4[10];
  5.  
  6. void array1()
  7. {
  8.         int m,i;
  9.         for(i=1 ; i<11 ; i++)
  10.         {
  11.                 cout << "\nVyvedete element " << i << ": ";
  12.                 cin >> m;
  13.                 M[i] = m;
  14.         }
  15. }
  16.  
  17. void writearray()
  18. {
  19.         int i, n;
  20.         for(i=10, n=1;i>0, n<11; i--, n++)
  21.                 M2[n]=M[i];
  22.         cout << "Vie syzdadohte nov masiv s elementi v obraten red na vhodniya" << endl;
  23. }
  24.  
  25. void uptodown()
  26. {
  27.     int i,j,z;
  28.         for(z=1;z<11;z++)
  29.                 M3[z]=M[z];
  30.     for(i=1;i<11;i++)
  31.     {
  32.         for(j=1;j<i;j++)
  33.         {
  34.             if(M3[i]>M3[j])
  35.             {
  36.                 int temp=M3[i];
  37.                 M3[i]=M3[j];
  38.                 M3[j]=temp;
  39.             }
  40.         }
  41.         }
  42.         cout << "Vie syzdadohte nov masiv s elementi podredeni vyv nizhodqsht red" << endl;
  43. }
  44.  
  45. void downtoup()
  46. {
  47.     int i,j,z;
  48.         for(z=1;z<11;z++)
  49.                 M4[z]=M[z];
  50.     for(i=1;i<11;i++)
  51.     {
  52.         for(j=1;j<i;j++)
  53.         {
  54.             if(M4[j]>M4[i])
  55.             {
  56.                 int temp=M4[j];
  57.                 M4[j]=M4[i];
  58.                 M4[i]=temp;
  59.             }
  60.         }
  61.         }
  62.         cout << "Vie syzdadohte nov masiv s elementi podredeni vyv vyzhodqsht red" << endl;
  63. }
  64.  
  65. void showarray()
  66. {
  67.         int input2;
  68.         do
  69.         {
  70.                 cout << "\n1. Vhoden Masiv\n";
  71.                 cout << "2. Masiv s elementi v obraten red\n";
  72.                 cout << "3. Masiv s elementi v nizhodqsht red\n";
  73.                 cout << "4. Masiv s elementi vvy vyzhodqsht red red\n";
  74.                 cout << "5. Vryshtane kum predhodnoto menu";
  75.                 do
  76.                 {
  77.                         cout << "\n      Izberete opciya: ";
  78.                         cin >> input2;
  79.                 }
  80.                 while(input2<1 || input2>5);
  81.                         switch(input2)
  82.                         {
  83.                                 case 1:
  84.                                         {
  85.                                                 int i;
  86.                                                 for(i=1;i<11;i++)
  87.                                                         cout << "M[" << i << "] = "<< M[i] << "\n";
  88.                                                 cout << "Tova e izhodniq masiv koito vyvedohte v nachaloto" << endl;
  89.                                                 break;
  90.                                         }
  91.                                         case 2:
  92.                                         {
  93.                                                 int i;
  94.                                                 for(i=1;i<11;i++)
  95.                                                         cout << "M2[" << i << "] = "<< M2[i] << "\n";
  96.                                                 cout << "Tova e nov masiv s elementite na masiv 1 v obraten red" << endl;
  97.                                                 break;
  98.                                         }
  99.                                         case 3:
  100.                                         {
  101.                                                 int i;
  102.                                                 for(i=1;i<11;i++)
  103.                                                         cout << "M3[" << i << "] = "<< M3[i] << "\n";
  104.                                                 cout << "Tova e nov masiv s elementite na masiv 1 podredeni vyv vyzhodqsht red" << endl;
  105.                                                 break;
  106.                                         }
  107.                                         case 4:
  108.                                         {
  109.                                                 int i;
  110.                                                 for(i=1;i<11;i++)
  111.                                                         cout << "M4[" << i << "] = "<< M4[i] << "\n";
  112.                                                 cout << "Tova e nov masiv s elementite na masiv 1 podredeni v nizhodqsht red" << endl;
  113.                                                 break;
  114.                                         }
  115.                         }
  116.         }
  117.         while(input2!=5);
  118. }
  119.  
  120. void main()
  121. {
  122.         int input;
  123.         do
  124.         {
  125.                 cout<<"\n1. Syzdai masiv\n";
  126.                 cout<<"2. Prezapishi masiva v drug masiv\n";
  127.                 cout<<"3. Podrejdane vyv vyzhodqsh red\n";
  128.                 cout<<"4. Podrejdane v nizhodqsht red\n";
  129.                 cout<<"5. Izvejdane na masivite\n";
  130.                 cout<<"6. Izhod ot programta\n";
  131.                 do
  132.                 {
  133.                         cout << "\n      Izberete menu: ";
  134.                         cin >> input;
  135.                 }
  136.                 while(input<1 || input>6);
  137.                         switch(input)
  138.                         {
  139.                                 case 1:
  140.                                         array1();
  141.                                         break;
  142.                                 case 2:
  143.                                         writearray();
  144.                                         break;
  145.                                 case 3:
  146.                                         uptodown();
  147.                                         break;
  148.                                 case 4:
  149.                                         downtoup();
  150.                                         break;
  151.                                 case 5:
  152.                                         showarray();
  153.                                         break;
  154.                         }
  155.         }
  156.         while(input!=6);
  157. }

Трябва да направя проверка дали елементите на масива са int, и ако не се въведе int да ме връща обратно със съобщение за грешка.
Също така, ако нямам въведен масив функциите writearray(), uptodown(), downtoup() и showarray(), да ми показват грешка

Мерси предварително за помоща.
Титла: Re: Задача С++
Публикувано от: Борис в 28 Декември 2012, 21:49:53
Код: C++
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. //funkciq za vuvejdane
  5. int enterArr();
  6. //funkciq za zapisvane v drug masiv v obraten red
  7. int reverseArr(int,int[]);
  8. //funkciq za sortirane v drug masiv v vuzhodqsh red
  9. int sortArr(int,int []);
  10. //glavna funckiq
  11. int main(void){
  12.         // tuk si pravish edno menu da izvikva funkciite
  13.         // primner: cout << 1 << Purva fukciq; cout << 2 << Vtora fukciq; posle vzimash stoinosta s cin i q puskash v edin switch(x){ case 1: int arr[20] = enterArr();}
  14. }
  15. int enterArr(){
  16.         // Zapitvane za goleminata na masiva N
  17.         // Proverka za vuvedenata stoinost primer: if(N<=20)
  18.         //cikul za vuvejdane na stoinosti ako e minala proverkata uspeshno primer: for(int i=0;i<N;i++) {arr[i] cin << x; arr[i]=x;}
  19.         //vrushtash masiva
  20. }
  21.  
  22. int reverseArr(int size,int arr[]){
  23.         // zavurtash edin cikul i purvata stoinost na tvoq masiv q zapisvash kato posledna v noviq, posle vtorta ot tvoq v predposlednata i taka
  24.         // primer: int x=size; int newArr[size]; for(int i=0;i<x;i++){ newArr[size] = arr[i]; size--;}
  25.        //vrushtash masiva      
  26.  
  27. }
  28.  
  29. int sortArr(int size, int arr[]){
  30.         //tuk shte s namerish v neta kak se sortira masiv v nizhodqsh i vuzhodqsht red
  31.         // primer: metoda na mehurcheto potursi za nego
  32.         //vrushtash masiva     
  33. }
  34.  
Титла: Re: Задача С++
Публикувано от: svilen88 в 28 Декември 2012, 22:56:46
 :-X
Хм, нищо общо с това което съм писал аз.
Мерси ей сега ще се опитам да разбера какво си написал. :)
Титла: Re: Задача С++
Публикувано от: svilen88 в 02 Януари 2013, 21:06:58
Днес се хванах да понапиша малко код... и както казах в първия пост не съм много на ТИ със C++.
Код: C++
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int enterArr();
  5. /*int reverseArr();
  6. int uptobot();
  7. int showArr();*/
  8.  
  9. int main(void)
  10. {
  11.                 int input;
  12.                 int M;
  13.         do
  14.         {
  15.                 cout << "##################################################\n";
  16.                 cout << "#                                                #\n";
  17.                 cout << "#   1. Create array                              #\n";
  18.                 cout << "#                                                #\n";
  19.                 cout << "#   2. Overwrite the array into another array    #\n";
  20.                 cout << "#                                                #\n";
  21.                 cout << "#   3. Listed in descending order                #\n";
  22.                 cout << "#                                                #\n";
  23.                 cout << "#   4. Display the arrays                        #\n";
  24.                 cout << "#                                                #\n";
  25.                 cout << "#   5. Exit                                      #\n";
  26.                 cout << "#                                                #\n";
  27.                 cout << "##################################################\n";
  28.                 do
  29.                 {
  30.                         cout << "\n    Make your choice: ";
  31.                         cin >> input;
  32.                 }
  33.                 while(input<1 || input>5);
  34.                         switch(input)
  35.                         {
  36.                                 case 1:
  37.                                         M = enterArr();
  38.                                         cout << M;
  39.                                         break;
  40.                                 /*case 2:
  41.                                         reverseArr();
  42.                                         break;
  43.                                 case 3:
  44.                                         uptobot();
  45.                                         break;
  46.                                 case 4:
  47.                                         showArr();
  48.                                         break;*/
  49.                         }
  50.         }
  51.         while(input!=5);
  52.         system("cls");
  53. }
  54.  
  55. int enterArr()
  56. {
  57.         int size;
  58.         cout << "Please enter size of Array: ";
  59.         cin >> size;
  60.         if(size>20)
  61.         {
  62.                 while(size>20)
  63.                 {
  64.                         cout << "Please enter size of Array less than 20: ";
  65.                         cin >> size;
  66.                 }
  67.         }
  68.         int *arr = new int[size];
  69.         for(int i=1 ; i<size+1 ; i++)
  70.         {
  71.                 int m;
  72.                 cout << "Array[" << i << "] = ";
  73.                 cin >> m;
  74.                 arr[i] = m;
  75.         }
  76.         return arr;
  77. }
  78. /*int reverseArr();
  79. int uptobot();
  80. int showArr();*/
Закоментирал съм нещатата по които не работя за момента.
Работата е там, че не мога да върна целия масив, а само елементи от него?

Може ли малко насоки.

Също, малко разяснение на тоз ред  / int *arr = new int[size]; / тейкато го взех от интернет и неуспях да разбера добре какво прави.
Титла: Re: Задача С++
Публикувано от: kjufte в 02 Януари 2013, 23:23:32
Функцията  за въвеждане на масив трябва да връща указател (pointer)
int *enterArr();защото създава масива на stack-a и след напускане на функцията той не съществува вече.
Тъй като работиш с масиви и не се знае какъв им е размера декларирай int size = 0; като глобален и го занулявай в началото на  enterArr.
Проверката за вкаран размер после я прави с do while loop.
Разликата между него и обикновения while loop е , че изразите вътре се изпълняват поне веднъж.
do
{
     cin >> size;
     cout << "Please enter size of Array less than 20: ";
} while(size > 20);

И накрая масивите не може да ги изписваш  с  "cout <<  М;". Трябва да ги обходиш и да изпишеш всеки елемент един по един. Поради тази причина и глобалния размер. Името на масива е указател към първия му елемент. За това получаваш само М[0].
"М" между другото също трябва да е деклариран като указател.
Титла: Re: Задача С++
Публикувано от: svilen88 в 07 Януари 2013, 13:57:57
Благодаря и на двамата, задача 1 е готова :)
Код: C++
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int size;
  5. int* enterArr();
  6. int* reverseArr(int arr[],int size);
  7. int* uptobot(int arr[], int size);
  8. int showArr(int arr[],int size);
  9.  
  10. int main(void)
  11. {
  12.                 int input;
  13.                 int* M;
  14.                 int* M2;
  15.                 int* M3;
  16.         do
  17.         {
  18.                 cout << "##################################################\n";
  19.                 cout << "#                                                #\n";
  20.                 cout << "#   1. Create array                              #\n";
  21.                 cout << "#                                                #\n";
  22.                 cout << "#   2. Overwrite the array into another array    #\n";
  23.                 cout << "#                                                #\n";
  24.                 cout << "#   3. Listed in descending order                #\n";
  25.                 cout << "#                                                #\n";
  26.                 cout << "#   4. Display the arrays                        #\n";
  27.                 cout << "#                                                #\n";
  28.                 cout << "#   5. Exit                                      #\n";
  29.                 cout << "#                                                #\n";
  30.                 cout << "##################################################\n";
  31.                 do
  32.                 {
  33.                         cout << "\n    Make your choice: ";
  34.                         cin >> input;
  35.                 }
  36.                 while(input<1 || input>5);
  37.                         switch(input)
  38.                         {
  39.                                 case 1:
  40.                                         M=enterArr();
  41.                                         system("cls");
  42.                                         break;
  43.                                 case 2:
  44.                                         M2=reverseArr(M,size);
  45.                                         system("cls");
  46.                                         break;
  47.                                 case 3:
  48.                                         M3=uptobot(M,size);
  49.                                         system("cls");
  50.                                         break;
  51.                                 case 4:
  52.                                         int input;
  53.                                         do
  54.                                         {
  55.                                                 cout << "##################################################\n";
  56.                                                 cout << "#                                                #\n";
  57.                                                 cout << "#   1. Input array                               #\n";
  58.                                                 cout << "#                                                #\n";
  59.                                                 cout << "#   2. Array with elements in reverse order      #\n";
  60.                                                 cout << "#                                                #\n";
  61.                                                 cout << "#   3. Array elements in descending order        #\n";
  62.                                                 cout << "#                                                #\n";
  63.                                                 cout << "#   4. Back to previous menu                     #\n";
  64.                                                 cout << "#                                                #\n";
  65.                                                 cout << "##################################################\n";
  66.                                                 do
  67.                                                 {
  68.                                                         cout << "\n    Make your choice: ";
  69.                                                         cin >> input;
  70.                                                 }
  71.                                                 while(input<1 || input>4);
  72.                                                         switch(input)
  73.                                                         {
  74.                                                                 case 1:
  75.                                                                         showArr(M,size);
  76.                                                                         break;
  77.                                                                 case 2:
  78.                                                                         showArr(M2,size);
  79.                                                                         break;
  80.                                                                 case 3:
  81.                                                                         showArr(M3,size);
  82.                                                                         break;
  83.                                                         }
  84.                                         }
  85.                                         while(input!=4);
  86.                                         system("cls");
  87.                                         break;
  88.                         }
  89.         }
  90.         while(input!=5);
  91.         system("cls");
  92. }
  93.  
  94. int* enterArr()
  95. {
  96.         do
  97.         {
  98.                 cout << "Please enter size of Array less than 20: ";
  99.                 cin >> size;
  100.         }while(size>20);
  101.         int* arr = new int[size];
  102.         for(int i=1 ; i<size+1 ; i++)
  103.         {
  104.                 int m;
  105.                 cout << "Array[" << i << "] = ";
  106.                 cin >> m;
  107.                 arr[i] = m;
  108.         }
  109.         return arr;
  110. }
  111. int* reverseArr(int arr[],int size)
  112. {
  113.         int i,n;
  114.         int* arr2 = new int[size];
  115.         for(i=size,n=1;i>n-1,n<size+1;i--,n++)
  116.                 arr2[n] = arr[i];
  117.         return arr2;
  118. }
  119. int* uptobot(int arr[], int size)
  120. {
  121.         int temp;
  122.         int* arr2 = new int[size];
  123.         for(int i=1;i<size+1;i++)
  124.                 arr2[i]=arr[i];
  125.         for(int i=1;i<size+1;i++)
  126.         {
  127.                
  128.                 for(int j=1;j<i;j++)
  129.                 {
  130.                         if(arr2[i]>arr2[j])
  131.                         {
  132.                                 temp=arr2[i];
  133.                                 arr2[i]=arr2[j];
  134.                                 arr2[j]=temp;
  135.                         }
  136.                 }
  137.         }
  138.         return arr2;
  139. }
  140. int showArr(int arr[],int size)
  141. {
  142.         for(int i=1;i<size+1;i++)
  143.                 cout << "Array[" << i << "] = " << arr[i] << endl;
  144.         return 0;
  145. }
  146.  
Скоро може да поискам помощ и за втората задача, но мисля, че там нещата ще са ми малко по ясни :D
Титла: Re: Задача С++
Публикувано от: kjufte в 07 Януари 2013, 15:44:17
Погледнахкода само отгоре отгоре, ама веднага ми направиха впечатление 2 неща.
1. size не е инициализирана и не я зануляваш както ти казах. Най-добре в функцията за въвеждане го инициализирай с 0.
2. size  е глобална променлива. Значи се вижда от всички функции. Няма нужда да я предаваш като параметър. Може директно да я използваш.
Титла: Re: Задача С++
Публикувано от: svilen88 в 07 Януари 2013, 16:29:24
Не можах да разбера какво "губя", ако не я зануля. Моля за малко разяснение.
За size, сега като го прочетох и веднага ми светна, че .... да вярно нали за това го правя глобална променлива  ;D

Мерси :)
Титла: Re: Задача С++
Публикувано от: kjufte в 08 Януари 2013, 01:03:56
Абе приятел... как така я отметна таз задача като готова? Ти тествал ли си си кода дали работи и ако работи това което искаш ли прави? Щото аз го пробвах на бързо и горе долу нищо не работи при мене. Трябва малко повече да почетеш по темата с масивите . На всякъде ги почваш от едно (поради което и няма как кода ти да работи), но при компютрите броенето започва от нула. Инициализирането е една хубава практика с която ще избегнеш доста грешки и нежелни резултати. Например указателите ти М. Ако директно извикаш някоя функция която ги получава като параметър без да си въвел масив ще получиш моментално грешка.  Трябва обстойно да си проверяваш кода като го пишеш. Видях и че подреждаш елементите по стойност в низходящ ред, а условието ти е да ги подреждаш във възходящ ред.
Титла: Re: Задача С++
Публикувано от: svilen88 в 08 Януари 2013, 15:11:30
Странно при мен всичко работи нормално. Условието всъщност е възходящ или низходящ ред, явно съм го спестил първия път като съм го писал.
Windows Visual Studio 2012, Linux Qt 2.6.1 и на двете работи.

Знам, че се започва от 0, но в случая при обхождането пиша i<size+1. Идеята ми е да не почвам от 0, а от 1. За по-прегледно... И вече съм променил всичко да започва от 0 и да обхожда до i<size. И пак се учудвам, че не си успял да подкараш кода. И на VS 2010 го подкарах без нито 1 грешка :?
Титла: Re: Задача С++
Публикувано от: kjufte в 08 Януари 2013, 15:53:44
Кaто кажеш искам масив с име arr съдържащ 4 елемента получаваш масив с елементи arr[0], arr[1], arr[2] и arr[3].
Ти ако искаш може да почнеш и от 3 да го обхождаш, ама елементите които стоят в arr[0], arr[1] и arr[2]  няма да бъдат докоснати. Атова че слагаш горната граница на size + 1 означава че ще стигнеш до елемента arr[4], който въобще не съществува и веднага получаваш грешка. Другия ти проблем при запъването на масива, като го започнеш от 1 то елемента на позиция 0 остава неинициализиран. Демек една голяма цифра дето за нищо не става.
Аз кода го подкарах, но като разцъках из менютата и само грешки и крашове.
Титла: Re: Задача С++
Публикувано от: svilen88 в 08 Януари 2013, 15:57:46
Това е оправено вече. И при мен пак не ми даваше грешка. Не знам защо НЕ ми дава грешки тогава.
Титла: Re: Задача С++
Публикувано от: kjufte в 10 Януари 2013, 16:57:37
Както вече ти написах аз подкарах кода ти. Компилира се, но не работи, защото грешките са ти логически, а не в синтакса. Възможно е да изглежда като да работи, но това е недефинирано държание на програмата. Т.е. може утре като я стартираш да прави нещо друго. Ти резервираш място за примерно 3 int елемента, а пишеш върху четвърти, за който не си резервирал памет. Такива грешки са трудни за намиране като стане по - обемист кода.  Както и в for loop-а  с двете условия. И там имаш логическа грешка. Когато разделяш повече от едно условие със запетайка е от към синтакс правилно, но логически грешно. Компилира се и работи , но не както трябва.  Условието което е последно винаги взема превес. Втвоя случай
i > (...;i > n - 1, n < size + 1;...) първото условие е тотално излишно, тъй като то спира да е вярно след няколко итерации, но не води до спиране на изпълнение на loop-a, защото второто условие все още дава true. За да е логически вярно трябва да има логически оператор между двете условия, а не запетайка.
i > (...;i > n - 1 && n < size + 1;...) или
i > (...;i > n - 1 || n < size + 1;...) Това разбира се в случай, че изобщо имаш нужда от две условия и игнорирайки грешките с индексите в масивите.
Общо взето кода ти има много грешки, но са все неща основни за програмирането и които трябва да се знаят както азбуката трябва да се знае преди да почнеш да пишеш някой език.
Титла: Re: Задача С++
Публикувано от: svilen88 в 13 Януари 2013, 18:27:30
Код: C++
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int size=0;
  5. int* enterArr();
  6. int* reverseArr(int arr[]);
  7. int* uptobot(int arr[]);
  8. int showArr(int arr[]);
  9.  
  10. int main(void)
  11. {
  12.                 int input;
  13.                 int* M;
  14.                 int* M2;
  15.                 int* M3;
  16.         do
  17.         {
  18.                 cout << "##################################################\n";
  19.                 cout << "#                                                #\n";
  20.                 cout << "#   1. Create array                              #\n";
  21.                 cout << "#                                                #\n";
  22.                 cout << "#   2. Overwrite the array into another array    #\n";
  23.                 cout << "#                                                #\n";
  24.                 cout << "#   3. Listed in descending order                #\n";
  25.                 cout << "#                                                #\n";
  26.                 cout << "#   4. Display the arrays                        #\n";
  27.                 cout << "#                                                #\n";
  28.                 cout << "#   5. Exit                                      #\n";
  29.                 cout << "#                                                #\n";
  30.                 cout << "##################################################\n";
  31.                 do
  32.                 {
  33.                         cout << "\n    Make your choice: ";
  34.                         cin >> input;
  35.                 }
  36.                 while(input<1 || input>5);
  37.                         switch(input)
  38.                         {
  39.                                 case 1:
  40.                                         M=enterArr();
  41.                                         system("cls");
  42.                                         break;
  43.                                 case 2:
  44.                                         M2=reverseArr(M);
  45.                                         system("cls");
  46.                                         break;
  47.                                 case 3:
  48.                                         M3=uptobot(M);
  49.                                         system("cls");
  50.                                         break;
  51.                                 case 4:
  52.                                         int input;
  53.                                         do
  54.                                         {
  55.                                                 cout << "##################################################\n";
  56.                                                 cout << "#                                                #\n";
  57.                                                 cout << "#   1. Input array                               #\n";
  58.                                                 cout << "#                                                #\n";
  59.                                                 cout << "#   2. Array with elements in reverse order      #\n";
  60.                                                 cout << "#                                                #\n";
  61.                                                 cout << "#   3. Array elements in descending order        #\n";
  62.                                                 cout << "#                                                #\n";
  63.                                                 cout << "#   4. Back to previous menu                     #\n";
  64.                                                 cout << "#                                                #\n";
  65.                                                 cout << "##################################################\n";
  66.                                                 do
  67.                                                 {
  68.                                                         cout << "\n    Make your choice: ";
  69.                                                         cin >> input;
  70.                                                 }
  71.                                                 while(input<1 || input>4);
  72.                                                         switch(input)
  73.                                                         {
  74.                                                                 case 1:
  75.                                                                         showArr(M);
  76.                                                                         break;
  77.                                                                 case 2:
  78.                                                                         showArr(M2);
  79.                                                                         break;
  80.                                                                 case 3:
  81.                                                                         showArr(M3);
  82.                                                                         break;
  83.                                                         }
  84.                                         }
  85.                                         while(input!=4);
  86.                                         system("cls");
  87.                                         break;
  88.                         }
  89.         }while(input!=5);
  90.         system("cls");
  91. }
  92.  
  93. int* enterArr()
  94. {
  95.         size;
  96.         do
  97.         {
  98.                 cout << "Please enter size of Array less than 20: ";
  99.                 cin >> size;
  100.         }while(size>20);
  101.         int* arr = new int[size];
  102.         for(int i=0 ; i<size ; i++)
  103.         {
  104.                 int m;
  105.                 cout << "Array[" << i << "] = ";
  106.                 cin >> m;
  107.                 arr[i] = m;
  108.         }
  109.         return arr;
  110. }
  111. int* reverseArr(int arr[])
  112. {
  113.         int i,n;
  114.         int* arr2 = new int[size];
  115.         for(i=size-1,n=0;i>n-1,n<size;i--,n++)
  116.                 arr2[n] = arr[i];
  117.         return arr2;
  118. }
  119. int* uptobot(int arr[])
  120. {
  121.         int temp;
  122.         int* arr2 = new int[size];
  123.         for(int i=0;i<size;i++)
  124.                 arr2[i]=arr[i];
  125.         for(int i=0;i<size;i++)
  126.         {
  127.                 for(int j=0;j<i;j++)
  128.                 {
  129.                         if(arr2[i]>arr2[j])
  130.                         {
  131.                                 temp=arr2[i];
  132.                                 arr2[i]=arr2[j];
  133.                                 arr2[j]=temp;
  134.                         }
  135.                 }
  136.         }
  137.         return arr2;
  138. }
  139. int showArr(int arr[])
  140. {
  141.         for(int i=0;i<size;i++)
  142.                 cout << "Array[" << i << "] = " << arr[i] << endl;
  143.         return 0;
  144. }
  145.  
В случая тази част от кода: for(i=size-1,n=0;i>n-1,n<size;i--,n++). Нали тук става дума за обхождане на масива. Идеята е от i равно на size-1 ( защото почвам да броя от 0 ? ) и n равно на 0, съответно i да намалява с единица и n да расте с единица докато условията станат грешни (т.е. i вече не е по голямо от n-1 и n не е по-малко от size). Т.е. и двете спират да бъдат верни в един и същ момент? Или мен въобще не бива. В момента абсолютно всичко работи както трябва. Няма грешки при зареждане и не ми записва правилно всички масиви, без грешка.

За това, че започвах от 1 не от 0 ми стана пределно ясно, след като обходих масивите от 0 и видях, че имат една стойност с доста дълго число... и една липсваща накрая...

Уча се... Уча се ! ;D

EDIT: Сега разбрах какво точно имаш предвид и го оправих. for(...;i>n-1 || n<size;...)
VS 2012 имало и код анализ да прави (въобще не съм запознат с тия неща), но като му дам анализ ми показа, точно това като предупреждение, че нещо не е наред. Също така ми показа и M2 и M3, че не са инициализирани.
zadacha1.cpp(81): warning : C6001: Using uninitialized memory 'M2'.
zadacha1.cpp(84): warning : C6001: Using uninitialized memory 'M3'.
Т.е. трябва да покажа, че те ще са масиви с големина size, поне аз така го разбрах и съответно под тях написах набързо M2=new int[size]; и M3=new int[size];? Не знам дали пак не съм оплескал нещо, но все пак всичко работи, и при анализ не ми изкарва предупреждения.
Титла: Re: Задача С++
Публикувано от: svilen88 в 13 Януари 2013, 19:02:46
Малко ме притиска вече времето, но нали по студентски всичко трябва да става в последния момент ::), бих искал и малко помощ по още една задача.
Трябва да запиша от текстов файл в двумерен масив[ x ][2] информация, като x зависи от един брояч (него вече съм го оправил, или поне така мисля).
Информацията в файла е в следния вид:
Ship: 1
Route: Varna London
Name of ship: Name
Name of captain: Captain Name
Price first class: $1
Price second class: $5
Tickets sold first class: 6
Tickets sold second class: 7
Month: 5
Тази информация може да бъде до 25 кораба, т.е. от Ship до Month да се повтарят през 7 реда. Като идеята ми е да стане по следния начин array[0][0] = Ship , array[0][1] = 1 , array[1][0] = Route , array[1][1] = Varna London и т.н.. Т.е. : да е разделител между елементите от един и същ ред.
Малко по късно ще сложа и кода който съм написал до този момент, ще помоля само без много критики тъй като се вижда, че ХИЧ не ме бива  ;D

EDIT: Приятел ми спомена, че тази схема ще стане много лесно с структори, сега ще прочета къде що имам в учебниците и в най-скоро време ще сложа "работещ" код.
Титла: Re: Задача С++
Публикувано от: svilen88 в 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 просто ми се спеше много и не съм го довършил все още. Там трябва да изчислява за кой кораб има най-голяма сума от продадени билети.
Титла: Re: Задача С++
Публикувано от: kjufte в 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 ...
Титла: Re: Задача С++
Публикувано от: svilen88 в 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.  
??
Титла: Re: Задача С++
Публикувано от: kjufte в 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, а и третото е грешно по принцип. ПОказваш най-много приходи, а не най-много продадени билети.
Титла: Re: Задача С++
Публикувано от: svilen88 в 15 Януари 2013, 12:39:17
Направих ги на string и съответно ги въвеждам по този начин: getline(cin,ship[counter].route/shipname/captainname).
Титла: Re: Задача С++
Публикувано от: kjufte в 15 Януари 2013, 13:27:59
Ами хубаво правиш. Друите елементи на структурата по същия начин ги въвеждай, но добави проверка за валидност.
Ето тука линк с доста добре обяснени примери за cin да погледнеш.
http://goo.gl/s8lkn
Титла: Re: Задача С++
Публикувано от: svilen88 в 16 Януари 2013, 10:27:44
Интересно четиво, мерси.
Титла: Re: Задача С++
Публикувано от: svilen88 в 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)... и то взе, че стана !