עבור לתוכן

שאלה בC

Featured Replies

פורסם

שאני רושם :

while (something)
{
***
}

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

פורסם

לעשות את זה רק עם משתנה אחד? ???

משימה מוזרה, בהחלט.....

פורסם

תראה, סביר להניח שלא תכניס מספרים גדולים מידי, ולכן אתה יכול לפצל את המשתנה שלך ל- 2.

יש דבר כזה שנקרא(לא זוכר איך קוראים לו) והוא מתייחס לסדר הקריאה של משתנים בתוך פקודת. משהו שלא מוגדר. למשל, אם אתה מבצע n=n++;.

תנסה לנצל את זה(אני ממש לא זוכר את השם של זה).

פורסם

תראה, סביר להניח שלא תכניס מספרים גדולים מידי, ולכן אתה יכול לפצל את המשתנה שלך ל- 2.

יש דבר כזה שנקרא(לא זוכר איך קוראים לו) והוא מתייחס לסדר הקריאה של משתנים בתוך פקודת. משהו שלא מוגדר. למשל, אם אתה מבצע n=n++;.

תנסה לנצל את זה(אני ממש לא זוכר את השם של זה).

אתה מתכוון ל-parameter evalutation order. -ב-C/C++ סדר הפרמטרים שמועברים לפונקציה אינו מוגדר, ולכן הקוד הבא:

n = 1;
func( n, ++n);

יכול לגרום ל-func להקרא עם 1,2 או עם 2,2.

בשום אופן לא להשתמש או לסמוך על זה!

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

אבל נראה לי שמטרת השאלה היא למצוא אלגוריתם "מגניב" שיפתור את הבעיה תוך שימוש במשתנה אחד בלבד. אני חייב להודות שעל פניו אני לא רואה דרך לעשות את זה. נחשוב ונראה, אם נעלה על משהו אפרסם.

פורסם
  • מחבר

לא ! זה בכלל לא לרמה שלכם (רמה נמוכה מה שאני שואל!)

הנה דוגמא :

קלוט סדרת מספרים עד לקליטת 2-. יש לבדוק האם כל המספרים שנקלטו מסודרים בסדר עולה ולהדפיס הודעה מתאימה.

פורסם

הממ, ניסית:

int n, last;
bool ascending = true;
scanf("%d", &last);
scanf("%d", &n);
while (n != -2) {
ascending = ascending && (n > last);
last = n;
scanf("%d", &n);
}

printf(ascending);

פורסם

יש כאן 3 משתנים. הוא צריך 1 בלבד.

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

פורסם
  • מחבר

חחח אולי לא הבנתם , משתנה אחד בשביל קליטת מספרים בWHILE .

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

פורסם

בדקתי הפעם האם זה הפוך או לא או לא שניהם. :) מצטער מראש אם יש שגיאות ניסוח בהודעות הפלט:

#include <iostream.h>
#include <stdlib.h>

int is_sorted (int num [], int n){
for(int i=0;i<n-1;i++)
if(num[i]>num[i+1])
return 0;

return 1;
}

int is_reverse_sorted (int num [], int n){
for(int i=0;i<n-1;i++)
if(num[i]<num[i+1])
return 0;

return 1;
}

int main(){
int *num = NULL;
int i=0;

do{
num = (int*)realloc(num, sizeof(int)*(i+1));
cout<<"Please enter num."<<endl;
cin>>num[i];
}while(num[i++]!=-2);

if(is_sorted(num, i))
cout<<"The values were sorted."<<endl;

else{
if(is_reverse_sorted(num, i))
cout<<"The values were reverse sorted."<<endl;

else
cout<<"The values weren't sorted and reverse sorted."<<endl;
}

free(num);

cout<<endl;

return 0;
}

פורסם

גם מערך, גם הקצאה מחדש, לא חבל?

הפתרון של שניצל הוא נחמד...ד.א. אין BOOL ב- C.

פורסם

עולם גדול ומבלבל...

ארכיון

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

דיונים חדשים