עבור לתוכן

שאלה בשפת C -קבצים

Featured Replies

פורסם

אהלן ,צריך קצת את עזרתכם,קצת הסתבכתי.

נתון לי קובץ שבו יש שמות מוצרים וליד כל מוצר יש מחיר מסויים של המוצר

דוגמא:

a220

ac450

we420

aa450

vv025

ודרוש ליצור שני קבצים אחד של מחירים יחודיים שלא חוזרים על עצמם והשני מחירים החוזרים על עצמם.

הקבצים מסודרים בסדר עולה ממחיר נמוך לגבוה.

תודה לכל מי שעוזר.

פורסם

איפה הסתבכת? ספר מה ניסית לעשות וננסה לראות איפה הבעיה.

פורסם
  • מחבר

*שים לב שערכתי את ההודעה.

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

פעם אחת אני סורק את המחיר המינימלי

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

ולאחר מכן מוחק את כל המוצרים בעלי המחיר הזה מהקובץ הראשי...

פורסם

שים לב שהם ממויינים לך. לכן, אם יש 2 זהים, אז הם יהיו אחד אחרי השני.

פורסם
  • מחבר

הקובץ הראשי לא ממויין זה כל הקטע...

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

רק שאלה קטנה אם אפשר לעזור,איך אני נמנע מלפתוח קובץ שכבר פתוח או לסגור קובץ שכבר סגור? כי הבנתי שזה נותן שגיאת ריצה ...

פורסם

האלגוריתם לפתרון הוא:

1. פתח את הקובץ.

2. קרא את כל השורות של הקובץ לתוך מערך (זה יכול להיות מערך של מחרוזות, או של struct שמייצג מוצר ע"י השם והמחיר שלו).

3. סגור את הקובץ.

4. מיין את המערך לפי המחירים (או באמצעות פונקציית qsort הקיימת בחבילה הסטנדרטית של C, או באמצעות פונקציית מיון משלך).

5. העתק את המערך לשני מערכים - אחד יכיל את כל המוצרים שמחירם ייחודי, ואחד שיכיל את כל המוצרים שהמחיר חוזר על עצמו. כיוון שהמערך המקורי ממויין לפי המחירים, זה יהיה אלגוריתם די פשוט.

6. כתוב כל אחד מהמערכים החדשים לתוך קובץ נפרד.

רק שאלה קטנה אם אפשר לעזור,איך אני נמנע מלפתוח קובץ שכבר פתוח או לסגור קובץ שכבר סגור? כי הבנתי שזה נותן שגיאת ריצה ...

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

פורסם
  • מחבר

אוקיי תודה רבה!

ארכיון

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

דיונים חדשים