Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

synner

Потребител
  • Регистрация

  • Последно онлайн

  1. synner отговори в добавена от Kalisko тема в Програмиране
    Алгоритъмът стъпва на всеки елемент от масива, взима го и го избутва назад/в началото като го поставя/набутва между вече предишните избутани елемент, ефективно оставяйки сортиран масив "зад" текущия елемент! Оф, има и много по-добри обяснения от моето! Примерът в Wikipedia доста добре го илюстрира!
  2. synner отговори в добавена от kiutov тема в Програмиране
    Според мен решението на задачата изисква генерирането на всички комбинации на N елемента (множеството точки) от 3-ти клас (точките като върхове на триъгълника)! Това не е много просто, а ти казваш, че с указатели и структури се бъркаш... Мисля, че трябва да се пренапише void proverka(tochka*t[],int*U) функцията....
  3. Пак не си ми написал структурата ти, та ми се налага да си измислям аз!typedef struct { char name[64]; float grade; unsigned int year; node * next; } node; int compare_by_name (const void * a, const void * b) { return strcmp( ( *((node **) a) )->name, ( *((node **) b) )->name ); } node * sort_linked_list(node const * l, unsigned int * const size) { node ** arr = NULL; int index = 0; *size = 0; while (l) { // Linked list to array! arr = (node **) realloc(arr, sizeof(node*) * ++(*size)); // Array of pointers to nodes! arr[(*size)-1] = l; l = l->next; } qsort( (void *) arr, (size_t) *size, sizeof(student *), compare_by_name ); for (index = 0; index < (*size)-1; ++index) { // Array to linked list arr[index]->next = arr[index+1]; } l = arr[0]; free(arr); return l; }Идеята е да създадеш динамичен масив от указатели към всеки един от nodе-овете в свързания ти списък! След това сортираш масива от указатели на базата на това, даден указател към какъв node сочи! След това просто навръзваш node-овете в реда, в който са ти указателите в динамичния масив! node * delete_node(node * target) // Delete SINGLY linked list node, return next node. { node * n = terget->next; free(target); return n; } node * del_below_average(node const * head) { node * iterator = head; unsigned int num = 0; float average_grade = 0.0; while (iterator) { // First pass, determine average grade num++; average_grade += iterator->grade; iterator = iterator->next; } average_grade /= (float) num; // We now have the average grade! iterator = head; // Rewind list while (iterator) { // Second pass if (iterator->grade < average_grade) { if (iterator == head) head = iterator->next; // Special case for head node iterator = delete_node(iterator); // delete low-graded node, jump to next node continue; } iterator = iterator->next; } return head; } Нямам идея дали ще работи, писах го на Notepad++! Същото е като 1. но ще ти бъде друга сравняващата функция int compare_by_name (const void * a, const void * b)! Сортираш по година и отпечатваш! Бих желал с гласни разсъждения тук във форума да ми обесниш как би трябвало да изглежда тази друга сравняваща функция?
  4. synner отговори в добавена от Sturm! тема в Програмиране
    Можеш iframe-ове да ползваш или CSS float за да си наредиш елементите! Дай по-конректно описание за да предложим по-точно решение! Дай картинки или примерни варианти на това, което искаш!
  5. synner отговори в добавена от andros тема в Програмиране
    Aaaа ми, оправи се... mitkohr и georgedimov те оправиха! Разликата е, че double предлага двойно по-голяма прецизност/точност след десетичната запетая! float precision - 7 digits. double precision - 15 digits.
  6. Решавана е вече → тук! Даже като гледам jarek я е копирал и кирилизирал! Решението на hubgobllin не отговаря на условието, защото: • не използва динамични масиви, а статични с дължина за не повече от 10 точки • при изчисляване на средната дължина в реда sr /= N-1; се извършва целочислено деление, като в sr се запаметява само цялата част от числото, резултат на делението! • програмата не принтира на края резултатите от цялата хамалогия
  7. Дай да видя как си си описал структурата и ще видим как се пише функция, която обръща списъка в масив (няколко теми на долу съм писал за това) и ще я сортираме с qsort() по който критерий искаш! Виж тук! Опитай сам, ако се запънеш пиши!
  8. Програмата забива не защото освобождаваш елемента, а защото първо освобождавап паметта, към която сочи указателят crnt, а после два реда по-надолу се опитваш да го прочетеш, a той не сочи към нищо смислено: crnt=crnt->next;Предлагам while цикъла да изглежда така:while( crnt ) { if( !strcmp(crnt->st.fn, FN) ) { prev->next = crnt->next; free(crnt); crnt = prev->next; continue; // Или brake; или return; ако искаш да спреш търсенето! } prev = crnt; crnt = crnt->next; } Във void srtName(Node **ph) for(p=ph;*(p+1);p++)не можеш да разчиташ, че паметта след края на твоя масив е запълена с нули, някой друг процес може да се е разположил там! Подай number променлива на тази функция за да знае до кога да брои! Успех, да кажеш дали се получава!
  9. Аве така ли ми се стува или твоята void Trii_avtor(Spisuk ** list, int mode) си я взел от друга програма? Какъв е този fac number, 'дето искаш да въвеждаш? А после му правиш някаква валидация, 'дето не я разбирам... А защо memset-ваш паметта, която държи елемента на '\0' и тогава я освобождаваш? Направо free(), като преди т'ва връзваш предишния и следващия елемент за да прескочиш този, който освобождаваш! Изобщо целнта на void Trii_avtor(...) е да трие филм с определен автор? Структурата за филма пък има полета за ЕГН и курс, което пак свидетелства, че се опитваш да преправиш друга програма за твоите нужди! Според мен функцията за 3-та точка трябва да изглежда така в псевдокод, който няма да работи с твоята програма: void print_maxlen_movie(list const * l) { list * head = l; // Remember where the head is unsigned int max_len = head->len; while(l) { // First pass, find movie with max len if (l->len > max_len) max_len = l->len l = l->next; } l = head; // Rewind list while (l) { // Second pass, find movie with max_len and print it if (l->len == max_len) { print_movie(*l); // Use your own function break; } l = l->next; } }Това е идеята, трябва малко да я преправиш за твоята програма! Изтриване на елемент по критерий е аналогично, но вместо print_node() викаш delete_node() и няма нужда да обхождаш два пъти! За сортиране на списъци има специални алгоритми като Merge Sort, пригодени за списъци! Но в училищата обичат да ви карат да преобразувате списъка в масив, да го сортирате и да го принтирате! Преобразуването от списък в динамичен масив може да стане със следната функция, която можеш да използваш на готово, като преправиш типа на входящите променливи на функцията: list * list2arr(list const * l, unsigned int * const size) { list * arr = NULL; *size = 0; while (l) { arr = (list *) realloc(arr, sizeof(list) * ++(*size)); arr[(*size)-1] = l; arr[(*size)-1].next = NULL; //just in case, break the list! l = l->next; } return arr; }Тази функция, която също трябва да преправиш леко за твоите нужди (тина на променливата за списъка), работи като вкараш списъка и променлива за размера на масива, а тя ти връща динамичен масив! Не забравяй да го освободиш след употреба! Сортираш го с qsort() и го принтиш! За пореден път акцентирам, че кодът, който ти давам, НЕ работи за твоята програма конкретно, понеже ти нямаш работеща програма, за която да ти напиша код! Трябват леки корекции по типа на променливата за списъка!!!
  10. synner отговори в добавена от fanku тема в Програмиране
    Колега, моля те, сложи си кода в таг и го табулирай за да е четлив!
  11. synner отговори в добавена от mganga тема в Програмиране
    1. Използваш глобална променлива (указателя към главата на списъка). Това даскалите не го обичат! 2. Във функцията за записване ще е добре да сложиш възможност потребителят да избира името на изходящия файл! 3. В client * vavejdane(void) имаш ред L;, което би трябвало да е синтактична грешка! 4. Във функцията за записване в бинарен файл, ги записваш от главата към опашката, а при четене ги добавяш като глава винаги (демек наобратно ги четеш)! 5. Във функцията за четене си писал: }while(fread(tmp, sizeof(*tmp), 1, f2));, което според мен означава, че пропускаш всеки втори записан клиент! Използвай while(!feof(f2)); 6. Не сортираш клиентите по година на раждане като им записваш адресите! Това са ми забележките на първо четене, може и да греша за нещо, защото съм малко уморен!
  12. synner отговори в добавена от abyssinian тема в Програмиране
    Качваш си MS Visio от ######, правиш нов SDL документ и почваш да чертаеш, следвайки алгоритъма, по който ТИ си писал програмата!
  13. synner отговори в добавена от diablo21 тема в Програмиране
    Какво не ти харесва на съвета на dvader?
  14. И на мен ми трябват няколко милиона ?, ма няма! Не очаквай някой да ти напише домашното и то безвъзмездно! Форумите помагат на хората, не им вършат работата! Почни сам и ако се запънеш някъде ще помагаме!
  15. synner отговори в добавена от mganga тема в Програмиране
    Научи се да използваш табулация и тага, че така на никой не му е приятно да ти чете кода или няма да го прочете изобщо!

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

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

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.