skywalker13 פורסם 2006 בפברואר 7 Share פורסם 2006 בפברואר 7 תפקיד התוכנה הוא להדפיס לכמה מספרים בין 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); } קישור לתוכן שתף באתרים אחרים More sharing options...
zurkin1232 פורסם 2006 בפברואר 7 Share פורסם 2006 בפברואר 7 1. את הלולאה הפנימית (num) אפשר להריץ עד i במקום עד 30. אבל זה לא קריטי לנכונות (רק ליעילות).2. הבעיה המרכזית היא בתנאי. בגלל שכל המשתנים הם integer אז תוצאת החילוק (i/num) יוצאת מעוגלת. לדוגמא אם i שווה 5 ו-num שווה 2, תוצאת החילוק תהיה 2 (שזה 5 לחלק ל-2 ללא שארית) והתנאי מתקיים.מה שכדאי לעשות זה להפוך את החילוק לכפל, כלומר לעבור לתנאי הבא:if (i == num * num) קישור לתוכן שתף באתרים אחרים More sharing options...
big foot פורסם 2006 בפברואר 7 Share פורסם 2006 בפברואר 7 בשפת סי יש פונקציה שמחזירה את השורש אם אני זוכר נכון היא נקראת n=sqr(num)כמובן שצריך להוסיף פונקצית סיפריה#include<math.h> קישור לתוכן שתף באתרים אחרים More sharing options...
skywalker13 פורסם 2006 בפברואר 7 מחבר Share פורסם 2006 בפברואר 7 תודה!!!באמת לא חשבתי על זה! קישור לתוכן שתף באתרים אחרים More sharing options...
iceman90 פורסם 2006 בפברואר 7 Share פורסם 2006 בפברואר 7 להלן שיעור קצר בדיבאג :שינוי קליל בקוד שלך ל :#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כאן מאד פשוט לגלות את הבעיה (שכמו שאמרו לך, זו בעיית עיגול).מטי. קישור לתוכן שתף באתרים אחרים More sharing options...
borg פורסם 2006 בפברואר 7 Share פורסם 2006 בפברואר 7 int counter = 0;float x;int i;for( i = 1; i <= 30; i++ ){ x = sqrt( i ); if( x == (float)trunc( x ) ) { counter++; }} קישור לתוכן שתף באתרים אחרים More sharing options...
Holy פורסם 2006 בפברואר 7 Share פורסם 2006 בפברואר 7 בשפת סי יש פונקציה שמחזירה את השורש אם אני זוכר נכון היא נקראת n=sqr(num)כמובן שצריך להוסיף פונקצית סיפריה#include<math.h>sqr מעלה בריבועsqrt מוציא שורש קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2006 בפברואר 8 Share פורסם 2006 בפברואר 8 אבל זה סתם מבזבז זמן.תנסה לעשות:for(i=0;i*i<30;i++)printf("%d", i*i); קישור לתוכן שתף באתרים אחרים More sharing options...
iceman90 פורסם 2006 בפברואר 8 Share פורסם 2006 בפברואר 8 אני מניח שהתכוונתfor(i=0,j=0;i*i<30;i++,j++) ;printf("%d \n",j);מטי. קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2006 בפברואר 9 Share פורסם 2006 בפברואר 9 לא צריך להיות ; לאחר הלולאה(כי אז הוא יציג את המספר הריבועי הבא אחרי 30 - 36)ולא צריך לשמור גם J. מספיק הI.וצריך להדפיס את i בריבוע, לא את I מכיוון שאתה צריך את הריבוע לא את השורש.אם רוצים גם את השורש:for(i=0;i*i<30;i++)printf("%d^2 = %d", i, i*i); קישור לתוכן שתף באתרים אחרים More sharing options...
iceman90 פורסם 2006 בפברואר 9 Share פורסם 2006 בפברואר 9 תפקיד התוכנה הוא להדפיס לכמה מספרים בין 1 ל-30 יש שורש שלם....זה כבר לא תיכנות, זה הבנת הנקרא.מטי. קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2006 בפברואר 9 Share פורסם 2006 בפברואר 9 טוב טעות שלי.בכל מקרה לא צריך להשתמש ב- 2 משתנים.for(i=1;i*i<30;i++);printf("%d", i-1); קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.