לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 06-12-2006, 02:17
צלמית המשתמש של ם_O
  משתמש זכר ם_O ם_O אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 465
אני אכתוב בC ברשותך [אין לי כוח כרגע לפסקל, לא נגעתי בזה שנתיים וחצי, מאז הבגרות :)]
בתגובה להודעה מספר 1 שנכתבה על ידי Err0R שמתחילה ב "עזרה בפסקל"

כתבתי לך פתרון כללי, שאינו דורש תנאים רבים, עבור N שטרות, שלכל אחד מהם בהתאמה הערך
a_1, a_2, ... , a_n, טבעיים.
בשביל להמנע מתנאים רבים, הגדר מערך עזר דו מימדי
קוד:
int arr[N][2]={{...},...,{...}};

כאשר arr[k][0] יאכסן כמה שטרות מסוג k יש,
ו arr[k][1] יאכסן מה ערך השטר מסוג k.

עכשיו, גם אין לך בכלל תנאים, וגם יש לך פתרון כללי
תעשה כך:
קוד PHP:
 #include <stdio.h>
#include <math.h>
#define N 3

int arr[N][2] = {{1,20} , {8,50} , {1,100} };

int Set(int Amount){
    
int howmany;
    for (
int i=N-1i>=0i--){
        
howmany=arr[i][0];
        
arr[i][0] = (howmany Amount/arr[i][1] + fabs((float)howmany-Amount/arr[i][1]))/2;
        
Amount Amount - (howmany-arr[i][0])*arr[i][1];
        }
    return 
Amount;
}
             

int main(int argcchar *argv[])
{
        
int i;
        for (
i=0i<Ni++)
            
printf("%d - %d\n"arr[i][1], arr[i][0]);
        
printf("\nAFTER...\n\n");
        
int HowMuchLeft Set(420);
        for (
i=0i<Ni++)
            
printf("%d - %d\n"arr[i][1], arr[i][0]);
        
printf("\nAmount left that cannot be payed with those kinds of coins: %d"HowMuchLeft);       
}



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

אבל, סביר להניח שאתה לא יכול להגיש ככה, כי אתה לא רוצה מקרה כללי, ולא רוצה להגדיר שום מערך עזר, כי הרי - זה שיעורי הבית שלך...
לכן, פשוט, במקום הפונקציה Set למקרה הכללי שכתבתי, החלף אותה בזה:
קוד PHP:
 int Set(int Amount){
    
int howmany,shtar;
    for (
int i=N-1i>=0i--){
        
howmany=arr[i];
        if (
i==0)
           
shtar 20;
        else if (
i==1)
             
shtar 50;
        else
            
shtar 100;
        
arr[i] = (howmany Amount/shtar fabs((float)howmany-Amount/shtar))/2;
        
Amount Amount - (howmany-arr[i])*shtar;
        }
    return 
Amount;


_____________________________________
Any sufficiently advanced bug is indistinguishable from a feature

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 06-12-2006, 14:40
צלמית המשתמש של ם_O
  משתמש זכר ם_O ם_O אינו מחובר  
 
חבר מתאריך: 15.08.06
הודעות: 465
אתה לא מפספס משהו..
בתגובה להודעה מספר 5 שנכתבה על ידי Fate שמתחילה ב "יכול להיות שאני לא מבין משהו..."

אבל, אני סבור שצריך את מס' השטרות הקטן ביותר, שנותן הסכום הקרוב ביותר למס' המבוקש, והשאר זה "עודף". הרי ייתכנו גם אינסוף מקרים אחרים, נניח 21, שבהם בכלל אי אפשר לתת את כל הסכום עם השטרות הקיימים...
או במילים אחרות - יש 2 תנאים....הראשון - לתת את הסכום המבוקש
השני - עם מס' שטרות מינימלי.
למה החלטת שתנאי1 חשוב יותר מתנאי2 (כלומר אתה מוותר על מינימליות מס' השטרות בשביל קירוב גדול יותר) כאשר יש באופן טבעי מקרים שבהם אי אפשר לתת את הסכום המבוקש בכל מקרה [נניח 21, מה עוד, שלא נתון שום דבר לגבי זה]? [את זה התכנית שלי עושה..]

בשביל לעשות כמו שאתה רוצה, אז פשוט במידה ויש שארית בסוף התכנית, בודקים אם המס' מתחלק ב20 אבל לא ב50, אם כן - וגם יש מספיק שטרות 20 משנים את התוצאה
כנ"ל לגבי100 ו50 (מספ' אי זוגי של 50ים כמובן) ואז על השארית את מה שכתבתי מקודם על ה20ים [ועבור תכנית כללית, בודקים אם המס' מתחלק בכל שטר ולא בכל שטר אחר שאינו כפולה שלו]
_____________________________________
Any sufficiently advanced bug is indistinguishable from a feature


נערך לאחרונה ע"י ם_O בתאריך 06-12-2006 בשעה 14:52.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 14:07

הדף נוצר ב 0.09 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר