פורסם 2006 ביוני 919 שנים זה הסקריפט (כן, אני יודע שזה לא יפתור משוואה שבה -b+4ac יהיה שלילי זה פשוט מסובך ואין לי ממש מושג איך לעשות את זה.) // 4.cpp : Defines the entry point for the console application.//#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){ return 0;}#include <stdio.h>#include <math.h>int main(){ int a, b, c; int delta; printf("please enter A, B, C: "); scanf("%d%d%d", &a, &b, &c); if (a == 0 && b == 0 && c != 0) { printf("there is no solution!\n"); return 0; } else if (a == 0 && b == 0 && c == 0) { printf("infinite number of solutions\n"); return 0; } else if( a == 0) { printf("x = %.2lf\n", (double) -c / b); return 0; } delta = b*b - 4*a*c; if(delta > 0) { printf("x1 = %.2lf\n", (-b + sqrt(delta))/(2*a)); printf("x2 = %.2lf\n", (-b - sqrt(delta))/(2*a)); return 0; } else if(delta == 0) { printf("x = %.2lf\n", (double) -b/(2*a)); return 0; } return 0;} יש בעייה בפקודה scanf ואין לי מושג למה. warning C4996: 'scanf' was declared deprecated ויש גם בעייה ב sqrt וגם אין לי מושג למה. הרי כללתי את math.h זה אמור לעבוד לא? error C2668: 'sqrt' : ambiguous call to overloaded function בבקשה תעזרו... זה יעזור לי בשיעורי בית :lol: תודה!
פורסם 2006 ביוני 919 שנים קודם תוריד את זה:// 4.cpp : Defines the entry point for the console application.//#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){ return 0;}מה הבעיה לבדוק את b^2-4ac קטן מ- 0? זה IF פשוט(בתוכנית שלך אתה פשוט צריך להוסיף else ב- IF האחרון.הערה אחרונה: אתה לא צריך לרשום return 0 בכל תנאי. עדיף להשתמש בהרבה ELSEים והרבה IFים במקום(קוד יותר יפה).
פורסם 2006 ביוני 919 שנים מחבר זאת בעייה בגלל שb^2-4ac נמצא בשורש... ושורש של מספר שלילי זה מסובך... בכל מקרה, אתה יודע מה הטעויות בקוד?
פורסם 2006 ביוני 919 שנים שורש של מספר שלילי מוגדר רק במספרים הקומפלקסים, לא בממשיים. לכן, אם זה קטן מ- 0 אתה יכול לטעון שאיין פתרון ממשי למשוואה(אך בטוח קיימים 2 פתרונות קומפלקסיים).ניסית לבצע את השינויים שאמרתי?
פורסם 2006 ביוני 1019 שנים מחבר אני יודע שאלו לא פיתרונות במיספרים ממשיים, לכן אני לא כולל אותם... נראה לי שאני אוסיף איזה שורה שאם זה קטן מ-0 אז לכתוב שאין פיתרון ממשי או משהו כזה. לא בדיוק הבנתי איזה שינויים לעשות? אני כותב reaturn בכל תנאי כי אני רוצה שאחרי פתירת המשוואה זה למעשה יסגור את התוכנה. אבל לא הבנתי מה לעשות בקשר לIf ו else? תודה רבה!
פורסם 2006 ביוני 1019 שנים תגיד, למה אתה עובד עם מספרים שלמים?נראה לי ש- sqrt נותן לך הודעת שגיאה כי הוא לא יודע אם להמיר את הפרמטר שאתה מעביר לו ל- float או ל- double.scanf היא deprecated בקומפיילר של VC2005, כי היא "לא בטוחה" לשימוש (בהיבטי buffer overflow)במקרה שלך אתה יכול להתעלם מההודעה (כי אתה לא קורא לתוך buffer).אם אתה ממש רוצה, אז יש גרסא של הפונקציה שהיא כן בטוחה, אבל לא תתקמפל לך על רוב הקומפיילרים האחרים.עוד דבר - אם השתמשת ב- wizard של VC כדי ליצור את הקובץ, אז הפונקציה הראשית שלך צריכה להיות זו שהוא יצר בשבילךint _tmain(int argc, _TCHAR* argv[])ולא int main()
פורסם 2006 ביוני 1019 שנים מחבר תודה! שניתי את הפרמטרים a, b ,c ו- delta לdouble. עכשיו אני מקבל רק את ההודעה על scanf ועל sqrt וה-build log מראה שזה לא הצליח :bash: אין לי מושג למה?!!! בבקשה תעזרו לי... אין לי מושג למה זה לא עובד... עריכה: הנה הסקריפט: // 4.cpp : Defines the entry point for the console application.//#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){ double a, b, c; double delta; printf("please enter A, B, C: "); scanf("%d%d%d", &a, &b, &c); if (a == 0 && b == 0 && c != 0) { printf("there is no solution!\n"); return 0; } else if (a == 0 && b == 0 && c == 0) { printf("infinite number of solutions\n"); return 0; } else if( a == 0) { printf("x = %.2lf\n", (double) -c / b); return 0; } delta = b*b - 4*a*c; if(delta > 0) { printf("x1 = %.2lf\n", (-b + sqrt(delta))/(2*a)); printf("x2 = %.2lf\n", (-b - sqrt(delta))/(2*a)); return 0; } else if(delta == 0) { printf("x = %.2lf\n", (double) -b/(2*a)); return 0; } return 0;}#include <stdio.h>#include <math.h> הוא אומר שכל השגיעות הן ב math.h בגלל sqrt... עריכה חדשה:!!! אני חושב שזה עובד!! הסקריפט הנכון כולל הערות: // 4.cpp : Defines the entry point for the console application.//#include "stdafx.h"int _tmain(int argc, _TCHAR* argv[]){ return 0;}#include <stdio.h>#include <math.h>int main(){ int a, b, c; int delta; printf("please enter A, B, C: "); scanf("%d%d%d", &a, &b, &c); /*are they any solution?*/ if (a == 0 && b == 0 && c != 0) { printf("there is no solution!\n"); return 0; } /*find the number of solutions*/ else if (a == 0 && b == 0 && c == 0) { printf("infinite number of solutions\n"); return 0; } /*simple equasion?*/ else if( a == 0) { printf("x = %.2lf\n", (double) -c / b); return 0; } /*find delta*/ delta = b*b - 4*a*c; /*if delta is positive there two solutions*/ if(delta > 0) { printf("x1 = %.2lf\n", (-b + sqrt((double)delta))/(2*a)); printf("x2 = %.2lf\n", (-b - sqrt((double)delta))/(2*a)); return 0; } /*if delta is 0 there is one solution*/ else if(delta == 0) { printf("x = %.2lf\n", (double) -b/(2*a)); return 0; } return 0;}
פורסם 2006 ביוני 1019 שנים יש לי רושם שכאשר יש לך פיתרון בודד ו- b לא מתחלק ב- 2a אתה תקבל תוצאה שגויה.(יכול להיות שאני טועה, אני אף פעם לא זוכר אם חילוק נעשה לפני casting)
פורסם 2006 ביוני 1019 שנים מחבר למה אתה חושב ככה? הרי זה double עוד דבר, כשאני משנה את A B ו- C ל DOUBLE זה יוצר תקלה ואין לי מושג למה... יש לך מושג מה יכול לגרום לזה? אני צריך עוד לעבוד על הסקריפט... בסה"כ התחלתי ללמוד C לפני שלושה ימים וזאת השפה הראשונה שאני לומד. casting = כינוס איברים? תודה רבה על העזרה!
פורסם 2006 ביוני 1019 שנים 1) CASTING = שינוי סוג.יש CASTINGמכוון, לדוגמא:(double)dאו לא מכוון שאתה נותן לקומפיילר להניח שהוא אמור לבצע CASTING(אתה מקבל שגיאה על זה).2) מה הבעיה שאתה מקבל?3) הפתרון הראשון ששלחת לפני 2 הודעות הוא נכון. אתה צריך רק להעביר את הINCLUDE למעלה(של הSTDIO והMATH).הפונ SQRT מוצהרת בספריה MATH. אתה חייב להצהיר עליה לפני שאתה משתמש בה.
פורסם 2006 ביוני 1019 שנים מחבר 1) תודה, שכחתי איך קוראים לזה.2) כשאני משנה את הפרמטרים A, B ו-C לdouble זה יוצר שתי הזהרות חדשות: warning LNK4067: ambiguous entry point; selected 'mainCRTStartupואת הזהרה על scanf. (שאיך שהוא הצלחתי להעלים כשהפרמטרים היו int).3) בקשר לinclude, שיניתי את זה כבר קודם, בפתרון השני...תודה רבה!
פורסם 2006 ביוני 1119 שנים ambiguous entry point אומר שכנראה יש לך שתי פונקציות main איפשהו (כנראה הפונקציה main והפונקציה _tmain) לצערי אני לא מספיק מכיר טוב את VC כדי לדעת מה בדיוק הפתרון. חוץ מזה, שני דברים: 1. אם אתה רק מתחיל ללמוד C, אל תעבוד ב-Visual. תוריד קומפיילר מבוסס דוס (כגון Borland C) ותעבוד איתו. הסיבה לכך היא ש-Visual נועד לעבוד ב-C++ תחת סביבת Windows, וזה יכול לגרום להרבה צרות (מה גם שיש לו תקן משלו, שיש הבדלים בינו לבין התקן של C). 2. לא קוראים לזה סקריפט, קוראים לזה קוד. סתם הציק לי שאתה קורא לזה סקריפט
פורסם 2006 ביוני 1119 שנים האמת ש- VC2005 הוא כבר הרבה יותר סטנדרטי מאשר Borland C (וכולל תוספות ושינויים מלפני 10 שנים בערך)Ambiguous זה בדיוק העניין שיש לך שתי פונקציות main. כמו שאמרתי קודם - תעתיק את התוכן של main לתוך tmain ותמחוק את main.הסיבה שנראה לי שאתה לא מקבל פתרון בודד נכון היא שנראה לי שה- casting קורה אחרי הפעולות האריתמטיות.תנסה לתת לו לפתור את 4x^2 - 4x +1ותראה אם יוצא נכון.
פורסם 2006 ביוני 1219 שנים מחבר ambiguous entry point אומר שכנראה יש לך שתי פונקציות main איפשהו (כנראה הפונקציה main והפונקציה _tmain) לצערי אני לא מספיק מכיר טוב את VC כדי לדעת מה בדיוק הפתרון. חוץ מזה, שני דברים: 1. אם אתה רק מתחיל ללמוד C, אל תעבוד ב-Visual. תוריד קומפיילר מבוסס דוס (כגון Borland C) ותעבוד איתו. הסיבה לכך היא ש-Visual נועד לעבוד ב-C++ תחת סביבת Windows, וזה יכול לגרום להרבה צרות (מה גם שיש לו תקן משלו, שיש הבדלים בינו לבין התקן של C). 2. לא קוראים לזה סקריפט, קוראים לזה קוד. סתם הציק לי שאתה קורא לזה סקריפט מה שמוזר ב- ambigous entry poin זה שזה קרה רק אחרי ששיניתי את A, B, C ו- delta לדאבל במקום int. אבל זה בסדר עכשיו... 1) הרבה יותר נוח לי לעבוד ב-VC... לא יודע, אולי אני יעבור לבורלנד. 2) :-X תודה! אני ינסה את 4x^2 - 4x +1... תודה! עכשיו יש רק בעייה אחת. שיניתי את הפרמטרים לדאבל אבל יש רק אזהרה על scanf. אין לי מושג למה זה עושה את זה... זה נעלם כאשר הפרמטרים הם int. חוץ מהאזהרה הזו אין שום בעיות אז אני אשמח אם למישהו יש רעיון ;D תודה רבה!!
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.