Вниз  C / C++
- 5.10.2015 / 20:52
Naik
  Пользователь

Naik 
Сейчас: Offline
Banschey, ты так просто «заткнешь» рот компилятору) В будущем видимо это уберут, не зря же устарело
- 5.10.2015 / 21:26
Banschey
  Пользователь

Banschey 
Сейчас: Offline
Naik, я знаю. Он мне предложил использовать новую функцию но там нужен был размер и я не стал парится по этому поводу и просто вырубил его.
- 7.10.2015 / 21:20
OLEKMAY
  Пользователь

OLEKMAY 
Сейчас: Offline
народ, помогите разобраться, есть прога на си++(на мазохизмы не обращайте внимания), в общем она работает со списком STL List, и возникает небольшая проблемка при сортировке списка по возростанию(по убіванию сортируется, а наоборот никак).
  вот отдельно ф-я сортировки:
  1. struct Student{ // структура даних списку
  2.     string Name;
  3.     string Surname;
  4.     int Kolokvium[2];
  5.     int Lab[4];
  6. };
  7. list<Student> Data;
  8.  
  9. list<Student> Sort(list<Student> Sorted, int Type){ // ф-я сортування примймає список для сортування і тип 0/1 - спадання/зростання
  10.     list<Student>::iterator Next; // змінна типу ітератор
  11.     Student Buffer; // буфер для копіювання
  12.     for(list<Student>::iterator i=Sorted.begin(); i!=Sorted.end(); i++){ // цикли для проходження по списку, iter - ітератор(ключ) для звертання до елементів списку
  13.         for(list<Student>::iterator j=Sorted.begin(); j!=Sorted.end(); j++){
  14.             Next=j; // присвоюємо Next значення поточного елемента
  15.             if(Next==Sorted.end()) // якщо розглядається останній елемент як поточний - виходимо з циклу
  16.                 break;
  17.             Next++; // задаємо Next-у значення наступного елемента
  18.             int OneStudent=(*(j->Kolokvium+0))+(*(j->Kolokvium+1))+(*(j->Lab+0))+(*(j->Lab+1))+(*(j->Lab+2))+(*(j->Lab+3)); // сума балів поточного студента
  19.             int TwoStudent=(*(Next->Kolokvium+0))+(*(Next->Kolokvium+1))+(*(Next->Lab+0))+(*(Next->Lab+1))+(*(Next->Lab+2))+(*(Next->Lab+3)); // сума балів наступного студента
  20.  
  21.             if(Type==0){ // тип сотрування: за спаданням
  22.                 if(OneStudent>TwoStudent){ // якщо поточний елемент більший за наступний то міняємо їх місцями
  23.                     Buffer=(*(j)); // j - покажчик, тобто *(j) - значення з ячейки пам'яті на яку показує j
  24.                     *(j)=(*(Next)); // аналогічно значенню j присвоюєм значення Next
  25.                     *(Next)=Buffer;
  26.                 }
  27.             }
  28.  
  29.             if(Type==1){ // тип сотрування: за зростанням    !!! АЛЕ З НЕЗРОЗУМІЛИХ ПРИЧИН ПОКИЩО НЕ ПРАЦЮЄ (програма вилітає) !!!
  30.                 if(OneStudent<TwoStudent){ // якщо поточний елемент більший за наступний то міняємо їх місцями
  31.                     Buffer=(*(j)); // j - покажчик, тобто *(j) - значення з ячейки пам'яті на яку показує j
  32.                     *(j)=(*(Next)); // аналогічно значенню j присвоюєм значення Next
  33.                     *(Next)=Buffer;
  34.                 }
  35.             }
  36.  
  37.         }
  38.     }
  39.     return Sorted; // повертаємо відсортований список
  40. }



Прикрепленные файлы:
prog.cpp (6.99 кб.) Скачано 384 раза
- 8.10.2015 / 06:43
DominaN
  Пользователь

DominaN 
Сейчас: Offline
не понял ни один из комментов. Пусть Витя разбирается, чтоль
- 8.10.2015 / 12:50
Naik
  Пользователь

Naik 
Сейчас: Offline
DominaN, там коменты ни о чем, можешь не см на них)
- 8.10.2015 / 13:29
aNNiMON
  Супервизор

aNNiMON 
Сейчас: Offline
DominaN, не, тут я бессилен, даже с пониманием комментариев.
__________________
 let live
- 8.10.2015 / 15:59
Banschey
  Пользователь

Banschey 
Сейчас: Offline
Пока из того что ты скинул сортировать то и не чего,они все одинаковые при попытке сортировать мне выбивает что итиратор вышел или указывает за приделы.

Изменено Banschey (8.10 / 16:10) (всего 1 раз)
- 12.10.2015 / 11:19
Jahak
  Пользователь

Jahak 
Сейчас: Offline
Что означает * в C / C++?
В :php: это умножение. Ща посмотрел сорцы некоторых проектов на C && C++, так там очень много где используется звёздочка, а вот что она кроме умножения там значит никак понять не могу :-(
- 12.10.2015 / 11:37
Freddy
  Пользователь

Freddy 
Сейчас: Offline
Jahak, указатель на данные в памяти. Содержит адрес ячейки памяти, на которую указывает
  1. int a = 3; //это просто переменная
  2. int *p = &a; //это указатель на переменную a в памяти. Значение будет примерно таким: 0x7fffffffdc98
  3. int b = *p; //так можно получить значение по указателю. b равно 3.

- 12.10.2015 / 12:11
Jahak
  Пользователь

Jahak 
Сейчас: Offline
Freddy, Спс, буду дальше изучать C в свободное время :gg:
Наверх  Всего сообщений: 2777
Фильтровать сообщения
Поиск по теме
Файлы топика (111)