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

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


pringles

Recommended Posts

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

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 = b; <= a; = xp+dx) // זה התקדמות של האיקס
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 ? כי אם כך אז המרווח יוצא מס' שלילי

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

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

מה אתה עושה ב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 = b; <= a; = xp+dx) // זה התקדמות של האיקס
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 = b; <= a; = xp+dx) // זה התקדמות של האיקס
{
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;
}
}

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

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

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

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

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

ארכיון

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

×
  • צור חדש...