ABA


"אתגרון תיכנותי קטן."
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #7117 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 7117
dryice

   12:00   08.10.03   
אל הפורום  
  אתגרון תיכנותי קטן.  
 
   ערכתי לאחרונה בתאריך 10.10.03 בשעה 14:08 בברכה, dryice
 
בעקבות אשכול שראיתי פה עלה לי רעיון:

כתוב פונקציה שכאשר נותנים לה מספר חיובי שלם היא מחזירה
את המספר כאשר סדר ספרותיו הפוך. למשל 543 יהפוך ל 345.

בC החתימה תהיה כזאת:

int invert(int num);

בפסקל החתימה תהיה:
fnction invert(num: integer) : integer;

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

DRYICE


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  רמאי no_angel 08.10.03 14:21 1
     למה נתכוון המשורר? dryice 08.10.03 14:57 2
  נשמע קל, מותר C++? TheBinary 08.10.03 16:42 3
     אפשר sizeof? TheBinary 08.10.03 16:54 4
         אפשר, לא יעזור לך בגרוש. dryice 08.10.03 17:26 5
             תראה, זה כן עוזר: TheBinary 08.10.03 20:47 9
  רמז: צריך לקרוא את השאלה בזהירות. dryice 08.10.03 17:29 6
     רמז קטן לכולם במידה ומותר no_angel 08.10.03 17:45 7
         כבר כתבתי רקורסיה בראש האשכול dryice 08.10.03 19:41 8
  מאוד פשוט szargel 08.10.03 20:47 10
     סרגל יש לך טעות Vidi 08.10.03 21:36 11
         פתרון אחר szargel 08.10.03 22:27 12
             זאת פונקציה חד פעמית, מה שכתבת. dryice 09.10.03 11:33 14
                 הממ, זה בגלל החתימה שדרשת szargel 09.10.03 20:40 17
                     ועל כן נתתי כותרת ''אתגר'' dryice 09.10.03 22:20 18
  היה קשה madboy2k 09.10.03 01:19 13
     גם אצלך כתבת פונקציה חד פעמית. dryice 09.10.03 11:35 15
  רמז עבה יותר: dryice 09.10.03 15:28 16
  פתרון: dryice 10.10.03 14:05 19
     המממ, אפשר ''תרגום'' למימוש בפסקל szargel 10.10.03 15:18 20
         בבקשה liranr 10.10.03 15:52 21
             עזוב... szargel 10.10.03 16:08 22
     אמאלה madboy2k 10.10.03 18:08 23

       
no_angel
חבר מתאריך 20.3.02
4989 הודעות
   14:21   08.10.03   
אל הפורום  
  1. רמאי  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   14:57   08.10.03   
אל הפורום  
  2. למה נתכוון המשורר?  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   16:42   08.10.03   
אל הפורום  
  3. נשמע קל, מותר C++?  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 08.10.03 בשעה 16:44 בברכה, TheBinary
 
מותר C++?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   16:54   08.10.03   
אל הפורום  
  4. אפשר sizeof?  
בתגובה להודעה מספר 3
 
   אם לא, אני לא מבין איך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   17:26   08.10.03   
אל הפורום  
  5. אפשר, לא יעזור לך בגרוש.  
בתגובה להודעה מספר 4
 
   sizeof לא נותן לך את מספר הספרות במספר.


וכן זה אפשרי, יש לי קוד בC שעושה את זה, והשתמשתי רק בפעולות
אריטמטיות פשוטות ובאופרטור הטרינארי(לחילופין יכולתי להשתמש בif)

עם כל המגבלות ששמתי אני לא חושב שC++ יוצא שונה מהותית מC,
צריך להבין שאין לך פעולות כמו log וpow מי שרוצה לממש בC++,
תפדל!

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
TheBinary

   20:47   08.10.03   
אל הפורום  
  9. תראה, זה כן עוזר:  
בתגובה להודעה מספר 5
 
   ערכתי לאחרונה בתאריך 08.10.03 בשעה 20:49 בברכה, TheBinary
 
נגיד אני כותב מערך מסוג Char, ועושה ככה:

int invert(int num) {
char temp[] = num;
int number_of_letters;
number_of_letters = sizeof(temp);
}

זה יעבוד, המשתנה number_of_letters יכיל את כמות האותיות, לא?
ואני לא יודע מה זה אופרטור הטרינארי (אני עכשיו מחפש הגדרה)
וד"א זה נשמע קשור לניק שלי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   17:29   08.10.03   
אל הפורום  
  6. רמז: צריך לקרוא את השאלה בזהירות.  
בתגובה להודעה מספר 0
 
   מה ההתנהגות הנדרשת מהפונקציה? ואילו מה החתימה שדרשתי?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
no_angel
חבר מתאריך 20.3.02
4989 הודעות
   17:45   08.10.03   
אל הפורום  
  7. רמז קטן לכולם במידה ומותר  
בתגובה להודעה מספר 6
 
   רקורסיהההההההההההה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   19:41   08.10.03   
אל הפורום  
  8. כבר כתבתי רקורסיה בראש האשכול  
בתגובה להודעה מספר 7
 
   ערכתי לאחרונה בתאריך 08.10.03 בשעה 19:41 בברכה, dryice
 
וודאי שזה הכרחי.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   20:47   08.10.03   
אל הפורום  
  10. מאוד פשוט  
בתגובה להודעה מספר 0
 
   הינה קוד לדוגמא בפסקל

program dryice;
uses crt;
var i:integer;

function invert(num:integer):integer;
begin;
writeln(num mod 10)
if (num>9) then invert:=invert(num div 10);
end;

begin
clrscr;
readln(i);
invert(i);
end.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Vidi
חבר מתאריך 1.10.17
591 הודעות
   21:36   08.10.03   
אל הפורום  
  11. סרגל יש לך טעות  
בתגובה להודעה מספר 10
 
הפוקנציה אמורה להחזיר לא להדפיס :\


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   22:27   08.10.03   
אל הפורום  
  12. פתרון אחר  
בתגובה להודעה מספר 11
 
  

program dryice2;
uses crt;
var i,num2,a:integer;

function invert(num:integer):integer;
begin;
num2:=(num2*10)+(num mod 10);
if (num>9) then invert:=invert(num div 10);
invert:=num2;
end;

begin
clrscr;
num2:=0;
readln(i);
a:=invert(i);
end.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   11:33   09.10.03   
אל הפורום  
  14. זאת פונקציה חד פעמית, מה שכתבת.  
בתגובה להודעה מספר 12
 
   אתה מפעיל אותה פעם ראשונה היא עובדת, פעם שנייה כבר לא.

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

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   20:40   09.10.03   
אל הפורום  
  17. הממ, זה בגלל החתימה שדרשת  
בתגובה להודעה מספר 14
 
   אחרת הייתי שם שם את num2, ושולח לפונ' 0 בשבילו, וככה זאת תהיה פונקציה "רב פעמית"


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   22:20   09.10.03   
אל הפורום  
  18. ועל כן נתתי כותרת ''אתגר''  
בתגובה להודעה מספר 17
 
   אם זה לא יפתר(עם הרמז הנוסף שהוספתי למטה) אני מתישהוא
מחר אפרסם פתרון.

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
madboy2k
חבר מתאריך 31.3.02
2150 הודעות
   01:19   09.10.03   
אל הפורום  
  13. היה קשה  
בתגובה להודעה מספר 0
 
   אבל הצלחתי בסוף
זה בסי


#include<stdio.h>
#include<conio.h>
int num2=0;
int invert(int num)
{
if(num==0) return 0;
num2=num2*10+num%10;
invert(num/10);
return num2;
}

void main()
{
int n,x;
clrscr();
scanf("%d",&n);
x=invert(n);
printf("%d",x);
getch();
}

אחלה אתגר


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   11:35   09.10.03   
אל הפורום  
  15. גם אצלך כתבת פונקציה חד פעמית.  
בתגובה להודעה מספר 13
 
   חייבים לאפס את num2 לפני כל הפעלה, בשביל שזה באמת יעבוד.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   15:28   09.10.03   
אל הפורום  
  16. רמז עבה יותר:  
בתגובה להודעה מספר 0
 
   דרשתי שהפונקציה תעבוד רק עבור מספרים חיוביים,
עבור מספרים שליליים הפונקציה יכולה להתנהג אחרת.

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
dryice

   14:05   10.10.03   
אל הפורום  
  19. פתרון:  
בתגובה להודעה מספר 0
 
   פונקציה כנדרש בC בצורה הקומפקטית:

int invert(int num) {
return (num<=0?(num>-10?-num:(10*invert((10*(num/100))+(num%10)))):(invert(-num)+invert(num/10)));
}

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

DRYICE


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   15:18   10.10.03   
אל הפורום  
  20. המממ, אפשר ''תרגום'' למימוש בפסקל  
בתגובה להודעה מספר 19
 
   אף פעם לא הסתדרתי עם רקורסיות בc...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
liranr

   15:52   10.10.03   
אל הפורום  
  21. בבקשה  
בתגובה להודעה מספר 20
 
   בפסקל אין את אופרטור התנאי המקוצר, אז השתמשתי בתנאים אמיתיים:
function invert(num : integer) : integer;
begin
if num<=0 then
if num>-10 then
invert := -num
else
invert := 10*invert(10*(num div 100)+(num mod 10))
else
invert := invert(-num)+invert(num div 10);
end;


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
szargel

   16:08   10.10.03   
אל הפורום  
  22. עזוב...  
בתגובה להודעה מספר 21
 
   אני כבר מעדיף את איך שזה נראה בC

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
madboy2k
חבר מתאריך 31.3.02
2150 הודעות
   18:08   10.10.03   
אל הפורום  
  23. אמאלה  
בתגובה להודעה מספר 19
 
  
אני מחכה להסבר
אם אפשר גם מה עושים ה ? ו :
פה נגיד :
num>-10?-num:

בחיים לא הייתי מגיע לזה
אני מיליון רמות מתחת לזה
( כיתה יא' )

אבל אהבתי זה נראה יפה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net