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

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

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Задача С++
« -: 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(), да ми показват грешка

Мерси предварително за помоща.
« Последна редакция: 28 Декември 2012, 22:59:57 от svilen88 »

Борис

  • Гост
Re: Задача С++
« Отговор #1 -: 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.  
« Последна редакция: 28 Декември 2012, 21:51:28 от Борис »

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #2 -: 28 Декември 2012, 22:56:46 »
 :-X
Хм, нищо общо с това което съм писал аз.
Мерси ей сега ще се опитам да разбера какво си написал. :)

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #3 -: 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]; / тейкато го взех от интернет и неуспях да разбера добре какво прави.

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Задача С++
« Отговор #4 -: 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].
"М" между другото също трябва да е деклариран като указател.
« Последна редакция: 02 Януари 2013, 23:41:39 от kjufte »

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #5 -: 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
« Последна редакция: 07 Януари 2013, 16:35:53 от svilen88 »

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Задача С++
« Отговор #6 -: 07 Януари 2013, 15:44:17 »
Погледнахкода само отгоре отгоре, ама веднага ми направиха впечатление 2 неща.
1. size не е инициализирана и не я зануляваш както ти казах. Най-добре в функцията за въвеждане го инициализирай с 0.
2. size  е глобална променлива. Значи се вижда от всички функции. Няма нужда да я предаваш като параметър. Може директно да я използваш.

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #7 -: 07 Януари 2013, 16:29:24 »
Не можах да разбера какво "губя", ако не я зануля. Моля за малко разяснение.
За size, сега като го прочетох и веднага ми светна, че .... да вярно нали за това го правя глобална променлива  ;D

Мерси :)

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Задача С++
« Отговор #8 -: 08 Януари 2013, 01:03:56 »
Абе приятел... как така я отметна таз задача като готова? Ти тествал ли си си кода дали работи и ако работи това което искаш ли прави? Щото аз го пробвах на бързо и горе долу нищо не работи при мене. Трябва малко повече да почетеш по темата с масивите . На всякъде ги почваш от едно (поради което и няма как кода ти да работи), но при компютрите броенето започва от нула. Инициализирането е една хубава практика с която ще избегнеш доста грешки и нежелни резултати. Например указателите ти М. Ако директно извикаш някоя функция която ги получава като параметър без да си въвел масив ще получиш моментално грешка.  Трябва обстойно да си проверяваш кода като го пишеш. Видях и че подреждаш елементите по стойност в низходящ ред, а условието ти е да ги подреждаш във възходящ ред.

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #9 -: 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 грешка :?
« Последна редакция: 08 Януари 2013, 15:52:25 от svilen88 »

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Задача С++
« Отговор #10 -: 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 остава неинициализиран. Демек една голяма цифра дето за нищо не става.
Аз кода го подкарах, но като разцъках из менютата и само грешки и крашове.

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #11 -: 08 Януари 2013, 15:57:46 »
Това е оправено вече. И при мен пак не ми даваше грешка. Не знам защо НЕ ми дава грешки тогава.

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: Задача С++
« Отговор #12 -: 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;...) Това разбира се в случай, че изобщо имаш нужда от две условия и игнорирайки грешките с индексите в масивите.
Общо взето кода ти има много грешки, но са все неща основни за програмирането и които трябва да се знаят както азбуката трябва да се знае преди да почнеш да пишеш някой език.

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #13 -: 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];? Не знам дали пак не съм оплескал нещо, но все пак всичко работи, и при анализ не ми изкарва предупреждения.
« Последна редакция: 13 Януари 2013, 19:17:37 от svilen88 »

svilen88

  • Newbie
  • *
  • Благодарности
  • -Казани: 4
  • -Получени: 0
  • Публикации: 19
Re: Задача С++
« Отговор #14 -: 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: Приятел ми спомена, че тази схема ще стане много лесно с структори, сега ще прочета къде що имам в учебниците и в най-скоро време ще сложа "работещ" код.
« Последна редакция: 14 Януари 2013, 16:26:26 от svilen88 »