שבת שלום -אני זקוק לעזרה במילוי מטריצה - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


yehouda75

Recommended Posts

בוקר טוב

ברצוני לדעת עם איזה משתנה להגדיר את המטריצה הנל : האם מסוג INT או FLOAT והאם צריך להכניס את הנתונים בטבלה אחד אחד ?או יש דרך אחרת?

אשמח לדעת איך עליי להתחיל לכתוב את הקוד

תודה רבה ושבת שלום

[attachment deleted by admin]

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

אתה יכול להשתמש בפוינטרים ואז תוכל ליצור וקטור לכל עמודה ולמידע שהוא עם X.XX תגדיר float ולאחרים INT.

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

תוכל להגדיר את הכל ב-struct ואז השימוש וההוספה של פרטים תהיה מאוד מאוד פשוטה

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

אתה יכול להשתמש בפוינטרים ואז תוכל ליצור וקטור לכל עמודה ולמידע שהוא עם X.XX תגדיר float ולאחרים INT.

וככה להפוך את התכנית שלך למסובכת, לא קריאה, ו-bug prone.

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

איזו סיבה יש לעשות את זה? אתה חושש שבמקרה תעבור את הגבול של 2 בחזקת 30? גם זה סתם יכול ליצור בעיות.

תוכל להגדיר את הכל ב-struct ואז השימוש וההוספה של פרטים תהיה מאוד מאוד פשוטה

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

אל תשתמש ב-int בכלל, אלא רק במערך של float (אגב, מומלץ גם לא להשתמש ב-float אלא רק ב-double). כל int ניתן לייצוג ע"י double, אבל לא להיפך.

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

לא למדתי מבנה עדיין רק מערך דו ממדי ורגיל.

תוכ לרשום איך הסינטק של הפקודה בבקשה?

באיזה שפה התרגיל? נניח שהתרגיל ב-C.


enum { NUM_OF_DAYS = 10 };
enum
{
RAIN_AMOUNT = 0,
MIN_TEMP,
MAX_TEMP,
AIR_POLLUTION,

NUM_OF_COLUMNS
};


double rain_data[NUM_OF_DAYS][NUM_OF_COLUMNS];

int main()
{
int day, int column;

for (day = 0 ; day < NUM_OF_DAYS; day++)
{
for (column= 0 ; column < NUM_OF_COLUMNS ; column++)
{
/* read data here, do range check depending on which column you are reading */
}
}

return 0;
}

הערה: אפשר גם לעשות לולאת for אחת (על הימים) ולקלוט את נתוני כל יום בפקודת scanf אחת.

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

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

תודה על העזרה

לגבי מלוי המטריצה היות וזה גודל 5*10 אני צריך למלא את הנתונים באופן ידני כלומר רק את הנתוני הממשים שיש לי אמת ?

[br]פורסם בתאריך: 23.03.2009 בשעה 00:37:40


הי מה הכוונה לENUM שרשמת ?
קישור לתוכן
שתף באתרים אחרים

תודה על העזרה -אני זקוק להדרכה נוספת,

אני צריך לבדוק בתכנית הנל אם הנתון הגיוני :

כמות הגשם אינה עולה על 100 ואינה שלילת...

מה היום החם ביותר ?

לאחר שבניתי את המטריצה מה השלב הבא שצריך לעשות?

איך תתבצע שליפת הנתונים?

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

אתה יודע איך להכניס מספר למערך? אז אתה גם יודע איך לקרוא מספר ממערך. איפה אתה מתקשה?


float rain = data[RAIN_AMOUNT];

if (rain > 100.0f || rain < 0.0f)
printf("error!\n");

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

  • 3 שבועות מאוחר יותר...
  • 2 שבועות מאוחר יותר...

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

=============================================================



#include <stdio.h>
#include <stdlib.h>

void main ()
{
float mat[10][4];
int i,j;
float geshem,minTemp;
float maxTemp,air;


for (i =0;i<10;i++)
{

printf("Enter Kamut Geshem, min temp, max temp, zihum avir:\n");
scanf("%f %f %f %f",&geshem,&minTemp,&maxtemp,&air);


while(geshem<0 || geshem>100);
mat[i][j]=(float)geshem;
j++;
mat[i][j]=(i+1);
{
printf("Bad Value");
break;
}

if(minTemp<-10 || minTemp>50 || maxTemp<-10 || maxTemp>50)
{
printf("Bad Value.....");
break;
}

if(minTemp>maxTemp)
{
printf("wrong : mintemp cant be higher then max temp");
break;
}

if(air<0 || air>10)
{
printf("Bad Value");
break;
}
printf("\n");
printf("%.1f\t",mat[i][0]= geshem);
printf("%f\t",mat[i][1]=minTemp);
printf("%f\t",mat[i][2]=maxTemp);
printf("%f\t",mat[i][3]=air);

}
}

return 0;
}
[code]

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

אתה מצפה שננחש מהן השגיאות?

בכל מקרה, לא מצאתי שום שגיאות קומפילציה, אבל כמה דברים:

א. אתה לא מאתחל את j בשום מקום.

ב. השורה הזו:

while(geshem<0 || geshem>100);

היא לולאה ריקה (בשביל שיהיה בה תוכן, אתה צריך להעיף את ה-; ולשים סוגריים מסולסלים סביב הקוד של הלולאה, כמו ב-for).

ג. מה בדיוק עשית כאן?

	{
printf("Bad Value");
break;
}

אין שם שום if, הקוד הזה תמיד ירוץ.

ד. ההמרה בשורה הזו מיותרת (שני הטיפוסים הם כבר float):

mat[i][j]=(float)geshem;

ה. מה המטרה של השורה הזו?

mat[i][j]=(i+1);

ו. אתה לא יכול לעשות בתכנית שלך void main ואח"כ לעשות return 0. אתה צריך int main במקום.

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

ארכיון

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

×
  • צור חדש...