שורשים ב-c - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שורשים ב-c


skywalker13

Recommended Posts

תפקיד התוכנה הוא להדפיס לכמה מספרים בין 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);

}

קישור לתוכן
שתף באתרים אחרים

1. את הלולאה הפנימית (num) אפשר להריץ עד i במקום עד 30. אבל זה לא קריטי לנכונות (רק ליעילות).

2. הבעיה המרכזית היא בתנאי. בגלל שכל המשתנים הם integer אז תוצאת החילוק (i/num) יוצאת מעוגלת. לדוגמא אם i שווה 5 ו-num שווה 2, תוצאת החילוק תהיה 2 (שזה 5 לחלק ל-2 ללא שארית) והתנאי מתקיים.

מה שכדאי לעשות זה להפוך את החילוק לכפל, כלומר לעבור לתנאי הבא:

if (i == num * num)

קישור לתוכן
שתף באתרים אחרים

להלן שיעור קצר בדיבאג :

שינוי קליל בקוד שלך ל :

#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 0
i is 4 num is 2 mone is 1
i is 5 num is 2 mone is 2
i is 9 num is 3 mone is 3
i is 10 num is 3 mone is 4
i is 11 num is 3 mone is 5
i is 16 num is 4 mone is 6
i is 17 num is 4 mone is 7
i is 18 num is 4 mone is 8
i is 19 num is 4 mone is 9
i is 25 num is 5 mone is 10
i is 26 num is 5 mone is 11
i is 27 num is 5 mone is 12
i is 28 num is 5 mone is 13
i is 29 num is 5 mone is 14

כאן מאד פשוט לגלות את הבעיה (שכמו שאמרו לך, זו בעיית עיגול).

מטי.

קישור לתוכן
שתף באתרים אחרים

בשפת סי יש פונקציה שמחזירה את השורש

אם אני זוכר נכון היא נקראת

n=sqr(num)

כמובן שצריך להוסיף פונקצית סיפריה

#include<math.h>

sqr מעלה בריבוע

sqrt מוציא שורש

קישור לתוכן
שתף באתרים אחרים

לא צריך להיות ; לאחר הלולאה(כי אז הוא יציג את המספר הריבועי הבא אחרי 30 - 36)

ולא צריך לשמור גם J. מספיק הI.

וצריך להדפיס את i בריבוע, לא את I מכיוון שאתה צריך את הריבוע לא את השורש.

אם רוצים גם את השורש:



for(i=0;i*i<30;i++)
printf("%d^2 = %d", i, i*i);

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...