עבור לתוכן

עזרה עם JAVA למתחילים

Featured Replies

פורסם

אני צריך לצור תוכנית פשוטה שמחשבת אינטגרל של

sinx+cosx

בעזרת Riemann Sums

פעם אחת בשימוש FOR ופעם אחת בשימוש WHILE

אני התחלתי לכתוב משהו אבל לא יודע איך לקשר לפה לולאה...

מקווה שתוכלו לעזור לי

פורסם

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

פורסם
  • מחבר

כתבתי את זה אבל משום מה לא יוצא לי נכון

public static void main(String[] args) {
double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[1]);
double s = 0; // שטח מלבן
double sum = 0; // סכום השטחים של המלבנים
double dx = 1e-6; // מרווח בין מלבן למלבן
double y = 0; // נקודה על ציר Y


if (a>b)
for(double xp = b; xp <= a; xp = xp+dx) // XP זה התקדמות של האיקס
y = (Math.sin(xp))+(Math.cos(xp));
s = dx*y;
sum = sum+s;

if(a<b)
for(double xp = a; xp <= b; xp = xp+dx)
y = (Math.sin(xp))+(Math.cos(xp));
s = dx*y;
sum = sum+s;

System.out.println("the S is: " +sum);

פורסם

שים לב שאתה לא שם סוגריים מסולסלים לאחר הלולאות שלך ולאחר ה - if כך ש - s = dx*y sum = sum+s; מתבצעים בכל מקרה אפילו עם A קטן מ B

אותו דבר בלולאה השנייה ,

חוץ מזה - 1E-6 - אתה מתכוון ל e = 2.71 ? כי אם כך אז המרווח יוצא מס' שלילי

פורסם
  • מחבר

וואלה לא שמתי לב

סוגריים

1e-6

עם אני לא טועה זה 10 בחזקת מינוס 6

תודה

פורסם

אין לי מושג מה אתה מנסה לגלות ככה שאני לא ממש יודע איך לעזור לך לכתוב את הקוד כדי שהוא יפתור את הבעיה, אבל יש לי כמה הערות (נראה לי) שאולי יעזרו לך?

מה אתה עושה ב2 השורות הראשונות? מה זה a ו b ?

למה אתה עושה לולאות if ליחס בין a ו b אם הם לא משתנים בין כה וכה בכל הקוד?

ובלולאות פור, איך xp=b וגם xp=משהו אחר? לא ממש הבנתי מה אתה רוצה לפתור אבל בתור התחלה (גם אני מתחיל אז אם אני טועה תקנו אותי):

double a = Double.parseDouble(args[0]);

אתה רוצה להפוך את הדבל לאינט? אבל הוא כבר מוגדר כדבל, לא הבנתי

אני אנסה לכתוב את הקוד רגיל כשa=0 וb=1 ואז תשנה מה שרצית לשנות

הקוד עובר קומפילציה, אבל הוא בחיים לא יעבור הרצה כי בפור הראשון (וגם בשני, פשוט לשני הוא בחיים לא יגיע כי a וb לא משתנים כל הלולאה)

xp=b=1? תמיד יהיה גדול מa (שמוגדר כ0 ולא משתנה בכל הקוד שלך)

public class aa
{
public static void main(String[] args) {
double a = 0;
double b = 1;
double s = 0; // שטח מלבן
double sum = 0; // סכום השטחים של המלבנים
double dx = 1e-6; // מרווח בין מלבן למלבן
double y = 0; // נקודה על ציר Y
{

if (a<b)
{
for( double xp = b; xp <= a; xp = xp+dx) // XP זה התקדמות של האיקס
y = (Math.sin(xp))+(Math.cos(xp));
s = dx*y;
sum = sum+s;
// xp is the same all the way הלולאה בחיים לא תסתיים
if(a>b)
for(double xp = a; xp <= b; xp = xp+dx)
y = (Math.sin(xp))+(Math.cos(xp));
s = dx*y;
sum = sum+s;

System.out.println("the S is: " +sum);
}
}
}
}

פורסם
  • מחבר

double a = Double.parseDouble(args[0]);
double b = Double.parseDouble(args[1]);

ככה קולטים תוים מהמשתמש ולא כמו שחשבת שזה מגדיר את A בתור 0 ואת B בתור 1

אוקי

אז ככה

אני רוצה לחש סכום של אינגרל של

sin(x) +cos(x)

a ו- b זה התחום של האינטגרל שזה משתמש מכניס לפי רצונו 0 1 או 4 5 וכו'

מה שאני רוצה לעשות זה לחשב את כל השטחים ולחבר אותם ביחד לפי נקודה X ו- Y

זה יוצר מרובעים שהרוחב שלהם תמיד 1e-6 והגובה נקבע לפי ה-Y

ו- y יהיה תוצאה של הפונקציה כשמכניסים את הX

לכן בשביל למצוא את האיקס הבא שמתחת לגרף הפונקציה צריך לחבר לנק' ההתחלה את ה1e-6 וככה זה מתקדם כל פעם באותו מרווח - 1e-6

עד שזה מגיע לתחום השני שהוגדר לו בהתחלה(a או b(

וככה עושים סכום של אינטגרל לפי שיטה של ריימן

לא?<

פורסם

עדיין לא הבנתי מה אתה מנסה לעשות מתמטית כי אתה לא מסביר באופן מדויק או שסתם מאוחר לי, אתה רוצה לתת למשתמש אפשרות להכניס כמה מרובעים במקביל או מרובע אחד? מה אתה רוצה לקבל מהמשתמש כי בדרך שכתבת אתה מוגבל לa ו b, ולא לאינסוף מלבנים כמו שהבנתי שאתה רוצה, בשביל אינסוף מלבנים כאלה אתה צריך בנאי ובשביל לעבוד איתם יחד אתה צריך שיטות

אם אתה רוצה רק ל a b ספציפים אז

import java.util.*;
public class blabla{
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
System.out.println("a?");
double a, b;
a=scan.nextDouble();
System.out.println("b?");
b=scan.nextDouble();
double s = 0; // שטח מלבן
double sum = 0; // סכום השטחים של המלבנים
double dx = 1e-6; // מרווח בין מלבן למלבן
double y = 0; // נקודה על ציר Y
{

if (a<b)
{
for( double xp = b; xp <= a; xp = xp+dx) // XP זה התקדמות של האיקס
{
y = (Math.sin(xp))+(Math.cos(xp));
s = dx*y;
sum = sum+s;
// xp is the same all the way הלולאה בחיים לא תסתיים
}
}
else if(a>b)
{
for(double xp = a; xp <= b; xp = xp+dx)
{
y = (Math.sin(xp))+(Math.cos(xp));
s = dx*y;
sum = sum+s;
}
}//else if
System.out.println("the S is: " +sum);
}
}
}
}

ועם בנאי זה נראה אחרת

import java.util.*;
public class blabla{
private double a, b;
blabla(double x, double y)
{
a=x; b=y;}
public double getSomething()
{
b=scan.nextDouble();
double s = 0; // שטח מלבן
double sum = 0; // סכום השטחים של המלבנים
double dx = 1e-6; // מרווח בין מלבן למלבן
double y = 0; // נקודה על ציר Y
{

if (a<b)
{
for( double xp = b; xp <= a; xp = xp+dx) // XP זה התקדמות של האיקס
{
y = (Math.sin(xp))+(Math.cos(xp));
s = dx*y;
sum = sum+s;
// xp is the same all the way הלולאה בחיים לא תסתיים
}}
else if(a>b)
{
for(double xp = a; xp <= b; xp = xp+dx)
{
y = (Math.sin(xp))+(Math.cos(xp));
s = dx*y;
sum = sum+s;
}
}
}

return sum;
}
}

בקיצור עדיין לא הבנתי במדויק מה אתה רוצה לעשות מבחינת הקוד, לא מהבחינה המתמטית

שאני שואל אותך מה אתה רוצה לעשות אני מתכוון

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

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

פורסם
  • מחבר

חחח לא אחי

תקשיב

אני רוצה לחשב סכום של אינטגרל לפי שיטה של ריימן

זהו

לא מספרים קבועים

רק הפונקציה קבועה

http://en.wikipedia.org/wiki/Riemann_sum

ארכיון

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

דיונים חדשים