Премини към съдържанието

Препоръчан отговор


Имам една задача, която не мога да реша до край... 

 

Да се създаде свързан списък от цели числа, до въвеждането на 0. Да се 

намерят най-малкото положително и най-голямото отрицателно число в списъка. Да
се изтрият от списъка всички елементи, които са по-малки от средното аритметично
на тези две числа. Промененият списък да се изведе на екрана.
 

#include <iostream>

#include <list>
#include <queue>
#include <stdlib.h>
 
using namespace std;
 
int main()
{
    list<int> l ;
    list<int>::iterator it;
    int n;
    int x;
     while(x!=0){
          cout<<"Enter an element: ";
          cin>>x;
     l.push_back(x);
     }
     for ( it = l.begin(); it != l.end(); it++ )   //Обхождане и извеждане на списък
    //cout << *it << " ";   
                               
     ???
 
    return 0;
}
 

 

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

"Да се създаде свързан списък от цели числа" - го разбирам не да ползваш наготово STL списък, а да си организираш списъка сам - структура, методи за добавяне и триене на елемент от списъка и чак след това да търсиш минимално положително, максимално отрицателно и кои елементи да махнеш.

Редактирано от ined (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Да се създаде свързан списък от цели числа, до въвеждането на 0. Това го направих, а това означава да въведеш числата от клавиатурата докато въведеш 0. След това незнам как да намеря най-малкото положително и най-малкото отрицателно, просто забих...

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Да се създаде свързан списък от цели числа, до въвеждането на 0. Това го направих, а това означава да въведеш числата от клавиатурата докато въведеш 0. След това незнам как да намеря най-малкото положително и най-малкото отрицателно, просто забих...

проверявате следното

числото < от предишното най-малко И числото >0

аналогично за отрицателните

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

С масивите е по-лесно май..

Редактирано от Valentino512 (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

проверявате следното

числото < от предишното най-малко И числото >0

аналогично за отрицателните

Има малък трик с инициализацията. Особено, ако допуснем, че няма граници.

Искам да попитам дали мога да ги намеря като използвам quicksort ?

Това ще е невероятно неефективен начин. Не стига че сортирането е много по-тежка операция, ами и ще трябва да използваш специална сортираща функция/клас или да ги търсиш в средата на сортирания списък.

Ако ще ползваш готови - то си има функции за максимална и минимална стойност.

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Има малък трик с инициализацията. Особено, ако допуснем, че няма граници.

Това ще е невероятно неефективен начин. Не стига че сортирането е много по-тежка операция, ами и ще трябва да използваш специална сортираща функция/клас или да ги търсиш в средата на сортирания списък.

Ако ще ползваш готови - то си има функции за максимална и минимална стойност.

На края ще си го направа сам май  :D

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Има малък трик с инициализацията. Особено, ако допуснем, че няма граници.

...

Аз присвоявам първия елемент и въртя цикъла от втория :)

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Тоя номер не минава ако има допълнително условие и това условие не се изпълнява за първия елемент.

Примерно търсиш най-малкото положително, ако първия елемент е отрицателно число няма как да го използваш.

Редактирано от ined (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Тоя номер не минава ако има допълнително условие и това условие не се изпълнява за първия елемент.

Примерно търсиш най-малкото положително, ако първия елемент е отрицателно число няма как да го използваш.

Под първия елемент имам предвид първия, който изпълнява останалите условия :)

  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не извъртай думите, достатъчно е да бутнеш контекста...


Като гледам в нета, повечето учители учат да се почва с + безкрайност или минус безкрайност, или нула, щото са крайности. Но с първия елемент е по удобно, и не се налага да познаваш крайностите, или да ги търсиш, или да си ги спомняш.

 

Предполагам, че е останало от някой авторитет, който е правел и е преподавал така. Както навсякъде, ползването на чуждия опит и откривателството имат своите предимства и недостатъци.

Редактирано от Реджеп Иведик (преглед на промените)
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

На края ще си го направа сам май  :D

То това е идеята. Ние само помагаме :)

Под първия елемент имам предвид първия, който изпълнява останалите условия :)

Това имах предвид. :P Особено ако вземем предвид че търсим не една, а две стойности отговарящи на различни условия. Това внася ограничения, например не можеш да продължиш директно след инициализиращия цикъл.
  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ето го и решението ми:

(най-накрая :D )

 

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;

bool Max (const int& value) { return (value > 0); }         //  Функция с която изтривам положителните
bool Min (const int& value) { return (value < 0); }           // Функция с която изтривам отрицателните

int main()
{
    list<int> l ;
    list<int>::iterator it;
    list<int> l2;
    list<int>::iterator it2;
    list<int> l3 ;
    list<int>::iterator it3;
    int x;
     while(x!=0){   
          cout<<"Enter an element: ";             
          cin>>x;                                 
          l.push_back(x);
          l2.push_back(x);
          l3.push_back(x);
     }

     l.pop_back();                      
     l2.pop_back();
     l3.pop_back();

     cout << endl;
     l.remove_if (Min);
     it =  min_element( l.begin(), l.end() );
     cout<< "nai-maluk polojitelen element= " << *it ;
     cout<< endl;

     cout << endl;
     l2.remove_if (Max);
     it2 =  max_element( l2.begin(), l2.end() );
     cout<< "nai-golqm otricatelen element= " << *it2 ;
     cout<<endl;

     for ( it3 = l3.begin(); it3 != l3.end(); it3++ )      //Обхождане и извеждане на списък
     cout << *it3 << "  ";                                   // Извеждане на елементите на списъка
     return 0;
}
gallery_167987_1965_10618.png

 

Редактирано от Valentino512 (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Направо си я предобрил, вместо един списък цели три.

Проблема е че не се вързва с условието.

  • Харесва ми 1

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Направо си я предобрил, вместо един списък цели три.

Проблема е че не се вързва с условието.

Между другото направи ли ти впечатление, че последната част от условието е особено смислена?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Има една неяснота, Ако имаш положителни и отрицателни елементи - махаш отрицателните и останалия списък го извеждаш.

Но ако имаш само отрицателни или само положителни как да определиш средното аритметичното?

Ако са само положителни да кажем го оставяш списъка както си е, ама ако са отрицатени празен ли да го оставиш или най-голямото отрицателно трябва да остане.?

Редактирано от ined (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Има една неяснота, Ако имаш положителни и отрицателни елементи - махаш отрицателните и останалия списък го извеждаш.

Но ако имаш само отрицателни или само положителни как да определиш средното аритметичното?

Ако са само положителни да кажем го оставяш списъка както си е, ама ако са отрицатени празен ли да го оставиш или най-голямото отрицателно трябва да остане.?

Да, едно че не е определено поведението във всички случаи и две че изтриване на всички по-малки от средно аритметичното е винаги еквивалентно на изтриване на всичките отрицателни числа, което изобщо прави безсмислено намирането му.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Поправям се! 

#include <iostream>
#include <list>
#include <algorithm>

using namespace std;

int abc;
bool Max (const int& value) { return (value > 0); }         //  Функция с която изтривам положителните
bool Min (const int& value) { return (value < 0); }           // Функция с която изтривам отрицателните
bool srd (const int& value) { return (value < abc); }            // Функция с която изтривам по-малки от средното аритметично

int main()
{
    list<int> l ;
    list<int>::iterator it;
    list<int> l2;
    list<int>::iterator it2;
    list<int> l3 ;
    list<int>::iterator it3;
    int x;
     while(x!=0){
          cout<<"Enter an element: ";
          cin>>x;
          l.push_back(x);
          l2.push_back(x);
          l3.push_back(x);
     }

     l.pop_back();
     l2.pop_back();
     l3.pop_back();

     cout << endl;
     l.remove_if (Min);
     it =  min_element( l.begin(), l.end() );
     int m = *it;
     cout<< "nai-maluk polojitelen element= " << *it ;
     cout<< endl;
     cout<< endl;

     cout << endl;
     l2.remove_if (Max);
     it2 =  max_element( l2.begin(), l2.end() );
     int n = *it2;
     cout<< "nai-golqm otricatelen element= " << *it2 ;
     cout<<endl;
     cout<<endl;

     int srda = (m+n)/2;
     abc = srda;
     l3.remove_if(srd);
     for ( it3 = l3.begin(); it3 != l3.end(); it3++ )      //Обхождане и извеждане на списък
     cout << *it3 << "  ";                                   // Извеждане на елементите на списъка
     return 0;
}

и живота на Чарли Шийн не е лесен  :D 

Редактирано от Valentino512 (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

  • Разглеждащи това в момента   0 потребители

    Няма регистрирани потребители разглеждащи тази страница.

  • Подобни теми

    • от Alexandar Jelev
      Здравейте, искам  да попитам някой може ли да ми помогне за курсовата задача, ще му бъда изключително благодарен? :)
      Задачата е следната:
      Съставете програма с функции за:
      а) Въвеждане от клавиатура във файл и в масив ( чрез добавяне) данни за автобусни превози ( до 35 ) - Автогара Варна: маршрут, дата (1 до 31), номер на автобуса, фамилия на водача, брой пътници, цена на съответните билети, обща сума на билетите - през месец юли. Извеждане текущото съдържание на масива (файла) на екран;
      б) Извеждане на екран справка за всички превози през избран ден от месеца ( със запитване за нова справка);
      в) Извеждане на екран номерата на автобусите и общата сума на билетите от превозите, извършени с тях, подредени в низходящ ред по сумата.
                   Главна функция main() -с меню  за избор на функции и проврка за състоянието на данните.  Използване на функции с предаване на параметри.
       
    • от Plamy Gerova
      Здравейте, може ли помощ за курсовата ми задача?
      съставете програма с функции за:
      а) въвеждане от клавиатурата във файл и в масив( чрез добавяне) данни за морски пътувания (до 25)- Морска гара Варна: маршрут, кораб-име, име на капитан, цени на билетите- I,II класа, брой пасажери в съответната класа, обща сума на продадените билети- през избран месец от годината.Извеждане текущото съдържание на масива(файла) на екрана.
      б) извеждане на екран данните за превозите на кораб по въведено от клавиатурата име на кораб(със запитване за справка)
      в) извеждане на екран данните за морско пътуване с най- голяма обща сума на продадени билети.
      Главна функция main()- с меня за избор на функции и проверка за състоянието та данните.Използване на локални променливи и функции с предаване на параметри. 
       
    • от Десислава Нешева
      Здравейте на всички. Имам въпрос, свързан с програмата си++. Имам матрица, на която търся сума от отрицателните елементи. Въпроса ми е как ще стане това нещо да се запише във файл, искам резултата да се показва само във файла, а не цялата матрица. Ето моя код:

      #include <iostream>

      #include<fstream>

      int main()

      {

      int a[10][10],m,n;

      int sum=0;

      std::cout<<"rows= ";

      std::cin>>m;

      std::cout<<"cols= ";

      std::cin>>n;

      for (int i=0; i<m; i++)

      for (int j=0; j<n; j++)

      {

      std::cout<<"a["<<i<<"]["<<j<<"]= ";

      std::cin>>a[j];

          if(a[j]<0) sum=sum+a[j];

      std::cout<<"sum= "<<sum;}

      return 0;

      }

      Благодаря, предварително !!!
    • от Boqn Tzonev
      #include <iostream> #include <iomanip> #include <string> #include <fstream> using namespace std; const int N = 5; struct player { string ime; string familia; string otbor; int nomer; int vk_golove; } igrachi[N], podredba; // Prototypes. int add_player(player a[]); void search_by_number(player a[], int &nomer_na_igracha); void search_by_team(player a[], string & ime_na_otbora); void klasirane(player a[]); void actual(player a[], int &nomer_na_igracha, string & ime_na_otbora); //********************************************** fstream igrachi_file; //********************************************** int add_player(player a[]) { int br; igrachi_file.open("igrachi.txt", ios::out | ios::app); // <--- As an "fstream" this needs to know if it is input or output. do { //cout << "\n Broi igrachi:"; cout << "\n Number of players:"; cin >> br; } while (br <= 0 || br > N); if (igrachi_file.fail()) { cout << "Error. The file is missing."; exit(1); } for (int i = 0; i < br; i++) { //cout << "Vuvedi ime na igrach:"; cout << " Enter player's first name: "; cin >> a[i].ime; igrachi_file << a[i].ime << endl; //cout << "Vuvedi familia na igrach:"; cout << " Enter a player's last name :"; cin >> a[i].familia; igrachi_file << a[i].familia << endl; //cout << "Vuvedi otbor na igracha:"; cout << " Enter a player's team: "; cin >> a[i].otbor; igrachi_file << a[i].otbor << endl; //cout << "Vuvedi nomer na igracha:"; cout << " Enter the player number: "; cin >> a[i].nomer; if (a[i].nomer > 99 || a[i].nomer < 1) { do { //cout << "Vuvedete nomer ot 1 do 99. \n"; cout << "Enter number 1 to 99. \n"; cin >> a[i].nomer; } while (a[i].nomer > 99 || a[i].nomer < 1); } igrachi_file << a[i].nomer << endl; //cout << "Vuvedi vkarani golove na igracha:"; cout << " Enter player goals scored: "; cin >> a[i].vk_golove; if (a[i].vk_golove < 0) { do { //cout << "Vuvedete golove >= 0 \n"; cout << "Enter goals >= 0 \n"; cin >> a[i].vk_golove; } while (a[i].vk_golove < 0); } igrachi_file << a[i].vk_golove << endl; } igrachi_file.close(); } void search_by_number(player a[], int &nomer_na_igracha) { int flag = 0; igrachi_file.open("igrachi.txt", ios::in); igrachi_file.seekg(0); if (igrachi_file.fail()) { cout << "Fail to open the file"; exit(1); } for (int i = 0; i < N; i++) { igrachi_file >> a[i].ime; igrachi_file >> a[i].familia; igrachi_file >> a[i].otbor; igrachi_file >> a[i].nomer; igrachi_file >> a[i].vk_golove; if (nomer_na_igracha == a[i].nomer) { cout << "Igrach: " << a[i].ime << " " << a[i].familia << "\nOtbor: " << a[i].otbor << "\nNomer: " << a[i]. nomer << "\nVkarani golove: " << a[i].vk_golove << endl; flag++; } } if (!flag) cout << endl << "Nqma takuv igrach!" << endl; igrachi_file.close(); } void search_by_team(player a[], string & ime_na_otbora) { int flag = 0; igrachi_file.open("igrachi.txt", ios::in); igrachi_file.seekg(0); if (igrachi_file.fail()) { cout << "Fail to open the file"; exit(1); } for (int i = 0; i < N; i++) { igrachi_file >> a[i].ime; igrachi_file >> a[i].familia; igrachi_file >> a[i].otbor; igrachi_file >> a[i].nomer; igrachi_file >> a[i].vk_golove; if (ime_na_otbora == a[i].otbor) { cout << "Igrach: " << a[i].ime << " " << a[i].familia << "\nOtbor: " << a[i].otbor << "\nNomer: " << a[i]. nomer << "\nVkarani golove: " << a[i].vk_golove << endl << endl; flag++; } } if (!flag) cout << endl << "Nqma takuv otbor!" << endl; igrachi_file.close(); } void klasirane(player a[]) { igrachi_file.open("igrachi.txt", ios::in); igrachi_file.seekg(0); // <--- Not needed as the file pointer is already at the beginning from the open statement. for (int i = 0; i < N; i++) { igrachi_file >> a[i].ime; igrachi_file >> a[i].familia; igrachi_file >> a[i].otbor; igrachi_file >> a[i].nomer; igrachi_file >> a[i].vk_golove; } cout << "ime" << setw(15) << "familia" << setw(15) << "otbor" << setw(15) << "nomer" << setw(15) << "vkarani golove" << endl; for (int i = 0; i < N; i++) { cout << a[i].ime << right << setw(15) << a[i]. familia << right << setw(15) << a[i]. otbor << right << setw(15) << a[i]. nomer << right << setw(15) << a[i].vk_golove << endl; } igrachi_file.close(); } int main() { int choice; int nomer_na_igracha; string ime_na_otbora, familia_na_igracha; player a[N]; do { cout << "\n================================================================================" << endl; cout << "\t\tMenu\n\n"; //cout << "= Izberete:\n"; cout << " Choose:\n"; //cout << "= 1. Dobavqne na igrachi\n"; cout << " 1. Add players\n"; //cout << "= 2. Spisuk s igrachite\n"; cout << " 2. List of players\n"; //cout << "= 3. Spravka za igrach po nomer\n"; cout << " 3. Reference for player by number\n"; //cout << "= 4. Spravka za igrach po otbor\n"; cout << " 4. Player report by team\n"; //cout << "= 5. Aktualizirane\n"; cout << " 5. Update\n"; //cout << "= 6. Krai\n"; cout << " 6. End\n"; cout << "\n================================================================================" << endl; cin >> choice; switch (choice) { case 1: { add_player(a); break; } case 2: { klasirane(a); break; } case 3: { cout << "Tursene po nomer: "; cin >> nomer_na_igracha; search_by_number(a, nomer_na_igracha); break; } case 4: { cout << "Tursene po otbor: "; cin >> ime_na_otbora; search_by_team(a, ime_na_otbora); break; } case 5: { cout<< "Update:"; cin>> nomer_na_igracha, ime_na_otbora; } break; } } while (choice != 6); } Здравейте имам нужда от малко помощ с моята курсова задача.Остана ми да направя единствено актуализацията ,но не мога да се справя. Ето и какво съм направил по актуализацията.Ще го постна като отговор долу.

      void actual(player a[], int nomer_na_igracha, string ime_na_otbora) { int i{}; fstream igrachi_file; igrachi_file.open("igrachi.txt", ios::in); while (getline(igrachi_file, a[i].familia)) // <--- Changed. { igrachi_file >> a[i].vk_golove; igrachi_file.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // <--- Requires header file <limits>. getline(igrachi_file, a[i].otbor); i++; } igrachi_file.close(); //cout << "Vuvedete igrachite chiqto informaciq iskate da redaktirate: "; cout << "Enter the players whose information you want to edit: "; //cin >> num; // <--- Not defined or used. //cout << "\n Ime: "; cout << "\n Name: "; std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // <--- Requires header file <limits>. getline(cin, a[i].familia); //cout << "\n Golove: "; cout << "\n Goals: "; cin >> a[i].vk_golove; // <--- goals. cin.get(); cout << endl << endl; } Кодът не е правилен.Да се види до къде съм стигнал.
    • от kirilov_philip
      Моля за помощ!!!
      Задача: Даден е двумерен масив A с m реда и n стълба. Да се напише програма на C++, която създава нов масив B, като стойността на елемента Bi(i e долен индекс) е равна на индекса на най-малката стойност в i-ия ред на A.
      Стигнах дотук.
      #include <iostream>
      #include <stdlib.h>
      using namespace std;
      int main()
      {
          int m, n;
          cout << "m="; cin >> m;
          cout << "n="; cin >> n;
          int A[100][100];
          int i, j;
          for(i=0;i<m;i++)
              for (j = 0; j < n; j++)
              {
                  cout << "A[" << i << "][" << j << "]="; cin >> A[j];
              }
      }
  • Дарение

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.