פורסם 2010 ביולי 1615 שנים שלום לכולם.יש לי שאלה בשפת C:בניתי את הקוד הבא:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\[left]printf("Please enter an Unsigned Number: "); scanf("%u",&a); flushall(); while(a!=0) { c=a;//temp for remembering a's value b=a%10;// 12345--->5 while(b!=count)//until b=count count++;//0--->1--->2... (until it gets the right figure) while(b==count) { count2++;//1--->2--->3... (until it gets the number of shows) if(a==0) break; a/=10; b=a%10; } //need to print only the max show value of each figure printf("\n %u = %d times\n",count,count2); a=c;//get back a's value a/=10;//12345--->1234 count=0;//get counter back to 0 count2=0;//get counter back to 0 }[/left]עכשיו בעקרון זה קוד הבודק כמה פעמים מופיעה כל ספרה במספר מוגדר ע"י המשתמשומציג את התשובה בצורה כזו:לדוגמא: המספר 1234441 = 1 times2 = 1 times3 = 1 times4 = 3 timesככה זה צריך להראות בקומפיילר.אבל בפועל זה מציג לי ככה1 = 1 times2 = 1 times3 = 1 times4 = 1 times4 = 2 times4 = 3 timesאיך אני משנה את ה פרינט ככה שהוא יציג לי רק את הערך המקסימלי של ההופעה של כל ספרה?תודה רבה לעוזרים!
פורסם 2010 ביולי 1615 שנים קודם כל - קצת סדר:אתה משתמש בלולאות WHILE כאשר צריך התניות פשוטות וזה פשוט לא נכון לעשות.כמו כן ההתניות שאתה נותן בתוך לולאת WHILE יכולות לגרום לריצה אינסופית כיון שאתה נותן גישה לטווח שלם מלבד ערך מסוים במקום להגדיר טווח עבודה תקני עבור אותה לולאה.אתה שואל שאלה ומציג קטע קוד תוך שימוש במשתנים בלי לציין סוג משתנה וערך מאתחל. אני יכול לנחש למה התכוונת אבל זה לא לעניין.באשר לאלגוריתם:אני חושב שפשוט חסר לך סוגריים מסולסלים אחרי ה WHILE השני כדי לפתוח בלוק. אתה צריך להחליף את השורה הלפני אחרונה בשורה האחרונה לפני הסוגריים המסולסלים - כי אתה מאפס את המונה החיצוני לפני המונה הפנימי וזה לא נכון. צריך להוסיף סוגריים מסולסלים לפני השורה האחרונה של איפוס המונה החיצוני (אחרי שהחלפת) כדיל סגור בלוק של לולאה פנימית.אתה צריך להשתמש בלולאת FOR במקום ה WHILE השני.כמו כן לולאת FOR במקום ה WHILE השלישי.משתמשים בלולאת WHILE כאשר לא יודעים מתי תהיה עצירה. אבל כאן אתה יודע - הלולאה הפנימית נעצרת כאשר הגעת לסוף המספר בכל פעם והלולאה החיצונית נעצרת כאשר סיימת לבדוק את הכל הספרות מ 0 עד 9.
פורסם 2010 ביולי 1615 שנים עוד בקשה קטנה: ערוך בבקשה את ההודעה ושים את הקוד שלך בתוך תגית קוד (כפתור # ליד הכפתור של הציטוט).
פורסם 2010 ביולי 1715 שנים מחבר קודם כל תודה רבה על העזרה.אבל אולי תוכל בבקשה לרשום את השינויים שאני צריך לעשות מ-WHILE ל-FOR (אני לא בטוח אילו תנאים לרשום ב FOR)?את השורות של המונים החלפתי.לא הבנתי כל כך איפה בדיוק לסגור את הלולאה הגדולה עם סוגריים מסולסלים, האם אתה מתכוון ש הCOUNT השני יהיה בכלל מחוץ לכל הלולאות, ז"א רק בתוך ה CASE?בכל מקרה ממש תודה על העזרה.
פורסם 2010 ביולי 1715 שנים באשר למעבר מלולאת WHILE ל FOR - אתה צריך לשבת ולחשוב מה התנאים שמתקיימים בתחילת הפעולה, בסיום איטרציה יחידה ובסיום הלולאה כולה.רמז - הפרמטר הראשון של FOR הוא אתחול המשתנים של לולאת FOR עצמה. הפרמטר השני הוא תנאי להמשך. הפרמטר האחרון הוא הפעולה שמתבצעת בסוף כל איטרציה או במילים אחרות - קידום COUNT.באשר למיקום הסוגר - ה COUNT האחרון חייב להיות בתוך הלולאה החיצונית ובסופה - כדי לקדם לספרה הבאה. אני מבין שרק התחלת ללמוד, אבל יש לך לדעתי בעיה בסיסית בלהבין מה האלגוריתם שלך עושה ולכן אתה שואל שאלה שנדמה לך שהיא טכנית ברמת הקוד אבל למעשה היא בעייה ביישום האלגוריתם. זה טוב שניסית לכתוב תוכנית וקיבלת קצת נסיון אבל עכשיו אני מציע שתרשום את האלגוריתם מחדש בצורה מסודרת בעברית פשוטה אבל עם תיאור מדויק של מה קורה בכל שלב. ואז עם עצמך תעשה סימולציה של הרצת התהליך לפי האלגוריתם שרשמת ותקבע ומה אמורים להיות ערכי המשתנים בכל שלב.ורק אז תנסה לכתוב מחדש את כל הקוד.
פורסם 2010 ביולי 1715 שנים מחבר נכון, רק התחלתי ללמוד. (למרות שאני יודע דיי טוב את המרכיבים של לולאת FOR) תודה על הטיפים, אני חושב שנתת לי כיוון טוב, אני אלך לשבת על זה עכשיו. תודה ויום טוב
פורסם 2010 ביולי 1915 שנים מחבר טוב יש לי קוד חדש (הוא עדיין עם לולאת WHILE)printf("Please enter an Unsigned Number: "); scanf("%u",&a);//12345 flushall(); while(a!=0)//12345--->1234--->123--->12--->1--->0 stop! { b=a%10;//12345--->5 c=a;//placeholder for a while(a!=0)//12345--->1234--->123--->12--->1--->0 stop! { a/=10;//12345--->1234 d=a%10;//1234--->4 if(b==d)//5=4 ? { count=count++;//1--->2--->3... } } a=c;//get a's original value a/=10;//12345--->1234 forever! //if there are no repetitions if(count==1) { printf("\n%u = %d time\n",b,count);//5 = 1 time } count=1;//get counter back to 1 }האם מישהו יוכל בבקשה לעזור לי, איך אני מדפיס רק פעם אחת מספר הופעות של כל ספרה?לדוגמא: המספר 1234441 = 1 times2 = 1 times3 = 1 times4 = 3 timesככה זה צריך להראות בקומפיילר.אבל בפועל זה מציג לי ככה1 = 1 times2 = 1 times3 = 1 times4 = 1 times4 = 2 times4 = 3 timesאיך אני משנה את ה פרינט ככה שהוא יציג לי רק את הערך המקסימלי של ההופעה של כל ספרה?תודה רבה לעוזרים!
פורסם 2010 ביולי 1915 שנים אתה עצלן !אתה לא חייב לקבל מה שאני אומר לך, אבל נתתי לך שורה של דברים שצריך לעשות שהם אלמנטריים לתכנות בכלל ואתה לא עשית.לא רוצה לקטול אותך כי אתה בכל זאת בכיוון נכון, אבל כמו שאמרתי יש לך בעיה בלהבין את האלגוריתם שאתה בעצמך תיכננת. כאשר תבין מתי ואיך בודקים מצב של סוף ספירת המופעים של ספרה בודדת, תוכל למקם שם הדפסה.במקום לפרסם קוד - אני מציע שתפרסם את האלגוריתם שכתבת בעברית - אם כתבת. ואם לא אז תכתוב. ועל זה אני אהיה מוכן לייעץ.ולסיום - אם אתה מתעקש על הדרך שלך, אתה יכול פשוט להדפיס למסך ערך של כל משתנה בזמן ריצה וזה יכול לתת לך כיוון.
פורסם 2010 ביולי 1915 שנים ההודעה האחרונה שלי הייתה קצת חריפה מבחינת הטון. ואין לי כמובן כוונה לפגוע פשוט מנסה לומר מה שאני חושב.
פורסם 2010 ביולי 2015 שנים מחבר זה בסדר. אני מבין שאתה רק מנסה להכניס בי מוטיבציה להבין באמת את הקוד. אני יושב על זה כבר כמה ימים ועדיין לא מצאתי דרך. את ההבנה של השפה אני לא אקבל על התרגיל הראשון שאני עושה, את ההבנה הבסיסית בכל זאת אני יודע כי כתבתי את הקוד הזה. זה לא שזה הדבר היחיד שאני לומד כרגע, אז להשקיע רק בזה זה לא אפשרי.. אם תוכל בכל זאת לתת לי את הקוד להדפסה אני אודה לך מאד , ואם תוכל להסביר לי איפה טעיתי גם אודה לך. יום טוב. ***עריכה: זה הקוד החדש, הצלחתי להשיג את מה שרציתי! אבל אם אני נותן לו מספר התחלתי גדול מדי הקומפיילר משתגע ומתחיל להמציא לי מספרים... printf("Please enter an Unsigned Number: "); scanf("%u",&a);//12345 flushall(); while(a!=0)//12345--->1234--->123--->12--->1--->0 stop! { b=a%10;//12345--->5 1234--->4 123--->3 ... c=a;//placeholder for a (12345--->1234--->123--->...) temp=count2;//at first = 0 --->50--->540--->5430... while(a!=0)//12345--->1234--->123--->12--->1--->0 stop! { a/=10;//12345--->1234--->123--->... d=a%10;//1234--->4 123--->3 ///temp=0--->50--->540--->5430--->54320--->543210 while(temp!=0)//doesnt work in the first time (temp=0) { temp/=10;//0--->0 50--->5 540--->54 5430--->543 ... e=temp%10;//0--->0 5--->5 54--->4 543--->3 ... if(e==b)//0=4?--->5=3?---> EXIT2=1;//get flag to "yes" if the number allready showed } if(b==d && !EXIT2)//5=4 ? (dont do it if flag is "yes") { count++;//1--->2--->3... } } if(!EXIT2)//only if flag is "no" { printf("\n%u = %d times\n",b,count);//5 = 1 time } EXIT2=0;//get flag back to "no" count2+=b;//0--->5--->54--->543--->5432--->54321 count2*=10;//50--->540--->5430--->54320 a=c;//get a's original value c=12345--->a=12345 a/=10;//12345--->1234 forever! count=1;//get counter back to 1 } count2=0;//get counter back to 0 temp=0;//get temp back to 0 האם יש למישהו פתרון? (או סיבה?)
פורסם 2010 ביולי 2015 שנים קצת בסיס - INT מוגדר כ 2 בחזקת 32 - כלומר מקסימום 4 בתים.אם הכנסת מספר יותר גדול מזה - אתה מקבל גלישת זיכרון.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.