Автор |
Съобщение |
човек
|
|
Регистриран на:
14 Юни 2009 09:25
Мнения: 3305
|
|
Заглавие: помощ със задача на С++ Публикувано на: 20 Юни 2009 10:25
Изпаднах в затруднено положение. Не знам до колко е подходящо да питам тук, но съм отчаян. Имам годишен проект и трябва да го завърша до понеделник. Ето я и задачата. Код: Търговец държи точна сметка на това с колко банкноти разполага във всеки един момент. Банкнотите са с номинали 50,20,10,5,2 и 1 лв. Вашата задача е да помогнета на продавачите, като покажете за произволна съма по колко банкноти от всеки номинал са необходими. Освен това, ако дадена сума може да се представи нееднозначо, то трябва да се използват по възможност банкноти с по-висок номинал. Та, до колкото виждам, трябва да се напише програма, която да изкарва за даден продукт колко банкноти са необходими и тези банкноти да са с възможно най-висок номинал. И ако не ви се занимава да пишете задачата, поне ми помогнете с логическата част, ако имате необходимите знания. Ще бъда безкрайно благодарен за всякаква помощ.
|
|
|
|
|
Reaver
|
|
Регистриран на:
23 Фев 2007 13:58
Мнения: 359 Местоположение: Tillilean Forest
|
|
Заглавие: Re: помощ със задача на С++ Публикувано на: 20 Юни 2009 11:29
Светльо, задачата всъщност е много проста - когато имаш зададена сума правиш следното - делиш я целочислено на стойността на най-високата банкнота и запаметяваш някъде полученото, след това телиш на следващата най-висока висока по стойност банкнота и делиш остатъка от целочисленото деление и така докато не остане остатък нула. Когато това стане изкарваш целите числа, които си получиш при делението на стойността на различните банкноти.
Пример:
Сумата, която трябва да върнеш е 394 лева. Делим целочислено на 50 - 394/50 = 7 и остатък 44 Делим целочислено на 20 - 44/20 = 2 и остатък 4 Делим целочислено на 10 - 4/10 = 0 и остатък 4 Делим целочислено на 5 - 4/5 = 0 и остатък 4 Делим целочислено на 2 - 4/2 = 2 и остатък 0
Сумата от 394 лева се представя като 7 банкноти по 50 лева, 2 банкноти по 20 лева и 2 банкноти по 2 лева.
Няма да ти напиша самата програма, тъй като мисля, че е хубаво и ти да свършиш малко работа. Дано да съм ти помогнал. Успех!
___________________________________ A slight call afar is tempting me Like a whisper sweet or an awful scream I cannot ignore what I've always been I am leaving again - one last time?
|
|
|
|
|
човек
|
|
Регистриран на:
14 Юни 2009 09:25
Мнения: 3305
|
|
Заглавие: Re: помощ със задача на С++ Публикувано на: 21 Юни 2009 14:13
Много съм ти благодарен, наистина много ми помагаш. Сега ще видя как ще се справям със синтаксиса, но това е резултата от цяла година мързелуване. Отново ти благодаря.
|
|
|
|
|
indigo
|
|
Регистриран на:
13 Юни 2008 18:10
Мнения: 1869
В момента играе: RL - worst game ever.
|
|
Заглавие: Re: помощ със задача на С++ Публикувано на: 21 Юни 2009 17:30
Ако още не си готов, значи си бая закъсал. Поствам долу един вариант, 10-12 минути работа е. Учи си кода, ей! Код: #include <cstdlib> #include <iostream>
using namespace std;
int main() { cout << "Programa za presmiatane na broia banknoti za predstaviane na dadena suma v 0.1. " << endl << endl; int dummy = 1; int a, b; while(dummy==1) { cout << "Vuvedete sumata ili vuvedete 0 (nula) za krai: "; cin >> a; cout << endl; if(a<0) {cout << "Greshen input - sumata ne moje da e otricatelna! " << endl;} if(a==0) {dummy=0;} if(a>0) { cout << endl; b=a/50; cout << "Sumata ot " << a << " leva se predstavia " << b << " banknoti po 50 leva, "; a=a%50; b=a/20; cout << b << " banknoti po 20 leva, " ; a=a%20; b=a/10; cout << b << " banknoti po 10 leva, " ; a=a%10; b=a/5; cout << b << " banknoti po 5 leva, " ; a=a%5; b=a/2; cout << b << " banknoti po 2 leva i " ; a=a%2; b=a/1; cout << b << " banknoti po 1 lev." << endl << endl; } }
return EXIT_SUCCESS; }
Не съм слагал проверка дали инпута е число, надявам се учителя ти да не е такъв гъз, че да напише вместо сума името си
___________________________________ What's a real girl? Is it something fap-able? indeedhewasshady.
|
|
|
|
|
човек
|
|
Регистриран на:
14 Юни 2009 09:25
Мнения: 3305
|
|
Заглавие: Re: помощ със задача на С++ Публикувано на: 22 Юни 2009 08:27
Ами помогнаха ми малко и сега имам още две решения (+ твоето 3 ) но спокойно мога да кажа, че твоето е най-изпипаното. Много ти благодаря шади, видело се е, че ще те черпавам некой път. Ще дам и другите две решения. Код: #include<iostream> using namespace std;
int bn[6]={50,20,10,5,2,1}; int sbn[6]; int sum; int i; int main(){ cout<<"summa za izchislenie="; cin>>sum; for(i=0;i<6;i++){ sbn[i]=sum/bn[i]; sum=sum%bn[i]; cout<<bn[i]<<"=>"<<sbn[i]<<endl; и Код: #include <iostream> #include <stdlib.h>
using namespace std;
int main(int argc, char *argv[])
{ int sum,pet,dva,des,pe,dve,edno; cout<<"vuvedete sumata: "; cin>>sum; pet=sum/50; if(pet==0) pet=0; sum=sum%50; dva=sum/20; if(dva==0) dva=0; sum=sum%20; des=sum/10; if(des==0) des=0; sum=sum%10; pe=sum/5; if(pe==0) pe=0; sum=sum%5; dve=sum/2; if(dve==0) dve=0; sum=sum%2; edno=sum/1; if (edno==1) { cout<<"sumata se razdelq na: " <<pet<< " po 50 " <<dva<< " po dvaiset " <<des<< " po deset " <<pe<< " po pet " <<dve<< " po dve " <<edno<< " po edno "<<"\n"; } else { cout<<"sumata se razdelq na: " <<pet<< " po 50 " <<dva<< " po dvaiset " <<des<< " po deset " <<pe<< " po pet " <<dve<< " po dve "<<"\n"; } system("PAUSE"); return 0; }
|
|
|
|
|
човек
|
|
Регистриран на:
14 Юни 2009 09:25
Мнения: 3305
|
|
Заглавие: Re: помощ със задача на С++ Публикувано на: 23 Юни 2009 12:09
Сега ако само мога да помоля някой на бърза ръка да погледне каква е грешката тук, ще спра да искам разни работи. това е условието Код: Точка от равнината с реални координати (х,у) можем да представим като двуелементен масив с тип double.Да се напише програма,която чете координатите на четири точки,представляващи върховете А,Б,С и Д на четириъгълник в цикличен ред(по часовниковата стрелка или обратно) и определя дали А,Б,С,Д е квадрат,правоъгълник или друга фигура. това е задачата Код: #include <iostream> #include <stdlib.h> #include <math.h>
using namespace std; int main(int argc, char *argv[]) { double a[2],b[2],c[2],d[2]; double ab, bc, cd, da, bd;
// char out[]=”зададените координати са на друга фигура”; char out[10];
printf ("Въведете координатите на точка А"); scanf("%lf %lf", &a[0],&a[1]); printf ("Въведете координатите на точка B"); scanf("%lf %lf", &b[0],&b[1]); printf ("Въведете координатите на точка C"); scanf("%lf %lf", &c[0],&c[1]); printf ("Въведете координатите на точка D"); scanf("%lf %lf", &d[0],&d[1]); ab = sqrt(pow(b[0]-a[0]),2)+pow (b[1]-a[1]),2)); (<= тук дава грешката о.О) bc = sqrt(pow(c[0]-b[0]),2)+pow (c[1]-b[1]),2)); cd = sqrt(pow(d[0]-c[0]),2)+pow (c[1]-d[1]),2)); da = sqrt(pow(d[0]-a[0]),2)+pow (a[1]-d[1]),2)); bd = sqrt(pow(b[0]-d[0]),2)+pow (b[1]-d[1]),2));
if (ab == cd) && (bc == da) && (bd == sqrt (ab**2 + bc**2)) then
if cd == bc then
out = “зададените координати са на квадрат”;
else out = “зададените координати са на правоъгълник”;
printf(%s, out); } system("PAUSE"); return 0; }
|
|
|
|
|
Reaver
|
|
Регистриран на:
23 Фев 2007 13:58
Мнения: 359 Местоположение: Tillilean Forest
|
|
Заглавие: Re: помощ със задача на С++ Публикувано на: 23 Юни 2009 15:18
pow(b[0]-a[0]),2) - затваряш pow-а след a[0], което води до това, че го чете като функция с един аргумент, а не с два. Махни излишната скоба. Също така си забравил да отвориш скоба на if (ab == cd) && (bc == da) && (bd == sqrt (ab**2 + bc**2)), която затваряш. Също така имаш THEN, не затваряш и не отваряш скоби като хората, използваш scanf и printf вместо в пъти по-удобните потоци, масива ти на текста е 10 символа, а текстовете, които се опитваш да вкараш в него са над 30 символа... a всъщност ти по този начин въобще не можеш да присвоиш стойност на стринг... Код: #include <iostream> #include <stdlib.h> #include <math.h> #include <string.h> using namespace std;
int main(int argc, char *argv[]) { double a[2],b[2],c[2],d[2]; double ab, bc, cd, da, bd; // char out[]=”зададените координати са на друга фигура”; char out[50]; cout<<"Въведете координатите на точка А"; cin>>a[0]>>a[1]; cout<<"Въведете координатите на точка B"; cin>>b[0]>>b[1]; cout<<"Въведете координатите на точка C"; cin>>c[0]>>c[1]; cout<<"Въведете координатите на точка D"; cin>>d[0]>>d[1]; ab = sqrt(pow(b[0]-a[0],2)+pow (b[1]-a[1],2)); bc = sqrt(pow(c[0]-b[0],2)+pow (c[1]-b[1],2)); cd = sqrt(pow(d[0]-c[0],2)+pow (c[1]-d[1],2)); da = sqrt(pow(d[0]-a[0],2)+pow (a[1]-d[1],2)); bd = sqrt(pow(b[0]-d[0],2)+pow (b[1]-d[1],2)); if((ab==cd)&&(bc==da)&&(bd==sqrt(pow(ab, 2) + pow(bc, 2)))) { if (cd==bc) { strcpy(out, "зададените координати са на квадрат"); } else { strcpy(out, "зададените координати са на правоъгълник"); } } cout<<out; system("PAUSE"); return 0; }
___________________________________ A slight call afar is tempting me Like a whisper sweet or an awful scream I cannot ignore what I've always been I am leaving again - one last time?
|
|
|
|
|
Морт
|
|
Регистриран на:
01 Фев 2003 11:45
Мнения: 1542 Местоположение: London, UK
|
|
Заглавие: Re: помощ със задача на С++ Публикувано на: 23 Юни 2009 15:42
Лош вкус е да смесваш С++ и С. printf си е за С, <iostream> ти дава cout, cin. <math.h> (както и всичко .h) е за С, В С++ имаш <cmath> <stdlib.h> -> <cstdlib>
Имена на променливи като a, b,c, ab, bc и т.н. са безумие. Името на променливата трябва кратко и ясно да подсеща какво върши тя.
Това не са неща, които съществено ще повлиаят на решението на задачата ти, но са неща, които е хубаво да се спазват при писането на код.
___________________________________
Chris написа: Vermic написа: Тъъъъъ тъъъъ дъъъъ дъъъъъъъъъъъ дъ дъ да да да па па да па па да дъъъъъ дааааааааааааааа! Музиката от Star Wars ли е това или бъркам? Щото тя е Търъдъдъъън дъъън дъръдъдъъън а твойта версия някво различно ми звучи
|
|
|
|
|
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения
|
|