עבור לתוכן

צריך עזרה בכתיבת תוכנית "מכולת" ב ++/C

Featured Replies

פורסם

שלום לכולם

קיבלתי משימה לבנות תוכנית "מכולת" שתקבל מהמשתמש מידע על הפריטים השונים בחנות ותעבד איתם מידע אחרי זה.. מכיוון שהחמצתי את השיעור הזה אשמח לקבל את עזרכתם.

הינה מה שהתוכנית (++C) אמורה לעשות:

המשתמש מכניס שם< של פריט כמות< של אותו פריט מחיר קנייה< של אותו פריט ומחיר מכירה< של אותו פריט.

כל מה שסימנתי ב < צריך להיכנס לתוך "מבנה" Struct שיכיל את הפרטים האלה שהמשתמש יכניס (שם הפריט, כמות, מחיר קנייה, מחיר מכירה.)

ואז לפי הפרטים שהמשתמש מכניס התוכנית צריכה להחזיר את התוצאות הבאות:

- לסדר אותם מהמחיר הגדול לקטן.

- לסדר אותם לפי סדר הא' ב'... לפי השמות שלהם.

- לחשב את המחיר הסופי של כל המוצרים יחד.

הינה קצת קוד לתמיכה\דוגמה:


//Super-Market
#include <iostream.h>
#include <string.h>
#include <iomanip.h>

typedef struct {int Name, Amount, Buyp, Sellp;} data;
char str10[10];
void start( &a)
{cout<<"enter name:";
cin>>??
cout<<"text:";
cin>>a.datr.Name>>a.datr.amount>>a.datr.Buyp>>a.datr.Sellp;

void main()
{ cout<<"enter the how many items you have:";
קריאות לכמה פונקציות...
ואולי עוד כמה..
}

אשמח מאד לעזרתכם !

פורסם

למדת טמפלייטים ומחלקות? אם כן, תשתמש בהם כדי למיין(תנאי המיון).

אם לא, תשתמש בצביעים לפונ.

פורסם
  • מחבר

עדיין לא נגענו במחלקות

תוכל לתת דוגמה למה שאתה מציע בבקשה ?

פורסם

פוינטרים לפונ מאפשרות לך לשמור כתובת לפונ בעלת חתימה מסויימת וערך החזרה.

למשל, אם אתה רוצה למיין, פעם לפי שם ופעם לפי מחיר, אתה יוצר פונ שתשווה בין מה שאתה צריך(אם זה השם אז בין השמות ואם זה בין המחיר אז בין המחירים). אתה שולח לפונ את הSTRUCT שלך והיא כבר משווה ומחזירה לך מה גדול יותר.

מה כבר רשמת?

פורסם
  • מחבר

לצערי, בינתיים כל מה שרשמתי זה הקטע קוד למעלה...

אני אנסה לשפר את זה עד שאני ירדם למוות (1-2 בערך)

תודה על ההכוונה :xyxthumbs:

פורסם

דוגמא חלקית לשימוש עם STL:

#include <iostream>

#include <sstream>

#include <vector>

using namespace std;

typedef struct {

string name;

int amount;

int buyPrice;

int sellPrice;

} entry;

vector<entry> data;

bool OrderByBuyPrice(entry x, entry y)

{

if (x.buyPrice > y.buyPrice)

return false;

else

return true;

}

bool OrderByName(entry x, entry y)

{

if (x.name > y.name)

return false;

else

return true;

}

int main(void)

{

while (1)

{

entry input;

cout << "Enter item name (0 to finish):";

cin >> input.name;

if (input.name == "0")

break;

cout << "Enter amount:";

cout << "Enter buy price:";

cin >> input.buyPrice;

cout << "Enter sell price:";

cin >> input.sellPrice;

data.push_back(input);

}

sort(data.begin(), data.end(), OrderByBuyPrice);

// show it

sort(data.begin(), data.end(), OrderByName);

// show it

int buy_sum = 0, sell_sum = 0;

vector<entry>::iterator it;

for (it = data.begin(); it != data.end(); ++it)

{

buy_sum += (*it).buyPrice;

sell_sum += (*it).sellPrice;

}

return 0;

}

פורסם

אם לא נתנו לך הגדרה של מקסימום של פריטים תצתרך להשתמש בStandard Template Library או לעשות אימפלמטציה של מערכים דינמיים בעצמך (להשתמש ברשימות מקושרות גם אופציה אבל יקח נצח לגשת אליהם ולמיין אותן).

בכל מקרה התוכנית שהציאו פה היא לא רעה חוץ מזה :



if if (input.name == "0")

יכול להיות שזה חוקי אם מוגדר operator== עם פרמטר char * שעושה strcmp ומחזיר 1 אם התוצעה 0 .

בשביל הסדר אפשר התחלה תמיד להכניס את המידע מסודר לפי השם או מה שאתה רוצה(אפשר לעשות את זה בthread נפרד אבל זה כבר לקורס יותר מתקדם ) . אחר כך אפשר לעשות מיון מחדש או שאפשר לעשות את זה בכמה מערכים שאחד שומר את הערכים והאחרים שומרים את הסדר בעזרת מצביעים . את הסיכום אפשר לעשות בזמן שמכניסים את המידע כי זה גם יחסוך איטרציות.

פורסם

אכן יש לו, אבל גם מספיק שיהיה constructor גם ל string שמקבל char *.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים