roi_mal פורסם 2014 בנובמבר 14 Share פורסם 2014 בנובמבר 14 #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include <math.h>#include<stdlib.h>#include<conio.h>#define N 4מבנה מסוג קומפtypedef struct comp{ float x, y;}comp;הכרזה על פונקציותfloat CRadius(Complex);void Error_Msg(char* str);void InputAndWriteToFile(FILE *f);int CheckFile(FILE *f, float m);מיין :int main(){ FILE *f; if(!(f=fopen("complex_number.txt", "w+"))) Error_Msg("The output file is worng"); InputAndWriteToFile(f); printf("\nThere are %d big numbers\n", CheckFile(f, 4)); fclose(f); _getch(); return 0;}פונקציה להודעת שגיאה (לא מגיע אליה בקוד עובד נבדק)void Error_Msg(char* str){ puts(str); _getch(); exit(1);}פונקציה המחשבת רדיוס באמצעות נוסחת הדיסטנס איקסת וואי ונקודה.(אין בעיה איתה עובדת נבדק)float CRadius(comp *m){ return (sqrt(pow(m->x, 2) + pow(m->y, 2)));}פונקציה המדפיסה ערכים לתוך הקובץ (הפעולה הצליחה ואכן יש לי קובץ עם הערכים המיועדים בתוכוvoid InputAndWriteToFile(FILE *f){ int i; comp z[N]; printf("enter %d complex numbers : ", N); for (i = 0; i < N; i++) scanf("%f%f", &z.x, &z.y); for (i = 0; i < N; i++) fprintf(f,"%.1f %.1f %.1f\n", z.x, z.y, CRadius(z+i));} הפונקציה עמה יש לי בעיה : אמרוה לקלוט מתוך הקובץ איקס ת וואי ורדיוס בפועל לא קולטת רדיוס והוא נשאר על ערך האתחול שלו : 0 תלא מובן לי מדוע אינו מקבל ערכים במהלך הלולאה וכל הזמן נשאר עם הערך 0 על אף שבקובץ יש ערכים ברדיוסm=4f - מצביע לתחילת הקובץעלי לבדוק כמה פעמים הערך של הרדיוס (ערך המתקבל לאחר דיסטנס איקס וואי) גדול מ4 מתבצע ע"י cnt.int CheckFile(FILE *f, float m) { comp z[N]; int i = 0, cnt = 0; float rad = 0; for (i = 0; i<N; i++) { fscanf(f,"%f%f%f",&z.x,&z.y,&rad);// לא נקלט לי ערכים לתוך רדיוס,רדיוס נשאר 0 ואף פעם לא קטן מ m. if (rad>m)cnt++;//לכן cnt נשאר 0 } return cnt; }הבעיה : נוצר קובץ , אולם בפונקציה האחרונה זאת שבבולד הfscanf : אמורה לקלוט לתוך rad משתנים דבר אשר לא מתבצע וrad נשאר 0 לאורך כל ההרצה .תודה מראש לעונים. קישור לתוכן שתף באתרים אחרים More sharing options...
needacomp פורסם 2014 בנובמבר 14 Share פורסם 2014 בנובמבר 14 תתחיך בלערוך את ההודעה ולהוסיף תגדים של CODE סביב הקוד כדי שנוכל לקרוא אותו. קישור לתוכן שתף באתרים אחרים More sharing options...
Noririco פורסם 2014 בנובמבר 15 Share פורסם 2014 בנובמבר 15 אני חושב שN שלך לא טוב כי אתה צריך להעביר גודל בנפרד למערך .... לא בטוח לגבי זה קישור לתוכן שתף באתרים אחרים More sharing options...
roi_mal פורסם 2014 בנובמבר 15 מחבר Share פורסם 2014 בנובמבר 15 אוקיי אבל הוא משתנה גלובאלי בתוכנית,אני חושב שזה תקין לפעול כך,זה על אותו משקל של להגדיר מערך בגודל 4 קישור לתוכן שתף באתרים אחרים More sharing options...
needacomp פורסם 2014 בנובמבר 15 Share פורסם 2014 בנובמבר 15 #define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include <math.h>#include<stdlib.h>#include<conio.h>#define N 4typedef struct comp{float x, y;}comp;float CRadius(Complex);void Error_Msg(char* str);void InputAndWriteToFile(FILE *f);int CheckFile(FILE *f, float m);int main(){FILE *f;if(!(f=fopen("complex_number.txt", "w+")))Error_Msg("The output file is worng");InputAndWriteToFile(f);printf("\nThere are %d big numbers\n", CheckFile(f, 4));fclose(f);_getch();return 0;}void Error_Msg(char* str){puts(str);_getch();exit(1);}float CRadius(comp *m){return (sqrt(pow(m->x, 2) + pow(m->y, 2)));}void InputAndWriteToFile(FILE *f){int i;comp z[N];printf("enter %d complex numbers : ", N);for (i = 0; i < N; i++)scanf("%f%f", &z[i].x, &z[i].y);for (i = 0; i < N; i++)fprintf(f,"%.1f %.1f %.1f\n", z[i].x, z[i].y, CRadius(z+i));}int CheckFile(FILE *f, float m) {comp z[N];int i = 0, cnt = 0;float rad = 0;for (i = 0; i<N; i++){fscanf(f,"%f%f%f",&z[i].x,&z[i].y,&rad);if (rad>m)cnt++;}return cnt;}- - - תגובה אוחדה: - - -איך נראה הקובץ שאתה קולט ? קישור לתוכן שתף באתרים אחרים More sharing options...
yshekel פורסם 2014 בנובמבר 21 Share פורסם 2014 בנובמבר 21 אתה צריך לעשות rewind(f) לפני שאתה קורא כדי להזיז את הסמן להתחלה. אחרת אתה מנסה לקרוא אחרי איפה שסיימת לכתוב. קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.