помощ със задача на С++

Проблеми, съвети, ъпгрейд
Аватар
човек
Мнения: 3305
Регистриран на: 14 Юни 2009 09:25

помощ със задача на С++

Мнение от човек »

Изпаднах в затруднено положение. Не знам до колко е подходящо да питам тук, но съм отчаян. :lol: Имам годишен проект и трябва да го завърша до понеделник.
Ето я и задачата.

Код за потвърждение: Избери целия код

Търговец държи точна сметка на това с колко банкноти разполага във всеки един момент. Банкнотите са с номинали 50,20,10,5,2 и 1 лв. Вашата задача е да помогнета на продавачите, като покажете за произволна съма по колко банкноти от всеки номинал са необходими. Освен това, ако дадена сума може да се представи нееднозначо, то трябва да се използват по възможност банкноти с по-висок номинал.

Та, до колкото виждам, трябва да се напише програма, която да изкарва за даден продукт колко банкноти са необходими и тези банкноти да са с възможно най-висок номинал.
И ако не ви се занимава да пишете задачата, поне ми помогнете с логическата част, ако имате необходимите знания. Ще бъда безкрайно благодарен за всякаква помощ. :D

:IMNOOB:
Аватар
Reaver
Мнения: 359
Регистриран на: 23 Фев 2007 13:58
Местоположение: Tillilean Forest

Re: помощ със задача на С++

Мнение от Reaver »

Светльо, задачата всъщност е много проста - когато имаш зададена сума правиш следното - делиш я целочислено на стойността на най-високата банкнота и запаметяваш някъде полученото, след това телиш на следващата най-висока висока по стойност банкнота и делиш остатъка от целочисленото деление и така докато не остане остатък нула. Когато това стане изкарваш целите числа, които си получиш при делението на стойността на различните банкноти.

Пример:

Сумата, която трябва да върнеш е 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?
Аватар
човек
Мнения: 3305
Регистриран на: 14 Юни 2009 09:25

Re: помощ със задача на С++

Мнение от човек »

Много съм ти благодарен, наистина много ми помагаш. :)
Сега ще видя как ще се справям със синтаксиса, но това е резултата от цяла година мързелуване. :D
Отново ти благодаря.
Аватар
indigo
Мнения: 1869
Регистриран на: 13 Юни 2008 18:10
В момента играе: RL - worst game ever.

Re: помощ със задача на С++

Мнение от indigo »

Ако още не си готов, значи си бая закъсал. Поствам долу един вариант, 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;
}




Не съм слагал проверка дали инпута е число, надявам се учителя ти да не е такъв гъз, че да напише вместо сума името си :D
What's a real girl? Is it something fap-able?
indeedhewasshady.
Аватар
човек
Мнения: 3305
Регистриран на: 14 Юни 2009 09:25

Re: помощ със задача на С++

Мнение от човек »

Ами помогнаха ми малко :oops: и сега имам още две решения (+ твоето 3 :D ) но спокойно мога да кажа, че твоето е най-изпипаното. 8)
Много ти благодаря шади, видело се е, че ще те черпавам некой път. :P :D :D :D
Ще дам и другите две решения.

Код за потвърждение: Избери целия код

#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;
}



:D
Аватар
човек
Мнения: 3305
Регистриран на: 14 Юни 2009 09:25

Re: помощ със задача на С++

Мнение от човек »

Сега ако само мога да помоля някой на бърза ръка да погледне каква е грешката тук, ще спра да искам разни работи. :oops:


това е условието

Код за потвърждение: Избери целия код

Точка от равнината с реални координати (х,у) можем да представим като двуелементен масив с тип 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
Мнения: 359
Регистриран на: 23 Фев 2007 13:58
Местоположение: Tillilean Forest

Re: помощ със задача на С++

Мнение от Reaver »

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?
Аватар
Морт
Мнения: 1542
Регистриран на: 01 Фев 2003 11:45
Местоположение: London, UK
Обратна връзка:

Re: помощ със задача на С++

Мнение от Морт »

Лош вкус е да смесваш С++ и С.
printf си е за С, <iostream> ти дава cout, cin.
<math.h> (както и всичко .h) е за С, В С++ имаш <cmath>
<stdlib.h> -> <cstdlib>

Имена на променливи като a, b,c, ab, bc и т.н. са безумие.
Името на променливата трябва кратко и ясно да подсеща какво върши тя.

Това не са неща, които съществено ще повлиаят на решението на задачата ти, но са неща, които е хубаво да се спазват при писането на код.
Chris написа:
Vermic написа:Тъъъъъ тъъъъ дъъъъ дъъъъъъъъъъъ дъ дъ да да да па па да па па да дъъъъъ дааааааааааааааа!
Музиката от Star Wars ли е това или бъркам? Щото тя е Търъдъдъъън дъъън дъръдъдъъън а твойта версия някво различно ми звучи :?
Публикувай отговор