פונקציה פשוטה

פונקציה פשוטה

יש לי משתנה מסוג CHAR* הוא מכיל STRING, איך אני יכול להדפיס אותו.. אני לא רוצה לולאה או משהוא כזה. יש איזה משהוא כמו puts שאיתו אני יכול להדפיס.. רק אני לא מצליח להשתמש בו. איך אני אומר לו להדפיס את המשתנה A שהוא מסוג CHAR * ?
 
אהה? (ובנוסף שאלת אלגוריתם ממש קשה)

לא ידעתי שאני יכול להדפיס STRING עם PRINTF ומה אי כותב בתוכו אני משתמש ב%C ? או צריך משהוא אחר ? ויש לי עוד שאלה, בשיעורי בית שלי בטכניון : http://webcourse.cs.technion.ac.il/234114/Winter2004-2005/hw/WCFiles/hw6.pdf יש את שאלה 4, מישהוא יכול לעזור לי למצוא איזה רעיון לא מצאתי שום דבר יותר טוב מפשוט לעבור על כל המערך.. אגב, מי שעוזר תקראו את השאלה בקפידה היא מאוד מבלבלת וקשה להבין אותה. תודה מראש לעוזרים.
 

vinney

Well-known member
RTFM

באמת, הגזמת, אתה לא יודע להשתמש בprintf? תסתכל בMSDN! לגבי השאלה - מה רע בחיפוש בינארי? K-נארי, ליתר דיוק (אם כי בינארי יכול לעבוד גם)
 
לא בדיוק הבנתי

איך אני יכול לעשות פה חיפוש בינארי המערך לא מסודר : תקח מקרים מוזרים : ddd 1 3 5 7 4 5 20 30 19 22 100 ddd אני כרגע מנתח את המערך הזה המערך מסודר K=3 אני לא מוצא דרך ליישם חיפוש בינארי אני לא יכול סתם לעשות Kנארי כי נניח אני מחפש 19. בחרתי את האיבר האמצאי 20, אני לא יכול לדעת אם זה מימין או משמאל כי זה יכול להיות בשניהם בטווח אפסילון. נניח אני אחפש תמיד בטווח אפסילון.. מי מבטיח לי שזה האיבר הראשון ששווה ל19 יכול להיות שיש לפני עוד איבר כזה.. אני אומר את זה, כי כבר 3-4 שעות אני מנסה ליישם חיפוש בינארי
 

gmorphus

New member
אתה יכול לצמצם את החיפוש

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

אולי מהדברים שלי משתמע שאני סתם רוצה שתפתרו לי את התרגיל אני לא פונה לפורום לפני שניסיתי לפחות כמה שעות אלא אחרי שאין לי מושג מה לעשות. מה שאמרת זה לא בסדר לדוגמא : תקח מקרים מוזרים : ddd 1 3 5 7 4 5 20 30 19 22 100 ddd אני כרגע מנתח את המערך הזה המערך מסודר K=3 אני מחפש את 5, נקח מספר באמצע שהוא 20 ונחפש i-k ומעלה. יופי ז"א אנחנו נתחיל לחפש מה7 ומעלה.. אכן באמת נמצא שם 5. אבל זה לא ה5 הראשון במערך... יותר מזה סתם במערך הזה יש שם 5, במערך אחר יכול להיות שלא יהיה שם 5 בכלל.. אתה לא מבין כמה סוגי חיפושים כבר ניסיתי.. אני לא מצאתי כלום יותר יעיל מלעבור על כל המספרים.
 

vinney

Well-known member
תגיד לי, בכיתה ב' למדת?

5 זה יותר גדול מ20 או יותר קטן? למה אתה מחפש למעלה?
 
../images/Emo163.gif../images/Emo9.gif

שמתי לב שאין אדומים בפורום הייתי עושה אותך אדום... אבל זה רק אני
 
אדום=מומחה ועוד שאלה

ציטוט ארוך של מי שכתב את השיעורי בית שלי : " כאשר אני מנסה להדר את הפתרון שלי לאחת השאלות 1-3 יחד עם דוגמת הקוד להגדרת מערך המחרוזות, ואני משתמשת במהדר שאינו Turbo C, אני מקבלת שגיאות בזמן הרצה, כמו Segemntation Fault. האם יש שגיאה בקוד? דוגמת הקוד שסופקה בהגדרת התרגיל מניחה הנחה מובלעת כי המהדר יאפשר כתיבה לתוך המחרוזות המוגדרות כאיברים במערך של char *'ים. זוהי אכן ההתנהגות ב-Turbo C, אך לא כך בכל מהדר ומהדר. ניתן היה להתאים את הדוגמה למקרה יותר כללי, אך אז הייתה היא הופכת מעט יותר מסורבלת (היינו נאלצים להשתמש במערך-עזר דו-מימדי; לחילופין ניתן היה להשתמש בהקצאת זיכרון דינמית, נושא אשר לא למדנו בקורס). לכן העדפתי לתת את הדוגמה הפשוטה. למי מכן אשר עובדת עם מהדר אחר: נא להורות למהדר שלא לאכסן 'קבועי מחרוזת' באזורים אסורים לכתיבה. לדוגמה, מי שמשתמשת במהדר gcc צריכה להוסיף לשורת-הפקודה את האפשרות -fwritable-strings . תודה לנימרוד פרטוש שהזכיר לי את העניין; עמכן הסליחה על כך שלא ציינתי זאת קודם לכן. " יש פה פתרון לבעיה בשביל GCC (מה זה בכלל GCC), איך אני פותר את הבעיה בVS 6, הוא לא אוהב שלא מקצים מקום ל*CHAR ועושה לי ERROR של וינדוס, שהתוכנית חייבת להסגר. לפי מה שהוא אמר יש משהוא שאפשר לעשות בMSVC שגם שם אני אוכל להסתדר. אגב אם מישהוא רוצה לראות את הפונקציה שלא עובדת, זה בלינק שנתתי לשיעורי בית שלי, הפונקציה element swap
 

vinney

Well-known member
פגעת בהרבה אנשים עכשיו ../images/Emo6.gif

תודה, אבל אני לא ממש מומחה לכל תחומי הפורום, אני יודע לענות על שאלות רק בנושאים בהם אני מתעסק/התעסקתי, ותחומו של הפורום הרבה יותר רחב מתחום ההתעסקות שלי. יש פה לא מעט אנשים שמומחים הרבה יותר ממני בתחומים רבים מאוד. לעניינו, GCC זה קומפיילר חינמי המופץ על ידי GNU, נחשב למאוד תקני. DEVCPP מבוסס עליו. לגבי הבעיה עצמה - זה מאוד לא יפה מצדו של המתרגל לעשות כזה דבר, אלא אם כן הוגדר לכם מראש להשתמש בTCLITE (באו"פ למשל מגדירים להשתמש בקומפיילרים של BORLAND/VISUAL, תלוי בקורס, וניתן לקבלם באוניברסיטה לתקופת הקורס, בדיוק כדי להמנע מכאלה בעיות). למה הפונקציה לא עובדת לך בVS? היא נראית בסדר, פרט לבדיקות תקינות קלט...
 
מממ שאלה טובה

הלוואי והייתי יודע למה היא לא עובדת.. שאלתי את השאלה וזה מה שהוא כתב אולי זה יעזור לך להבין למה זה לא עובד:
am guessing you are not using Turbo C. In Turbo C ElementSwap() works, because the compiler places the string constant in an area of memory to which you can write, while other compilers usually don't. This is addressed in the FAQ page: http://www.cs.technion.ac.il/~eyalroz/234117-hw6.html#q5 The solution to this problem is spelled out in the FAQ for the 'gcc' compiler. If you're using, say, MSVC, consult its documentation.​
הבעיה עם התיעוד, זה דבר ראשון שאין לי אותו במחשב אז אני חייב להשתמש בMSDN שמשום מה עובד אצלי לאט (אני מדבר על הMSDN שבאינטרנט) דבר שני אני לא יודע מה אני מחפש, אני לא אזהה שמה שמצאתי זה מה שאני צריך. למישהוא יש מושג מה עושים ?
 
למעלה