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

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

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

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





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





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

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





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





за По-големи от средното
- Marin
Топ участници за момента:
kaloyan164 решения/коментараGadget131 решения/коментараdreanor112 решения/коментараmarant74 решения/коментараsup3rEva68 решения/коментараБоряна65 решения/коментараNadq53 решения/коментараmaleboldjia48 решения/коментараkrisizdravi9543 решения/коментараMartinPlamenov38 решения/коментараЗадачи за дата:
август 2026 П В С Ч П С Н « февр. 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 31 Предишни задачи:
- февруари 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 <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int den,mesec,godina,posledenden; int den1,mesec1,godina1; cout<<"Vuvedete data: "; cin>>den>>mesec>>godina; if((mesec<0)||(mesec>12)||(den<0)) { cout<<" Nevalidna data!\n"; return 0; } switch(mesec){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: posledenden=31;break; case 4: case 6: case 9: case 11: posledenden=30;break; case 2: if((godina%4)==0) posledenden=29; else posledenden=28; break; } if(den>posledenden){ cout<<" Nevalidna data!\n"; return 0; } if((den+7)>posledenden){ den1=((den+7)-posledenden); if(mesec==12) { mesec1=1; godina1=++godina; } else { mesec1=++mesec; godina1=godina; } } else { den1=den+7; mesec1=mesec; godina1=godina; } cout<<den1<<"."<<mesec1<<"."<<godina1<<"\n"; }Доколкото ми беше възможно, оптимизирах решението. Сега изтрийте другото :D
Браво, решението е перфектно! Използвала си и новите оператори :)
Ако искаш дори още малко да я оптимизираш, може да не декларираш den1,mesec1,godina1, ами директно да увеличаваш den,mesec,godina – което и както е нужно. Така ще си спестиш няколко присвоявания. Но и така е мноооого добре!
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int den,mesec,godina,posledenden; cout<<"Vuvedete data: "; cin>>den>>mesec>>godina; if((mesec<0)||(mesec>12)||(den<0)) { cout<<" Nevalidna data!\n"; return 0; } switch(mesec){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: posledenden=31;break; case 4: case 6: case 9: case 11: posledenden=30;break; case 2: if((godina%4)==0) posledenden=29; else posledenden=28; break; } if(den>posledenden){ cout<<" Nevalidna data!\n"; return 0; } if((den+7)>posledenden){ den=((den+7)-posledenden); if(mesec==12) { mesec=1; godina=++godina; } else mesec=++mesec; } else den=den+7; cout<<den<<"."<<mesec<<"."<<godina<<"\n"; }Започнах с различните променливите за свое улеснение и съм забравила за тази опция. Ще внимавам по-нататък.
Не беше проблем както я беше решила и преди малко – просто по новия начин още малко се опростява кода. А това в много случаи е важно – по-прост код по-лесно се чете, по-лесно се коригират грешки в него, по-лесно се разширява.
Затова непрекъснато настоявам да опростявате кода и да си форматирате добре програмата – така човек си създава навици да пише кратък, ясен и оптимален код.
В текущия вариант, ако искаш да използваш съкратените оператори за цели числа ще стане така:
if((den+7)>posledenden){ den+=7-posledenden; if(mesec==12) { mesec=1; godina++; } else mesec++; } else den+=7;Но и както си го написала е също вярно :-) Много добре стана задачата!
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { int d,m,g; cout<<"Vavedi data,mesec i godina: "; cin>>d>>m>>g; d+=7; if (m>12) { cout<<"Nevalidna data."<<endl; system("PAUSE"); return 0; } if ((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12)) if ((d>31)&&(d<39)){ d-=31; m+=1; } else if(d>31){ cout<<"Tozi mesec ima 31 dni."<<endl; system("PAUSE"); return 0; } if ((m==4)||(m==6)||(m==9)||(m==11)) if ((d>30)&&(d<38)){ d-=30; m+=1; } else if (d>30) { cout<<"Tozi mesec ima 30 dni."<<endl; system("PAUSE"); return 0; } if (m==2) if ((((g%4)==0)&&((g%100)!=0))||((g%400)==0)){ if ((d>29)&&(d<37)) { d-=29; m+=1; } else if (d>29) { cout<<"Tozi mesec ima 29 dni."<<endl; system("PAUSE"); return 0; } } else { if ((d>28)&&(d<36)){ d-=28; m+=1; } else if(d>28) { cout<<"Tozi mesec ima 28 dni."<<endl; system("PAUSE"); return 0; } } if ((m>12)&&(m<14)){ m=1; g+=1; } cout<<"Datata sled edna sedmica shte e: "<<d<<"-"<<m<<"-"<<g<<endl; system("PAUSE"); return 0; }Според мен ако след проверките за различните месеци намериш само кой е последния ден, ще можеш да обединиш пресмятанията, които сега са след всеки if – виж че са твърде подобни. Това ще опрости още повече кода. Другото е че вместо m+=1; може да ползваш m++; А иначе адмирации за интересното решение! Много ми харесаха тези d+=7; и d-=31; :-)
Слагай по някой коментар (на други места слагаш, а тук не си) – това ще улесни и теб след време, а и други да вникнат в логиката ти на мислене. Добавянето на адекватни коментари по кода е полезен навик за всеки, който се занимава с програмиране.
int d,pd,m,g; cout<<"Vavedete data (den mesetz godina):"<<endl; cin>>d>>m>>g; if(d<=0){//Izpolzvame uslovie s koeto proverqvame dali vuvedenata data e validna cout<<"Nevalidna data!"<<endl; system("PAUSE"); return 0;} //Preglejdame mesecite switch(m){ //Namirame posleden den ot vseki mesec po otdelno case 2:if(g%4==0)//Proverka za visokosna godina pd=29; else pd=28;break; case 1: case 3: case 5: case 7: case 8: case 10: case 12:pd=31;break; case 4: case 6: case 9: case 11:pd=30;break; default:cout<<"Nevalidna data!"<<endl; system("PAUSE"); return 0; } if(pd<d){//Izpolzvame uslovie s koeto proverqvame dali vuvedenata data e validna cout<<"Nevalidna data!"<<endl; system("PAUSE"); return 0; } if(pd<d+7){//Proverqavme vuvedeniqt den+7 dali e po-golqm ot posledniq den d=((d+7)-pd); if(m==12){//Proverqvame dali sme i kum kraq na godinata ++g;//Pribavqme kum godinata 1 m=1;//Mesecut prisvoqva 1(Qnuari) } else ++m;//Ako ne sme kum kraq na godinata togava samo mesecut uvelichavame s 1 } else d+=7;//Ako nito edno ot usloviqta ne e izpulneno togava samo dobavqme kum vuvedenite dni 7 cout<<"Datata sled 7 dena e: "<<d<<"/"<<m<<"/"<<g<<endl;//Otpechatvame otgovoraОтносно m==1 не ми е направило впечатление и съм го пропуснал. В това решение всички ваши забележки ги взех под внимание. И ако може изтрийте предишното ми решение. :)