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

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



  #1  
ישן 09-02-2015, 23:11
  BLADETRINITI BLADETRINITI אינו מחובר  
 
חבר מתאריך: 21.01.15
הודעות: 14
מנסה להבין כמה דברים במערכים שפת c

עוד כמה שאלות
1)
תרגיל 10 - כתוב תוכנית נפרדת עבור כל אחד מהסעיפים הבאים א. הצב במערך b את המספרים השליליים ממערך a ולאחר מכן את המספרים החיוביים ממערך a. (שימו לב לגודל המערך b, הוא צריך להיות כגודל המערך a). ב. הגדר מערך חדש c והצב בו את הערך הגדול מבין כל שני ערכים מתאימים ב-a וב-b. (נמצאים באותו מיקום במערך למשל:a[2] ו- b[2]) במידה והערכים שווים, הצב את הערך 0.

וזה מה שעשיתי http://pastebin.com/rdiue6gv
אני מחפש קצת הידור לקוד.
(אני יכול לאתחל מערך בלולאת for ללא מספר של איברים במערך שנתון לי מראש? ז השאלה גם מצויינת בקוד )
2)
כתוב פונקציה המקבלת מערך את גודלו ושלושה מצביעים x1,x2,x3 ושמה את ערך הממוצע של המערך לתוך x1, את האיבר הגדול ביותר בתוך x2 ובתוך x3 את האיבר הקטן ביותר.
זה מה שעשיתי http://pastebin.com/Y3MjzRRZ
זה לא גמורת בכל מקרה הנה התשובה המלאה http://pastebin.com/60hekeRk
ואני מנסה להבין אני חייב לאתחל את את המינימום והמקסימום לאיבר הראשון [0] ?
הרי ברגע שעשיתי
if (arr[counter] < min) min = arr[counter];
אני יודע שהאיבר 0 הוא הכי קטן.
אז את השורה
if (arr[counter] > max) max = arr[counter];
לא עדיף שאני יאתחל את max לאיבר השני [1]?
מקווה שהייתי מובן.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #2  
ישן 10-02-2015, 12:29
צלמית המשתמש של MatiM
  משתמש זכר MatiM MatiM אינו מחובר  
 
חבר מתאריך: 12.04.06
הודעות: 2,021
שלח הודעה דרך MSN אל MatiM
בתגובה להודעה מספר 1 שנכתבה על ידי BLADETRINITI שמתחילה ב "מנסה להבין כמה דברים במערכים שפת c"

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

הסבר כללי -
מערך הוא משתנה שמסוגל להכיל כמות מסויימת של ערכים מאותו סוג (int, char וכדומה).
כל מערך יכול להכיל כמות מסויימת שמוגדרת בעת יצירת המערך.
לדוגמא מערך מסוג int בגודל 5, יוכל להכיל עד 5 מספרים שלמים מסוג int.
כדי לבחור נתון מתוך המערך, פונים אליו לפי מיקומו הסידורי בתוך המערך.
בניגוד לחשבון, בתוכנה כאשר מתחילים לספור - מתחילים מ0.

לכן, אם נגדיר לדוגמא את המערך הבא:
קוד:
int numbers[5] = {10,17,-3,6,-12};


נוכל לפנות לכל אחד מהערכים בצורה הבאה:
קוד:
numbers[0] = 10 numbers[1] = 6 numbers[2] = -3 numbers[3] = 17 numbers[4] = -12


שים לב!

הערך שנימצא באיבר הראשון (שמספרו הסידורי 0 וערכו 10) הוא אינו הערך הקטן ביותר במערך! (שאנחנו יודעים שבדוגמא זאת הוא -12).

באותו אופן, לא האיבר השני (שמספרו הסידורי 1 וערכו 6) ואפילו לא האיבר האחרון (שמספרו הסידורי 4 וערכו -12) הם אינם הערכים הגדולים ביותר במערך!

הערך הקטן ביותר שנמצא במערך הוא -12 (מינוס שתים-עשרה), והוא נמצא בתא שמספרו הסידורי 4!
הערך הגדול ביותר שנמצא במערך הוא 17, והוא נמצא בתא שמספרו הסידורי 3!

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

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

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


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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 10-02-2015, 15:05
צלמית המשתמש של MatiM
  משתמש זכר MatiM MatiM אינו מחובר  
 
חבר מתאריך: 12.04.06
הודעות: 2,021
שלח הודעה דרך MSN אל MatiM
בתגובה להודעה מספר 3 שנכתבה על ידי BLADETRINITI שמתחילה ב "תיקנתי את הקוד..."

עכשיו הקוד שלך מתחיל לקבל צורה
אני אתקן לך עוד כמה טעויות כדי שתלמד -
http://pastebin.com/5FxGVWiA

שורה 4:
- תשים לב איך הגדרתי את המערך. צריך לכתוב "=" (שווה) בין שם המערך לערכים שמציבים בו.

* הערה: בגלל שאנחנו משווים בין הערכים של המערך a והמערך b, צריך לאתחל גם את המערך b בנתונים כדי שהתוכנית תעבוד כמו שאנחנו מצפים ממנה *

שורה 5: (הלולאה)
- שים לב שהמשתנה i מונה מספרים שלמים מ0 עד 5. ברגע שכותבים i > b[5] הכוונה היא שהערך של i יהיה גדול מערך של האיבר שנמצא במיקום החמישי במערך == ואפילו אין איבר כזה בכלל.
אתה לא רוצה את זה. אתה בסך הכל רוצה את המספר 5, ולא את האיבר החמישי.
- במקום פסיקים בין החלקים במשפט של הלולאה, צריך להשתמש ב ";" (נקודה פסיק).

** אין צורך ב2 לולאות. עוברים פעם אחת, בלולאה אחת, על כל האיברים במערך.

התנאים:
- לפי השאלה, אנחנו לא בודקים האם הערכים של התאים גדולים מאפס (כמו שעשית), אלא האם הנתון במערך a גדול מהמערך b או להיפך. ולכן משפט ההשוואה הוא האם האיבר i במערך a גדול מהאיבר i במערך b.
ואותו דבר בתנאי השני, רק שהפעם בודקים הפוך. האיבר הi במערך b גדול מהאיבר i במערך a?
ואם הם שווים (זה מה שקורה ב else) - אנחנו שומרים את הערך 0.





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

הקוד ירוץ ככה:

  • תנאי 1 - אם האיבר הספציפי קטן מהמינימום => מעדכנים את המשתנה min ומציבים בו את הערך המינימלי החדש שמצאנו כרגע.
בלי קשר:
  • תנאי 2 - אם האיבר הספציפי גדול מהמקסימום => מעדכנים את המשתנה max ומציבים בו את הערך המקסימלי החדש שמצאנו כרגע.
ובלי קשר:
  • סוכמים את הערך של sum עם הערך של האיבר הספציפי.

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


נערך לאחרונה ע"י MatiM בתאריך 10-02-2015 בשעה 15:07.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #6  
ישן 11-02-2015, 16:24
צלמית המשתמש של MatiM
  משתמש זכר MatiM MatiM אינו מחובר  
 
חבר מתאריך: 12.04.06
הודעות: 2,021
שלח הודעה דרך MSN אל MatiM
בתגובה להודעה מספר 5 שנכתבה על ידי BLADETRINITI שמתחילה ב "וואו תודה על התשובה..."

תפקיד הלולאה כפי שהיא מוגדרת בקוד = לספור.
היא סופרת עבורך מ0 עד ערך קטן מ 5. (0,1,2,3,4).

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

ואז, בגלל שאת כל הפעולות אתה צריך לבצע בהתאמה על אותו מיספור, בכל המערכים:

בסיבוב הראשון של הלולאה i=0

ולכן כאשר תקרא a[i] זה כמו לקרוא ל a[0].
באותו אופן אתה קורא ל b[i] שהוא בעצם b[0].
אז בסיבוב הראשון, אתה משווה בין הערכים האלה ופועל על c[i] (שהוא, שוב, c[0]) בהתאם.

בסיבוב השני של הלולאה i=1
ולכן כאשר תשווה לדוגמא a[i] > b[i]
אתה בעצם תבדוק האם הערך ששמור באיבר a[1] גדול מהערך ששמור באיבר b[1].
ואז לפי התוצאה אתה תשמור את הערך המתאים ב c[1].

וכן הלאה...i=2 , i=3 , i=4. וזהו.

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 15-02-2015, 16:14
  BLADETRINITI BLADETRINITI אינו מחובר  
 
חבר מתאריך: 21.01.15
הודעות: 14
בתגובה להודעה מספר 7 שנכתבה על ידי BLADETRINITI שמתחילה ב "עכשיו יותר טוב. שאלתי ב3..."

היי,
יש לי עוד שאלות על שורות מסוימות של קוד.
הראשון הוא תשובה לשאלה
אנו רוצים לכתוב תוכנית המנהלת הזמנות לפסטיבל הנמשך שבוע.
הקלט לתוכנית הוא זוגות של מספרים, שהראשון ביניהם הוא מספר בין 1 ל 7- המציין יום, והשני מציין
את מספר הכרטיסים שהוזמנו באותו יום.
לאחר שנגמר הקלט, התוכנית תדפיס את הנתונים הבאים: מהו היום שאליו הוזמנו הכי הרבה כרטיסים,
מהו היום שאליו הוזמנו הכי פחות כרטיסים.
כמו כן, התוכנית תציג בצורה גרפית את כמות האנשים שהגיעו בכל יום, כאשר היום בו הגיעו מספר
האנשים הגדול ביותר יהווה טור 10 כוכביות, והשאר ינורמלו בהתאם
זה הקוד
http://pastebin.com/Zj52JhZZ
השניה היא חישוב חישוב היסטוגרמה
http://pastebin.com/yjrcKZA6
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 17-02-2015, 20:38
צלמית המשתמש של DeepSpace
  DeepSpace DeepSpace אינו מחובר  
 
חבר מתאריך: 23.09.03
הודעות: 11,845
בתגובה להודעה מספר 10 שנכתבה על ידי BLADETRINITI שמתחילה ב "תודה. בשאלה שניה איך בדיוק..."

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


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

אם המקסימום במערך הוא n אז ניצור מערך חדש בגודל n + 1 (בגלל שמערכים מתחילים ב- 0) ונאתחל את כל האינדקסים שלו ל- 0.
נעבור בלולאה על כל המערך המקורי, וכל פעם נקדם את המערך החדש (מערך המנייה) באינדקס הנוכחי באחד.

זאת אומרת שאם נניח שאנו רצים על המערך המקורי (נקרא לו arr, ולמערך המנייה c_arr) בלולאת for עם איטרטור i אז בכל איטרציה נבצע
c_arr[arr[i]]++

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


ציטוט:
במקור נכתב על ידי BLADETRINITI
הדפסת מטריצה במעגל
http://pastebin.com/k1xgvbrz
פה זה כמה שאלות פשוטות על שורות קוד
http://pastebin.com/n0Zinwg4
ו
http://pastebin.com/Vfc543iR


הקישור הראשון: UP זה בסך הכל משתנה קבוע שהוגדר למעלה, ביחד עם LEFT RIGHT ו- DOWN לצורך קריאות הקוד. שים לב שהמשתנה dir משנה את ערכו במהלך הקוד והוא תמיד בין 0 ל- 3 כולל בגלל שכל השמה אליו מתבצעת ע"י מודולו 4 שנותן ערכים בין 0 ל- 3. ההשוואה בין dir לאחד מהמשתנים הקבועים לא שונה משום השוואה אחרת בין שני משתנים.

הקישור השני: התשובות לשתי השאלות הן כן. בגלל שהמשתנה sum מאותחל מחדש ל - 0 בכל איטרציה של הלולאה החיצונית אז הסכום המודפס הוא של כל עמודה\שורה בנפרד, ולא של כל המטריצה.

הקישור השלישי: כמו ש- d% משמש להדפסת int ו- f% משמש להדפסת float, אז c% משמש להדפסת תו בודד (char).
אתה יכול לראות עוד תווים מיוחדים כאן: http://www.lix.polytechnique.fr/~li...ONS/format.html
_____________________________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. -Rick Cook

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #13  
ישן 18-02-2015, 18:54
צלמית המשתמש של DeepSpace
  DeepSpace DeepSpace אינו מחובר  
 
חבר מתאריך: 23.09.03
הודעות: 11,845
בתגובה להודעה מספר 12 שנכתבה על ידי BLADETRINITI שמתחילה ב "c_arr[arr[i]]+ כלומר האינדקס..."

ציטוט:
במקור נכתב על ידי BLADETRINITI
c_arr[arr[i]]+ כלומר האינדקס של מערך מנייה ושל מהערך המקורי מסונכרנים?
הלולאה יודעת לזרוק את הערכים לפי האינדקס השווה שבשתי המערכים?


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

ציטוט:
במקור נכתב על ידי BLADETRINITI
יש איזה תבנית מתמטית שאני יכול לדבוק בה? לעניין הזה?
במקרה שיהיו לי מערכים יותר גדולים ככה שאני אדע איך לאתחל את התנאים הראשונים ?


לא ממש הבנתי את הכוונה.
_____________________________________
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. -Rick Cook

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

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

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

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

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



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

הדף נוצר ב 0.21 שניות עם 10 שאילתות

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

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