עבור לתוכן

בעיה בהדפסת מספרי ז'רמן בשפת C

Featured Replies

פורסם

שלום,

יש לי בעיה בהדפסת מספרי ז'רמן (http://he.wikipedia.org/wiki/%D7%A8%D7%90%D7%A9%D7%95%D7%A0%D7%99_%D7%96'%D7%A8%D7%9E%D7%9F).

התוכנית אמורה לקבל שני מספרים ולהדפיס את מספרי ז'רמן בטווח

התוכנית שכתבתי עוברת קומפילציה. הערכים שהכנסתי הם 1 ו 23

כשעקבתי באמצעות הדיבאגר על ריצת התוכנית משום מה הוא נתקע לי בלולאת ה for על הערך 13.


[color=rgb(51, 51, 51)][font=lucida grande][size=13px]#include <stdio.h>
void main(){
int num1,num2,i,temp1=0,temp2=0;
printf("enter two numbers:");
scanf("%d%d",&num1,&num2);
if(num1<num2){
for(i=num1;i<=num2;i++){
temp1=2;
while(temp1<i/2){
if(i%temp1==0)
break;
else
temp1++;
if(temp1==(i/2-1)){
temp1=2;
temp2=(i*2+1);
while(temp1<temp2/2){
if(temp2%temp1==0)
break;
else
temp1++;
}
}[/color][/font][/size]
[color=rgb(51, 51, 51)][font=lucida grande][size=13px]}
if(temp1==(temp2/2-1))
printf("%d",i);
}
}
}[/color][/font][/size]

פורסם
  • מחבר

אסור לי להשתמש במערכים או בפונקציות חיצוניות.

הכל חייב להתבצע בפונקציית ה main

פורסם

א. הקוד שלך לא קריא בעליל. תשתמש בהזחות.

ב. תדאג שאחרי כל if/while/for יהיו סוגריים מסולסלים, אחרת הקוד שלך הוא מתכון לאסון.

ג. אל תשתמש ב-void main אלא ב-int main, ובסוף התוכנית שים ;return 0

ד. שים לב שכשמחלקים מספר שלם בשלם, התוצאה מעוגלת כלפי מטה.

פורסם
  • מחבר

אני משתמש בהזחות אבל משום מה גם שהשתמשתי בכפתור # בשביל לעלות את הקוד הוא ביטל לי את ההזחות. אם מישהו יודע איך אפשר לעלות עם ההזחות אני מאוד אודה לו.

אני לא מבצע חלוקה בקוד בכלל אלא משתמש בפעולת השארית בלבד.

תודה מראש לעוזרים

פורסם

ודאי שאתה משתמש בחלוקה, יש המון מקומות שבהם אתה מחלק ב-2 (אני לא טוען שזה מה שגורם לבעיה, פשוט זה משהו שצריך לשים לב אליו). באופן כללי עדיף לך להשתמש בכפל במקום בחלוקה - לדוגמה, במקום לבדוק אם x==y/2, עדיף לבדוק אם y==x*2.

בכל מקרה, אני מאוד מאוד ממליץ שתוסיף סוגריים מסולסלים איפה שאמרתי.

בלי קשר, הקוד שלך מאוד מאוד מסורבל, ולא ממש הבנתי מה הוא אמור לעשות... הרי האלגוריתם הבסיסי צריך להיות די פשוט (לכל i, לבדוק האם גם i וגם 2i+1 הם מספרים ראשוניים, וזהו). לדוגמה, אני רואה שאתה משתמש ב-temp1 בכמה לולאות מקוננות (בשני ה-whileים שמקוננים זה בתוך זה), מה שבסיכוי סביר גורם לבעיה שלך.

פורסם
  • מחבר

תיקנתי את הקוד קצת ועכשיו הוא מדפיס רק את המספר 3 כאשר הקלט שלי למספר הקטן הוא 1 ולמספר השני הוא 23.

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



[size=1]#include <stdio.h>[/size]
[size=1] void main(){[/size]
[size=1] int num1,num2,i,j,k,temp1,temp2,check1=0,check2=0;;[/size]
[size=1] printf("enter two numbers:");[/size]
[size=1] scanf("%d%d",&num1,&num2);[/size]
[size=1] if(num1<num2){[/size]
[size=1] for(i=num1;i<=num2;i++){[/size]
[size=1] temp1=2;[/size]
[size=1] while(temp1<i){[/size]
[size=1] if(i%temp1==0)[/size]
[size=1] check1=1;[/size]
[size=1] else[/size]
[size=1] temp1++;[/size]
[size=1] if(check1==0){[/size]
[size=1] temp1=2;[/size]
[size=1] temp2=(i*2+1);[/size]
[size=1] while(temp1<temp2){[/size]
[size=1] if(temp2%temp1==0)[/size]
[size=1] check2=1;[/size]
[size=1] else[/size]
[size=1] temp1++;[/size]
[size=1] }[/size]
[size=1] }[/size]
[size=1] }[/size]
[size=1] if(check2==0)[/size]
[size=1] printf("%d",i);[/size]
[size=1] } [/size]
[size=1] }[/size]
[size=1] else{[/size]
[size=1] for(j=num1;j<=num2;i++){[/size]
[size=1] temp1=2;[/size]
[size=1] while(temp1<j){[/size]
[size=1] if(j%temp1==0)[/size]
[size=1] check1=1;[/size]
[size=1] else[/size]
[size=1] temp1++;[/size]
[size=1] if(check1==0){[/size]
[size=1] temp1=2;[/size]
[size=1] temp2=(i*2+1);[/size]
[size=1] while(temp1<temp2){[/size]
[size=1] if(temp2%temp1==0)[/size]
[size=1] check2=1;[/size]
[size=1] else[/size]
[size=1] temp1++;[/size]
[size=1] }[/size]
[size=1] }[/size]
[size=1] }[/size]
[size=1] if(check2==0)[/size]
[size=1] printf("%d",j);[/size]
[size=1] } [/size]
[size=1] }[/size]


[size=1] }[/size]
[size=1]}[/size]

פורסם

הקוד שלך לא קריא...

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

הבעיה היא (לדעתי) שהאלגוריתם שלך הרבה יותר מורכב ממה שהוא צריך להיות. נסה לתאר את האלגוריתם שלך במילים (כמו שעשיתי בהודעה הקודמת שלי).

פורסם
  • מחבר

תודה על העזרה, הבעיה הייתה ששכחתי לאפס את אחד המשתנים בכניסה ללולאה(check)

ארכיון

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

דיונים חדשים