Автор Тема: Задача по с++  (Прочетена 3576 пъти)

tyuio

  • Гост
Задача по с++
« -: Apr 28, 2010, 23:20 »
Така, задачата е следната:
Имам структира от данни в която има разни неща но най вече цени и общ брой наличност. Трябва да се направи след въвеждане на данните следното:
Да се умножи за всяко лекарство броя и цената за да се знае общата стойност, за дадено лекарство.
Сбора на цените на всички лекарства взети заедно за да се знае общата стойност на лекарствата в наличност.
Да се извади ДДС за общия брои като се покаже цената  и колко е сумата на самия данък за всички лекарства.
Същото за данъка за всяко едно лекарство по отделно.
Четири неща се искат още в задачата и аз на това ударих на камък и нищо не ми идва на ум.
Активен

astronom

  • Напреднали
  • *****
  • Публикации: 254
    • Профил
Re: Задача по с++
« Отговор #1 -: Apr 29, 2010, 00:10 »
Изтрито, съгласно т. 4 от Правилата на форума
bop_bop_mara
« Последна редакция: Apr 29, 2010, 13:53 от bop_bop_mara »
Активен

Г. Д. Сотиров

b2l

  • Напреднали
  • *****
  • Публикации: 4786
  • Distribution: MCC Interim
  • Window Manager: - // - // -
  • ...sometimes I feel like screaming... || RTFM!
    • Профил
    • WWW
Re: Задача по с++
« Отговор #2 -: Apr 29, 2010, 00:11 »
//offtopic
...

...изтрито...
Мисля че tyuio от давна е излязъл от университета :)

Редактирано, съгласно т. 6 и 4 от Правилата на форума
bop_bop_mara
« Последна редакция: Apr 29, 2010, 13:53 от bop_bop_mara »
Активен

"Човекът е въже, опънато между звяра и свръхчовека, въже над пропаст. Човекът е нещо, което трябва да бъде превъзмогнато." - Фр. Ницше

ntrance

  • Напреднали
  • *****
  • Публикации: 696
    • Профил
Re: Задача по с++
« Отговор #3 -: Apr 29, 2010, 01:52 »
Изтрито, съгласно т. 4 от Правилата на форума
bop_bop_mara
« Последна редакция: Apr 29, 2010, 13:54 от bop_bop_mara »
Активен

tyuio

  • Гост
Re: Задача по с++
« Отговор #4 -: Apr 29, 2010, 02:08 »
Проблема не е в самото извличане на информацията а в визуализацията му понеже приложениято е конзолно и не мога да се сетя как да го направя удобно за достъп и визуализация.
Активен

Punkoff

  • Напреднали
  • *****
  • Публикации: 12
    • Профил
Re: Задача по с++
« Отговор #5 -: Apr 29, 2010, 09:25 »
Пост-ни, ако може, как си конструирал  структората.
Активен

tyuio

  • Гост
Re: Задача по с++
« Отговор #6 -: Apr 29, 2010, 10:40 »
Код
GeSHi (C++):
  1. struct aptekaArtikul
  2. {
  3.  
  4.        char imeArtikul[30];
  5.        char imeProizvoditel[30];
  6.  
  7.        int dataProizvodstvo;
  8.        int dataGodnost;
  9.        int broiArtikul;
  10.        int codArtikul;
  11.  
  12.        float cenaArtikul;
  13. };
Активен

Acho

  • Напреднали
  • *****
  • Публикации: 5293
  • Distribution: Slackware, MikroTik - сървърно
  • Window Manager: console only
    • Профил
    • WWW
Re: Задача по с++
« Отговор #7 -: Apr 29, 2010, 11:10 »
Tyuio, не съм програмист, там другите ще кажат. Но понеже попита и за визуализирането, ако може изхода от програмата да е нещо html или подобно, може с текстовите браузери lynx или links да се гледа. Особено с lynx и цветни текстове се вижда много добре. Това ми идва на ума сега.
Активен

CPU - Intel Quad-Core Q8400, 2.66 GHz; Fan - Intel Box; MB - Intel G41M-T2; RAM - DDR2-800, Kingston HyperX, 2X2048 MB; VC - onboard, Intel G41 Express Chipset; HDD - Toshiba, 500 GB, SATAII; SB - Realtek HD Audio; DVD-RW - TSSTcorp DVD-RW; LAN - Realtek PCI-E GBE Controller; PSU - Fortron 350 Watt.

Punkoff

  • Напреднали
  • *****
  • Публикации: 12
    • Профил
Re: Задача по с++
« Отговор #8 -: Apr 29, 2010, 11:11 »
След малко ще я пробеам
/off-topic
A между другото видях из някоя от ремите,че си писал нещо за ПУ. Там ли учиш -редовно задочно?Курс?
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Задача по с++
« Отговор #9 -: Apr 29, 2010, 11:31 »
И тези структури ги пазиш в масив или имаш някаква динамична структура (свързан списък примерно), където освен next/prev имаш и указател към тази структура?

И в двата случая, обхождането и сметките не са голяма драма. Между другото датата как я въвеждаш, в какъв вид?

С тези int стойности можеш да си вкараш автогол, защото не са unsigned и както вадиш (примерно наличността намалява с няква бройка), в един хубав момент могат да придобият отрицателна стойност ако не внимаваш.

Другото е че името на артикула и производителя са масиви от 30 char стойности. Ако по някаква причина ги overflow-неш става забавно:

- overflow-ваш името на лекарството: мажеш по името на производителя
- overflow-ваш името на производителя: разказваш играта на следващите int стойности (дати на производство и годност, брой артикули и т.н.).

Лошото е че ако не препълниш прекалено много тези низове, програмата няма да крашне, но ще ти помаже данните и ще ядеш много ядове. Затва, по-добре вместо char blabla[30], сложи указател към името (char *blabla) и някъде си заделяй динамично памет за низовете. Така ако препълниш низа, в най-лошият случай ще думнеш някой друг malloc-нат регион от heap-а,  ще помажеш някое име на производител/лекарство (но не и годности и цени) и хубавото е че твърде вероятно при нов malloc() или free(), програмата ще гръмне и ще разбереш че има такъв проблем навреме.

М за жалост и тва не е добро решение и поради тази причина все пак най-добре проверявай колко байта въвеждаш.

А иначе при C++ тия неща май стават по-безопасно, нали имат някакъв string тип и доколкото знам операциите по присвояване при него правят bounds checking сами и спестяват такива драми.
Активен

"Knowledge is power" - France is Bacon

Punkoff

  • Напреднали
  • *****
  • Публикации: 12
    • Профил
Re: Задача по с++
« Отговор #10 -: Apr 29, 2010, 11:33 »
Код
GeSHi (C++):
  1. void zad(aptekaArticul a[],int n)
  2. {
  3. int i;
  4. double sum=0;
  5. for(i=0,i<n.i++)
  6. {
  7. cout<<"Obshtata shtoinost za "<<i<<"-iq artikul e :"
  8.     <<a[i].broiartikul*a[i].cenaartikul
  9.     <<"S DDS :"<<(double)(a[i].cenaartikul-(a[i].cenaartikul/1.2))<<endl;
  10.  sum+=(a[i].broiartikul*a[i].cenaartikul);
  11. }
  12. cout<<"Obshtata stoinost e : <<sum<<" s DDS : <<sum-(sum/1.2)<<endl;
  13. return;
  14. }

Не съм я тествал ама долу-горе така трябва да изглежда ако съм разбрал правилно условието. Най вероятно има маки грешки  ама то компилатора ще ти каже какви.Дано да съм бил от помощ. :)
Активен

tyuio

  • Гост
Re: Задача по с++
« Отговор #11 -: Apr 29, 2010, 11:35 »
Еми да, там уча. На стари години реших да го завърша и това :) Първи курс задочно съм информатика. Задачата не е за мен пряко, но се упражнявам и аз просто има за цел да я направя по функционална и да ми е удобна за работа без непременно да има практическа насоченост. Нямам никакво понятие от менюта в конзола как се правят и искам да е нещо удобно като нещата които ползвам под конзола в Линукс.
Задачата не е от български университет и има бая под условия, повечето от които съм ги решил. Ето някой от тях ако ви е любопитно:
Да се покаже за дадено лекарство колко му остава до края на срока за годност.
Да се окаже дали в  момента има лекарства с изтекъл срок.
Да се сортират по производител.
Да се покаже дали има едно лекарство с повече от един производител и да се сравнят цените им.

Има още няколко но са си просто сортиране.
Активен

tyuio

  • Гост
Re: Задача по с++
« Отговор #12 -: Apr 29, 2010, 11:42 »
Автогол не автогол условието е изрично да е цяло число от вида по двойки: дата месец година- за 24-05-2009 е 240509.
Няма лекарства произведени преди 2000 година.

Общо взето ме интересува нещо за четене как се правят удобни менюта в конзола.
Аз най често правя do{}while  с букви за избор като да речем (q) е изход
« Последна редакция: Apr 29, 2010, 11:44 от tyuio »
Активен

tyuio

  • Гост
Re: Задача по с++
« Отговор #13 -: Apr 29, 2010, 11:46 »
да за имената не е изрично оказано какви да са може и да са указатели прав си.
Активен

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Задача по с++
« Отговор #14 -: Apr 29, 2010, 11:52 »
Ми то пак си е цяло число, само дето като е unsigned, не може да става отрицателно. Като плюс получаваш два пъти по-голяма максимална стойност, в случай че случайно решат да пазят в наличност повече от 2 милиарда артикула, ха-ха.

Очевидно не те карат да правиш сметки с датите, та затова те карат да ги пазиш по такъв начин, ама по този начин направо могат да ти видят сметката. Най-простото е да те накарат да сметнеш колко дни е срока на годност: на пръв поглед е лесно, на втори поглед не е въобще проста аритметика и за капак има високосни години и си ****** майката :)

Що се отнася до менюто в конзолата, може да ползваш getchar(). Ако е под линукс е малко кофти, защото терминала има навика да буферира редове и като натиснеш буквата, няма да я приеме преди да натиснеш ENTER. Та там се правят малко магии - сетваш си терминала в raw режим и можеш да четеш с getchar() или ако искаш директно с read() от нулевия FD.
Активен

"Knowledge is power" - France is Bacon