7 BOOM

brokenn

New member
7 BOOM

שלום לכולם
בניתי תוכנית למשחק 7 BOOM.התוכנית רצה,אך העניין הוא שבכל פעם מופיעים כמה BOOM רצופים יש בניהם מרווח:
BOOM

BOOM

BOOM
וכו'
אני צריכה לבטל את המרווחים האלה,איך אני עושה את זה??
תודה:)

#include <stdio.h>
#include <conio.h>
#include <math.h>

int main(){
int n,j,w;
printf("insert a number within [1,1100]:");
scanf_s("%d",&n);
if(n==0){
printf("good bye!!");
_getch();
return(0);}

while(n)
{
if(0>n||n>1110)printf("illegal number,please insert a number within [1,1100]:");

else
{
w=(1>n-5)?1:n-5;
for(j=w;j<=n+10;j++)
{
if(j==7||j%10 == 7 || (j/10)%10 == 7 || (j/100)%10==7)
{
printf("boom\n");
}
else {

printf("%d ",j);

}

}
}
printf("\n");
printf("insert numbers [1, 1100]:");
scanf("%d",&n);
}
}
 

brokenn

New member
נקודה חשובה ששכחתי

הפלא אמור להראות ככה לדוגמא:
692
boom
694 695 696
boom
698 699
boom
boom
boom
וכו
 

ihovav

New member
דוג' בJAVA

public static void main(String[] args) {
int num = 101;
boolean lastPrintBoom = true;
for (int i = 1; i <= num; i++) {
if (i % 7 == 0 || (i % 10) == 7) {
if(!lastPrintBoom){
System.out.print("\n");
}
System.out.print("boom\n");
lastPrintBoom = true;
} else {
System.out.print(i + " ");
lastPrintBoom = false;
}
}
System.out.println();
}
 

brokenn

New member
התוכנה שלי היא בשפת C++

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

ihovav

New member
שמתי לב...

וגם התכנית שלי לא שלמה...
מה שבאתי להראות זה איך לטפל בבעיה שהצגת ואת זה לא קשה להבין - ה SYNTAX של JACA ו CPP דומה מאוד
 

galh

New member
איזה מספר את מכניסה כשזה קורה?

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

brokenn

New member
התוכנית עובדת נכון

היא מדפיסה BOOM כשצריך,העניין הוא רק בפלט הסופי:רווחים וכו'
לדוגמא עבור:697 הפלט הוא:
692 693 694 695 696 boom
698 699 boom
Boom
Boom
Boom
.. ..
….
עבור 702:
boom
698 699 boom
boom

זאת ההוראה של התרגיל:
כתבו תכנית המתבצעת בלולאה אינסופית.
יש לבקש ולקבל מספר x בתחום [1, 1100].
אם x==0, התוכנית מסתיימת.
אם x אינו בתחום הנדרש – יש להדפיס הודעת טעות ולבצע שוב את הלולאה.
אם x חוקי, יש להדפיס את כל המספרים החל ב x-5 , או 1 (הגדול מביניהם)
ועד x+10 (כולל), כאשר עבור כל מספר בתחום המתחלק ב 7,
או מכיל את הספרה 7, יש להדפיס boom בשורה נפרדת,
אחרת, כלומר מספר ללא 7 ולא מתחלק ב7,
יש להדפיס את המספר ולאחריו רווח.
 

עדין ר

New member
התכנית לא מדפיסה boom

עבור מספר שמתחלק ב-7 (אלא אם הוא מכיל את הספרה 7).

לגבי השורה הנפרדת, את יכולה להוסיף משתנה שישמור אם עבור המספר הקודם הודפס boom. במידה ולא ועבור המספר הנוכחי צריך להדפיס boom, הדפיסי תו של שורה חדשה לפני ה-boom (כדי שהוא יהיה בשורה נפרדת).
 

אiהד

New member
שני דברים

א)התוכנית לא מדפיסה boom למספרים שמתחלקים ב7, רק לאלו שמכילים את הספרה 7
ב)הדרך היחידה שאני רואה זה להוסיף דגל שיאמר לתכנית אם המספר הקודם היה boom
ואז התוכנית תראה ככה:

#include <stdio.h>
#include <math.h>
#define BOOM 7
#define MAX(A,B) ((A)>(B)?(A):(B))
int main(){
while(1){
int n,i,f=0;
printf("insert a number within [1,1100]:");
scanf("%d",&n);
while(n<0 || n>1100){
printf("wrong number! insert a number within [1,1100]:");
scanf("%d",&n);
}
if(n==0)
break;
for(i=MAX(n-5,1);i<n+10;i++)
if(isBoom(i)){
printf((f?"\n":""));
printf("boom\n");
f=0;
}
else{
printf("%d ",i);
f=1;
}
printf((f?"\n":""));
}
}
int isBoom(int n){
if(n%BOOM==0)
return 1;
while(n>0)
if(n%10==BOOM)
return 1;
else
n=n/10;
return 0;
}
 

brokenn

New member
הייי כמה שאלות לגבי הקוד שלך

אני חדשה בתחום ויש כמה דברים שלא מובנים לי,אשמח לקבל הסבר:


#include <stdio.h>
#include <math.h>
#define BOOM 7 למה הגדרת מלכתחילה את 7 BOOM?
#define MAX(A,B) ((A)>(B)?(A):(B))
int main(){
while(1){
int n,i,f=0;
printf("insert a number within [1,1100]:");
scanf("%d",&n);
while(n<0 || n>1100){
printf("wrong number! insert a number within [1,1100]:");
scanf("%d",&n);
}
if(n==0)
break;
for(i=MAX(n-5,1);i<n+10;i++)
if(isBoom(i)){ בחלק הזה עד סוף הבלוק אני לא מבינה כל כך את הצורת רישום כמו למשל if(isBoom(i)){ printf((f?"\n":""));
printf((f?"\n":""));
printf("boom\n");
f=0; למה הערך של F כל הזמן משתנה?מה התפקיד שלו בקוד?
}
else{
printf("%d ",i);
f=1;
}
printf((f?"\n":""));
}
}
int isBoom(int n){
if(n%BOOM==0)
return 1;
while(n>0)
if(n%10==BOOM)
return 1;
else
n=n/10;
return 0;
}


תודה רבה:)
 

אiהד

New member
היי כמה תשובות לגבי הקוד שלי

הגדרת BOOM כ7נועדה לצורך גמישות - כדי שאם נרצה לשחק 6 בום נוכל לשנות רק את הערך של BOOM ולא נצטרך לחפש אותו בכל הקוד

אמרת שלמדת פונקציות - אז אני מניח שאת מבינה ש

if(isBoom(i)

הוא תנאי שמתקיים אם הפונקציה isBoom מחזירה 1 על i

f הוא דגל - אם f שווה 1 זה אומר שהאחרון היה מספר אם f שווה 0 אז האחרון היה boom


(f?"\n":"")

ביטוי מותנה - זה אומר שאם f מתקיים תרד שורה אחרת תדפיס "" (אל תדפיס כלום)

הייתי צריך לתת למשתנים שמות נורמליים ואז אולי היית מבינה יותר בקלות, עצלות שלי
 

brokenn

New member
תודה רבה!!שאלה נוספת:)

יש לי תרגיל שקצת הסתבכתי בו:
ההוראה של התרגיל היא:לבקש ולקלוט סדרה של מספרים המסתיימת באפס ולציג את ממוצעם סכומם ואת המספר השני בגודלו.
אפס לא נחשב כאחד מאיברי הקבוצה.כאשר מתקבלת קבוצת מספרים זהים כגון :2 2 2 2 0 אין מספר שני בגודלו.
הבעיה שלי היא בדיוק בקבוצת המספרים הזאת,כשאני מכניסה אותה לתוכנית הממוצע והסכום יוצאים לי אפס


מה עשיתי לא נכון:(
תודה


Cּּּּ++ המספר השני בגודלו
« בתאריך: היום בשעה 17:58:03 »

הוספת תגובה
עריכה

שלום,יש לי תרגיל שקצת הסתבכתי:
קוד: [בחר]

# include <stdio.h>
# include <conio.h>
void main()
{
int num,max=0,max2=0;
float avg=0,sum=0,counter=0;
printf("enter your numbers,end with 0:\n");
scanf("%d",&num);//get numbers
max=num;//put num in max
while(num!=0)//check if num not equal to zero
{
sum+=num;//add num to sum
counter++;//add one to counter
if(num>max){//check if num is biger than max
max2=max;//put max in max2
max=num;//put num in max
}
else
if(num>max2&&num!=max)//check if num is biger than max2 and num
is not equal to max
max2=num;//put num in max 2
scanf("%d",&num);
}
avg=sum/counter;//make avarge
if(max2==0)
printf("sum=%d, eve=%.2f, there is no 2nd max",sum,avg);
else
printf("sum=%.f avg=%.2f 2nd max=%d",sum,avg,max2);
getch();

}
 

אiהד

New member
פקודת ההדפסה לא טובה

printf("sum=%d, eve=%.2f, there is no 2nd max",sum,avg);

את מנסה להדפיס מספר לא שלם בתבנית של שלם וזה משגע את השפה

# include <stdio.h>
void main()
{
int num,max=0,max2=0;
float avg=0,sum=0,counter=0;
printf("enter your numbers,end with 0:\n");
scanf("%d",&num);//get numbers
max=num;//put num in max
while(num!=0)//check if num not equal to zero
{
sum+=num;//add num to sum
counter++;//add one to counter
if(num>max) //check if num is biger than max
{
max2=max;//put max in max2
max=num;//put num in max
}
else
if(num>max2&&num!=max)//check if num is biger than max2 and num is not equal to max
max2=num;//put num in max 2
scanf("%d",&num);
}
avg=sum/counter;//make avarge
if(max2==0)
printf("sum=%.f, eve=%.2f, there is no 2nd max",sum,avg);
else
printf("sum=%.f avg=%.2f 2nd max=%d",sum,avg,max2);

}
 

brokenn

New member
תודה רבה!

סוף סוף עליתי על זה..
לא מאמינה שבזבזתי יום שלם על טעות מפגרת חח
 
למעלה