שפת C

shirazeitan

New member
שפת C

היי קיבלתי תרגיל
כתבו תכנית המבקשת וקולטת 3 מספרים שאמורים להיות שווים.
ידוע שעקב טעות אחד המספרים גדול ב 1 משאר המספרים – אבל לא ידוע איזה מהם.
התכנית צריכה למצוא ולהדפיס באיזה מקום נמצא המספר המוטעה.
אין להשתמש בפקודות תנאי מכל סוג שהוא (כולל אופרטור טרינארי ולולאות) או במערך.
דוגמאות הרצה (על נתונים שונים):
כתבתי קוד שנראה לי הכי מתאים למה שצריך. יצאתי מנקודת הנחה שכשנתון הוא אמת המחשב מחזיר 1 וכשזה שקר הוא מחזיר 0 .
משום מה בהרצה זה מציג את המיקום של המס כ 0 אין לי מושג למה . ולא יודעת אם הקוד אכן מתאים לתרגיל. אשמח לעזרה
קוד:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <math.h>
int main(){
	float a, b, c;
	double x;
	printf("please insert tree numbers:");
	scanf_s("%f%f%f", &a, &b, &c);
	printf("the wrong number is on place %lf", ((a > b) * 1) + ((b > a) * 2) + ((c > b) * 3));
	getch();
	return 0;
}
 

BravoMan

Active member
יש לך כמה הנחות שגויות:

1. המחשב לא חייב להחזיר 1 במקרה של "אמת".
מבחינת שפת C, כל דבר שאינו 0 הוא "אמת", כולל מספרים שליליים.
&nbsp
2. השתמשת בתנאים - אופרטורים בוליאניים. אני די בטוח שזה לא מה שרצו בתרגיל.
&nbsp
3. למה את משתמשת ב-float?
זה רק הופך את החישוב לבעייתי יותר (ענייני עיגול שבטח עוד לא למדתם), וכנראה גם לא מה שדרשו בתרגיל.
&nbsp
לפי משתנה x המיותר, אני מנחש שאת משתמשת מחדש בחלקי קוד שהשתמשת בהם בתרגילים ישנים.
אל תעשי את זה! זה מזיק, ובסוף יורידו לך ציון על דברים מיותרים בקוד.
 
אתה טועה לגבי 1

אמנם אם שמים מספר במקום של תנאי (לולאה, if וכיו"ב), שפת c מתיחסת ל-0 כ"לא" ולכל שאר הערכים כ"כן", אך תוצאה של השוואה (וכן פעולות לוגיות) היא תמיד 0 או 1.

לשואלת המקורית: טבעי לכתוב c-a+2
 
למעלה