الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

من جافا إلى ++C

بدأه QJK في 6 أبريل 2011 · 8 رد · 669 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

مرحباً أخواني الأعزاء

أنا عندي برنامج مكتوب لغة الجافة ... مطلوب أحوله على لغة ++C ... أنا حاول لكن عندي بعض الأخطاء ... هل ممكن أحد يساعدني

=====هذا البرنامج الأصلي========

import java.util.*;

public class Main

{

/** Creates a new instance of Main */

public Main()

{

}

/**

* @param args the command line arguments

*/

public static void main(String[] args)

{

double x = getValue();

double xSqrt = approximateSqrt( x );

System.out.printf( "\nsqrt( %1.6f ) = %1.6f\n", x, xSqrt );

}

public static double getValue()

{

double value;

Scanner input = new Scanner( System.in );

System.out.println( "Enter value (>0) whose square root will be computed: " );

value = input.nextDouble();

while ( value <= 0 )

{

System.out.print( "Invalid value " + value + " <= 0" );

System.out.println( " -- try again" );

System.out.println( "Enter value (>0): " );

value = input.nextDouble();

}

return value;

}

public static double getInitialGuess( double value )

{

return value / 2.0;

}

public static double approximateSqrt( double value )

{

final double epsilon = 0.00001;

double x = getInitialGuess( value );

System.out.printf( "sqrt( %1.6f ) = %1.6f\n", value, x );

while ( Math.abs( value - x * x ) > epsilon )

{

double tx = x;

x = 0.5 * ( x + ( value / x ) );

System.out.printf( "sqrt( %1.6f ) = 0.5 * ( %1.6f + ( %1.6f / %1.6f ) ) = %1.6f\n", value, tx, value, tx, x );

}

return x;

}

}

=====أنتهاء===============================

===== هذا محاولتي للتحويله على ++C ================

# include <iostream>

# include <stdio.h>

# include <cmath>

using namespace std;

class main {

double x = getValue();

double xSqrt = approximateSqrt( x );

printf("\nsqrt( %1.6f ) = %1.6f\n", x, xSqrt);

}

double getValue (){

double value;

cout << "Enter value (>0) whose square root will be computed: ";

cin >> value;

while ( value <= 0 ) {

cout << "Invalid value " << value << " <= 0" ;

cout << " -- try again" ;

cout << "Enter value (>0): ";

cin >> value;

}

return value;

}

double getInitialGuess( double value ){

return value / 2.0;

}

double approximateSqrt( double value )

{

const double epsilon = 0.00001;

double x = getInitialGuess( value );

printf( "sqrt( %1.6f ) = %1.6f\n", value, x );

while ( abs( value - x * x ) > epsilon )

{

double tx = x;

x = 0.5 * ( x + ( value / x ) );

printf( "sqrt( %1.6f ) = 0.5 * ( %1.6f + ( %1.6f / %1.6f ) ) = %1.6f\n", value, tx, value, tx, x );

}

return x;

}

=======انتهى=======================

الرجاء المساعدة

#2

السلام عليكم

شكراً لمحاولتك واهتمامك

هنا البرنامج من Java إلى ++C

# include <iostream>
# include <cmath>
using namespace std;

class Main {


public:
	double getValue();
	double getInitialGuess( double value );
	double approximateSqrt( double value );


};

double Main::getValue (){
double value;
double input;

cout << "Enter value (>0) whose square root will be computed: " << endl;
cin >> input;
value = input;
while ( value <= 0 )
{
cout << "Invalid value " << value << " <= 0"<<endl;
cout << " -- try again" << endl;
cout << "Enter value (>0): ";
cin >> input;
value = input;
}
return value;
}

double Main::getInitialGuess( double value ){
return value / 2.0;
}

double Main::approximateSqrt( double value )
{
  	const double EPSILON = 0.00001;
	double x = getInitialGuess( value );

	cout <<  "sqrt( " << value << " ) = " << x << endl;
	while ( abs( value - x * x ) > EPSILON )
	{
	double tx = x;
	x = 0.5 * ( x + ( value / x ) );
	cout << "sqrt( " << value << " ) = 0.5 * (" << tx << " + ("<< value << " / " << tx << " ) ) = " << x << endl;

	}
	return x;
}


int main()
{
	Main mObj;

	double x = mObj.getValue();
	double xSqrt = mObj.approximateSqrt( x );
	cout <<  "\nsqrt( " << x << " ) = " << xSqrt << endl;
	return 0;
}

وهي النتايج للبرنامج بلغة Java

Enter value (>0) whose square root will be computed:

3

sqrt( 3.000000 ) = 1.500000

sqrt( 3.000000 ) = 0.5 * ( 1.500000 + ( 3.000000 / 1.500000 ) ) = 1.750000

sqrt( 3.000000 ) = 0.5 * ( 1.750000 + ( 3.000000 / 1.750000 ) ) = 1.732143

sqrt( 3.000000 ) = 0.5 * ( 1.732143 + ( 3.000000 / 1.732143 ) ) = 1.732051

sqrt( 3.000000 ) = 1.732051

نفس النتايج للبرنامج السابق بلغة ++C

اسناء التجربة

Enter value (>0) whose square root will be computed:

3

sqrt( 3 ) = 1.5

sqrt( 3 ) = 0.5 * (1.5 + (3 / 1.5 ) ) = 1.75

sqrt( 3 ) = 0.5 * (1.75 + (3 / 1.75 ) ) = 1.73214

sqrt( 3 ) = 0.5 * (1.73214 + (3 / 1.73214 ) ) = 1.73205

sqrt( 3 ) = 1.73205

للعدد 3

إن شاء الله مزبوطة

اجمل الإمنيات

سبب التعديل: آسفة ببعض التعديلا بالشكليات للطباعة ع الشاشة فقط + حدف التعليق الزايد بالكود

bye

تم تعديل هذه المشاركة بواسطة ♥ حُوريّة ♥ في 6 أبريل 2011 في 11:02

1

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#3

شكراً أختي الكريمة

بس إذا ما عليك أمر

ممكن شرح بسيط عن خطائي

#4
QJK كتب:

شكراً أختي الكريمة

بس إذا ما عليك أمر

ممكن شرح بسيط عن خطائي

عفواً

ﻷ ابداً إن شاء الله

ساعتين اقل تقريباً بس للضرورة وبرجع اشرحن إن شاء الله

اجمل الإمنيات

bye

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#5

السلام عليكم

ببساطة تقريباً, محاولتك لم تراعي فيها كثيراً من خصائص لغة ++C الـ OOP تحديداً

ولن نستطيع الخوض في هذه التقنية لأنها شغلة مطولة جداً, ولذلك عليك الإهتمام بتقنية OOP بلغة ++C اكتر واكتر

لأنها هي سبب المشكلة بمحاولتك

# include <iostream>
# include <stdio.h>
# include <cmath>
using namespace std;

class main {
	double x = getValue();
	double xSqrt = approximateSqrt( x );
	printf("\nsqrt( %1.6f ) = %1.6f\n", x, xSqrt);

}

double getValue (){
		double value;

		cout << "Enter value (>0) whose square root will be computed: ";
		cin >> value;

		while ( value <= 0 )  {
	            	cout << "Invalid value " << value << " <= 0" ;
	            	cout << " -- try again" ;
	            	cout << "Enter value (>0): ";
	            	cin >> value;
	     }
		return value;
}

double getInitialGuess( double value ){
        return value / 2.0;
}

double approximateSqrt( double value )
    {
        const double epsilon = 0.00001;
        double x = getInitialGuess( value );

        printf( "sqrt( %1.6f ) = %1.6f\n", value, x );
        while ( abs( value - x * x ) > epsilon )
        {
            double tx = x;
            x = 0.5 * ( x + ( value / x ) );
            printf( "sqrt( %1.6f ) = 0.5 * ( %1.6f + ( %1.6f / %1.6f ) ) = %1.6f\n", value, tx, value, tx, x );
        }
        return x;
    }

والدالة الرئيسية في ++C مش كلاس وإنما دالة مستقلة خارجة تماماً عن أي دالة اخرى وعن أي كلاس كمان مو متل الجافا, واسمها main

وانت عاملها class وناقل محتويات الدالة main الرئيسية في لغة جافا إلى class في لغة ++C وهذا خطأ

+ بنستعمل لطباعة النتائج ع الشاشة أو اخد القيم من المستخدم cout و cin بالتوالي...

حاول مقارنة محاولتك بالكود المعدل هنا, وبتلاحظ كيفية طريقة عمل OOP في لغة ++C

شاهد وتأمل الهيكل العام مش التفاصيل

# include <iostream>
# include <cmath>
using namespace std;

class Main {


public:
        double getValue();
        double getInitialGuess( double value );
        double approximateSqrt( double value );


};

double Main::getValue (){
double value;
double input;

cout << "Enter value (>0) whose square root will be computed: " << endl;
cin >> input;
value = input;
while ( value <= 0 )
{
cout << "Invalid value " << value << " <= 0"<<endl;
cout << " -- try again" << endl;
cout << "Enter value (>0): ";
cin >> input;
value = input;
}
return value;
}

double Main::getInitialGuess( double value ){
return value / 2.0;
}

double Main::approximateSqrt( double value )
{
        const double EPSILON = 0.00001;
        double x = getInitialGuess( value );

        cout <<  "sqrt( " << value << " ) = " << x << endl;
        while ( abs( value - x * x ) > EPSILON )
        {
        double tx = x;
        x = 0.5 * ( x + ( value / x ) );
        cout << "sqrt( " << value << " ) = 0.5 * (" << tx << " + ("<< value << " / " << tx << " ) ) = " << x << endl;

        }
        return x;
}


int main()
{
        Main mObj;

        double x = mObj.getValue();
        double xSqrt = mObj.approximateSqrt( x );
        cout <<  "\nsqrt( " << x << " ) = " << xSqrt << endl;
        return 0;
}

+ استقلال الدالة الرئيسية main (حرف m ازغير) خارج الكلاس وكل الدوال التابعة للكلاس

وإنشاء كائن mObj للكلاس واستعمال لتطبيق المهام المطلوبة منه...

الأشيا الباقية المختلفة عن محاولتك بخصوص الكلاس هي في قلب OOP

لو كان هناك غموض معين او اشي بنشرحن بالسؤال ولكن مش كل الـ OOP wub.gif

أطيب المُنى

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#6

شكرا أختي الكريمة

لكن كنصيحة منك ... هل في كتاب عربي أو إنجليزي ممتاز لهذه المرحلة

أو شروح على النت

لأني تعلمت إلى مستوى loop و array في C++

ما تعلمت الكلاس في C++

تعلمته في الجافا ... ولم أتقنه جيداً

#7

بعد اذن اختنا رغد طبعا اقترح عليك كتاب

C++ How to program 5th edition

ادرسه (وليس اقرأه) كله وحل الاسئلة فى نهاية كل فصل

تحياتى

تم تعديل هذه المشاركة بواسطة MOHAMED FATHEI في 11 أبريل 2011 في 00:15

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#8
MOHAMED FATHEI كتب:

بعد اذن اختنا رغد طبعا اقترح عليك كتاب

C++ How to program 5th edition

ادرسه (وليس اقرأه) كله وحل الاسئلة فى نهاية كل فصل

تحياتى

شكراً اخي محمد بارك الله بك

نعم صحيح كتاب شامل وضخم ورائع للغاية,

وبيبدأ من الصفر لغاية الإحتراف والإتقان كمان

موفقين يارب

[وسط]

♥ Countess ♥

57899411.gif

♥

[/وسط]

#9

أخي الكريم MOHAMED FATHEI و أختي الفاضلة ♥ حُوريّة ♥

شكراً لكم على المساعدة

سبحان الله أنا جالس أدرس الكتاب قبل ما أشوف ردودكم

لكن النسخة اللي عندي ألكترونيه .... راح أشتري الكتاب أفضل لي

ويعطيكم العافية

مواضيع مشابهة