Да се напише програма, която позволява да се въвеждат числа до въвеждане на 0 и отпечатва числата, които са в указан предварително диапазон (a, b).
Всички задачи за:
Оградете кода с:
[c] за С++ програми [/c]
[pascal] за паскал [/pascal]Достъп до сайта:
С повишена трудност:
Задачите със звездичка са с повишена трудност - решавайте ги, ако сте решили другите.-
Последни задачи:
Последни решения:
- Marin

за Къде се намира точка - Marin

за Вмъкване и изтриване на елемент * - Marin

за Позицията на X - Alexander1





за Броят на максималните елементи - Alexander1





за Броят на максималните елементи - Marin

за Пари за закуска - Alexander1





за Ученици с дадена оценка - Alexander1





за По-големи от средното
- Marin
Топ участници за момента:
kaloyan164 решения/коментараGadget131 решения/коментараdreanor112 решения/коментараmarant74 решения/коментараsup3rEva68 решения/коментараБоряна65 решения/коментараNadq53 решения/коментараmaleboldjia48 решения/коментараkrisizdravi9543 решения/коментараMartinPlamenov38 решения/коментараЗадачи за дата:
ноември 2025 П В С Ч П С Н « февр. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Предишни задачи:
- февруари 2017 (38)
- януари 2017 (16)
- декември 2016 (17)
- ноември 2016 (14)
- октомври 2016 (26)
- юни 2016 (3)
- май 2016 (15)
- април 2016 (12)
- март 2016 (14)
- февруари 2016 (9)
- май 2015 (2)
- април 2015 (8)
- март 2015 (8)
- февруари 2015 (13)
- януари 2015 (11)
- декември 2014 (9)
- ноември 2014 (24)
- октомври 2014 (16)
- юни 2014 (2)
- май 2014 (8)
- април 2014 (10)
- март 2014 (14)
- февруари 2014 (22)
- януари 2014 (25)
- декември 2013 (27)
- ноември 2013 (37)
- октомври 2013 (38)
- септември 2013 (2)
- юни 2013 (6)
- май 2013 (10)
- април 2013 (19)
- март 2013 (35)
- февруари 2013 (32)
- януари 2013 (29)
- декември 2012 (28)
- ноември 2012 (37)
- октомври 2012 (26)
- септември 2012 (3)
- май 2012 (16)
- април 2012 (16)
- март 2012 (27)
- февруари 2012 (10)
- януари 2012 (13)
- ноември 2011 (16)
- октомври 2011 (8)
- април 2011 (4)
- март 2011 (19)
- февруари 2011 (19)
- януари 2011 (18)
- декември 2010 (25)
- ноември 2010 (10)
- октомври 2010 (33)
- септември 2010 (1)
По теми:
- break
- бройни системи
- булев тип
- вариантен избор
- вложена условна команда
- вложени цикли
- дати
- динамична променлива
- дървета
- запис
- изброим тип
- класове
- манипулатори на извеждането
- масив
- масив от записи
- многомерни масиви
- множества
- модули
- низ
- низове
- низови функции
- опашки
- отпечатване
- преобразуване на типовете
- реален тип
- рекурсия
- символен тип
- сортиране на масиви
- специфични операции за цели числа
- списъци
- стекове
- структури
- текстов файл
- типизирани файлове
- условна команда
- файл
- функции
- хедър файлове
- целочислен тип
- цикъл do-while
- цикъл for
- цикъл repeat
- цикъл while
- цифри на число
- шах
Всички задачи:
- 2016-2017 (111)
- Архив задачи (791)
- 2010-2011 (131)
- Информатика (131)
- 2011-2012 (109)
- ЗИП Информатика (4)
- 10в (4)
- Информатика (105)
- ЗИП Информатика (4)
- 2012-2013 (227)
- 2013-2014 (182)
- 2014-2015 (91)
- 2015-2016 (53)
- 2010-2011 (131)
Мета
Препоръчваме хостинг:

#include <iostream> using namespace std; struct ListNode { int value; // данни ListNode * next; // указател към следващия елемент }; void init(ListNode* &pStart) { // инициализиране на списък pStart = NULL; } void insertFirst(ListNode* &pStart, int aValue) {// вмъква елемент в началото ListNode* pnew = new ListNode ; // заделяме памет за новия елемент pnew->value = aValue; // записваме в него данните pnew->next = pStart; // следващият след него е стария първи елемент pStart = pnew; // запомняме новия елемент като първи } void insertLast(ListNode* &pStart, int aValue) {// вмъква елемент в края if(!pStart) // ако списъкът е празен insertFirst(pStart, aValue); // вмъкваме в началото else { ListNode* p = pStart; // започваме от първия while (p->next) p = p->next; // и търсим елемент без следващ (т.е. последния) ListNode* pnew = new ListNode ; // заделяме памет за новия елемент pnew->value = aValue; // записваме в него данните pnew->next = NULL; // той няма следващ елемент, защото е последен p->next = pnew; // но досегашният последен вече сочи към новия } } ListNode* nodeAt(ListNode* &pStart, int aPos) { // връща указател към елемент на зададена позиция if(aPos < 0) { // проверка за невалидна позиция cout << "Posiciata triabva da e >= 0!" << endl; return NULL; } if(!pStart) { // проверка за празен списък cout << "Spisaka e prazen!" << endl; return NULL; } if(aPos == 0) { // ако позицията е 0 return pStart; // връщаме указател към първия елемент } ListNode* p = pStart; // насочваме указател за обхождане към началото int i = 0; // декларираме брояч на елементите while(i != aPos && p) { // докато не достигнем желаната позиция и списъкът не е свършил p = p->next; // преминаваме на следващия елемент i++; // и увеличаваме брояча } if(!p) { // ако сме излезли от горния цикъл, защото p е станало NULL cout << "Nevalidna pozicia " << aPos << ", ima samo " << i << " elementa!" << endl; return NULL; } return p; // връщаме указател към открития елемент } bool insertAt(ListNode* &pStart, int aPos, int aValue) { // вмъква елемент на зададена позиция if(aPos == 0) { // ако позицията е 0 insertFirst(pStart, aValue); // ползваме наготово insertFirst return true; // и излизаме } ListNode* p = nodeAt(pStart, aPos-1); // намираме предишният елемент (на позиция APos-1) if(!p) return false; // ако няма такъв, явно има грешка ListNode* pNew = new ListNode ; // заделяме памет за новия елемент pNew->value = aValue; // записваме данните pNew->next = p->next; // 'следващ' на новия ще е елемента на позиция aPos p->next = pNew; // елемента на позиция aPos-1 ще сочи към новия return true; // вмъкването е успешно } bool removeFirst(ListNode* &pStart) { // премахва елемента в началото if(!pStart) { cout << "Spisaka e prazen!" << endl; return false; } ListNode* temp = pStart; // запомняме кой е първия елемент pStart = pStart->next; // насочваме началото към 'следващия' му delete temp; // изтриваме първия return true; } bool removeLast(ListNode* &pStart) { // премахва елемента в края if(!pStart) { cout << "Spisaka e prazen!" << endl; return false; } else if(!pStart->next) { delete pStart; pStart = NULL; return true; } else { ListNode* p = pStart; // започваме от първия while(p->next && p->next->next) p = p->next;// и търсим предпоследния елемент delete p->next; // изтриваме ел. след него (т.е. последния) p->next = NULL; // предпоследният вече няма следващ return true; } } bool removeAt(ListNode* &pStart, int aPos) {// премахва елемента на зададена позиция if(aPos == 0) { // ако позицията е 0 return removeFirst(pStart); // ползваме наготово removeFirst } ListNode* p = nodeAt(pStart, aPos-1); // намираме предишният елемент (на позиция APos-1) if(!p) return false; // ако няма такъв, явно има грешка ListNode* temp = p->next; // насочваме временен указател към ел. който ще премахваме p->next = temp->next; // 'следващ' за елемента преди изтривания ще е 'следващия' на изтривания ел. // т.е. изключваме елемента, който ще премахваме от списъка delete temp; // изтриваме елемента return true; } void removeAll(ListNode* &pStart) { // премахва всички елементи от списъка ListNode * temp; while(pStart) { // докато има нещо в списъка temp = pStart; // насочваме временния указател към първия елемент pStart = pStart->next; // насочваме началото към неговия 'следващ' delete temp; // изтриваме първия } } bool isEmpty(ListNode* pStart) { // проверява дали списъка е празен return !pStart; // ако началото не сочи на никъде значи е празен } bool getValueAt(ListNode* pStart, int aPos, int &aValue) {// прочитане на стойност на ел. на дадена позиция ListNode* p = nodeAt(pStart, aPos); if(!p) return false; aValue = p->value; return true; } bool setValueAt(ListNode* pStart, int aPos, int aValue) {// промяна на стойност на ел. на дадена позиция ListNode* p = nodeAt(pStart, aPos); if(!p) return false; p->value = aValue; return true; } void print(ListNode* &pStart) { // помощен метод за отпечатване на екран ListNode* p = pStart; while(p) { cout << p->value << ' '; // след последния елемент също се извежда интервал p = p->next; // с малка промяна на кода това може да се избегне } cout<<endl; } int main(void) { ListNode* L; init(L); int ch, a, b; //Въвеждаме числата cout<<"Vavedi chisla: "<<endl; do{ cin>>ch; if(ch==0) break; insertLast(L, ch); } while(true); //Въвеждаме диапазон cout<<"Vavedi diapazon: "; cin>>a>>b; //Обхождаме списъка while(L){ //ако числото е в диапазона го извеждаме if( (L->value > a) && (L->value < b) ) cout<<L->value<<endl; L = L->next; } return 0; }Вярно като логика, браво! Но си забравил накрая да освободиш паметта, заемана от списъка – нали това са динамични променливи, създадени по време на работата на програмата…