פורסם 2006 בפברואר 719 שנים תפקיד התוכנה הוא להדפיס לכמה מספרים בין 1 ל-30 יש שורש שלם ולא מצליח לי, זה מדפיס לי 15 במקום 5:#include <stdio.h>#include <conio.h> void main() { clrscr(); int i,num,mone=0; for(i = 1; i <= 30; i++) { for(num = 1; num <= 30; num++) { if(i / num == num) mone++; } } printf("\n\n %d",mone); }
פורסם 2006 בפברואר 719 שנים 1. את הלולאה הפנימית (num) אפשר להריץ עד i במקום עד 30. אבל זה לא קריטי לנכונות (רק ליעילות).2. הבעיה המרכזית היא בתנאי. בגלל שכל המשתנים הם integer אז תוצאת החילוק (i/num) יוצאת מעוגלת. לדוגמא אם i שווה 5 ו-num שווה 2, תוצאת החילוק תהיה 2 (שזה 5 לחלק ל-2 ללא שארית) והתנאי מתקיים.מה שכדאי לעשות זה להפוך את החילוק לכפל, כלומר לעבור לתנאי הבא:if (i == num * num)
פורסם 2006 בפברואר 719 שנים בשפת סי יש פונקציה שמחזירה את השורש אם אני זוכר נכון היא נקראת n=sqr(num)כמובן שצריך להוסיף פונקצית סיפריה#include<math.h>
פורסם 2006 בפברואר 719 שנים להלן שיעור קצר בדיבאג :שינוי קליל בקוד שלך ל :#include <stdio.h>int main(){ int i,num,mone=0; for(i = 1; i <= 30; i++) { for(num = 1; num <= 30; num++) { if(i / num == num) { printf("i is %d num is %d mone is %d\n",i,num,mone++); } } printf("\n %d\n",mone);}הניב את הפלט :i is 1 num is 1 mone is 0i is 4 num is 2 mone is 1i is 5 num is 2 mone is 2i is 9 num is 3 mone is 3i is 10 num is 3 mone is 4i is 11 num is 3 mone is 5i is 16 num is 4 mone is 6i is 17 num is 4 mone is 7i is 18 num is 4 mone is 8i is 19 num is 4 mone is 9i is 25 num is 5 mone is 10i is 26 num is 5 mone is 11i is 27 num is 5 mone is 12i is 28 num is 5 mone is 13i is 29 num is 5 mone is 14כאן מאד פשוט לגלות את הבעיה (שכמו שאמרו לך, זו בעיית עיגול).מטי.
פורסם 2006 בפברואר 719 שנים int counter = 0;float x;int i;for( i = 1; i <= 30; i++ ){ x = sqrt( i ); if( x == (float)trunc( x ) ) { counter++; }}
פורסם 2006 בפברואר 719 שנים בשפת סי יש פונקציה שמחזירה את השורש אם אני זוכר נכון היא נקראת n=sqr(num)כמובן שצריך להוסיף פונקצית סיפריה#include<math.h>sqr מעלה בריבועsqrt מוציא שורש
פורסם 2006 בפברואר 919 שנים לא צריך להיות ; לאחר הלולאה(כי אז הוא יציג את המספר הריבועי הבא אחרי 30 - 36)ולא צריך לשמור גם J. מספיק הI.וצריך להדפיס את i בריבוע, לא את I מכיוון שאתה צריך את הריבוע לא את השורש.אם רוצים גם את השורש:for(i=0;i*i<30;i++)printf("%d^2 = %d", i, i*i);
פורסם 2006 בפברואר 919 שנים תפקיד התוכנה הוא להדפיס לכמה מספרים בין 1 ל-30 יש שורש שלם....זה כבר לא תיכנות, זה הבנת הנקרא.מטי.
פורסם 2006 בפברואר 919 שנים טוב טעות שלי.בכל מקרה לא צריך להשתמש ב- 2 משתנים.for(i=1;i*i<30;i++);printf("%d", i-1);
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.