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

معادلة الحجم

بدأه خوله88 في 25 فبراير 2008 · 8 رد · 1,327 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله بركاته

هذي اول مشاركة لي واتمنى تساعدوني

حاولت اسوي معادلة الحجم بالسي بلس بلس

طلعت لي الشاشة السوداء وبس النتايج خطا

فلو سمحتم احد يشيك لي عليه

المعادلة : 1/3باي ×نصف القطرتربيع×الارتفاع

وهذا اللي سويته

#include<iostream>

using namespace std;

int main()

{

int radius;

int height;

const int pi=22/7;

cout<<"please enter radius"<<endl;

cin>>radius;

cout<<"please enter height"<<endl;

cin>>height;

cout<<"cone's volume is"<<endl;

cout<<(float(1/3*pi)*(radius*radius)*(height))<<endl;

return 0;

}

#2

اهلا اخت خوله ..

الكود الذي وضعتيه صحيح ولا توجد به مشكله ..والدليل انه تم تنفيذه ولكن المشكله في النتائج وهذا واضح .. والسبب في ذلك هو استخدامك للكسور مرتين ( 3/1 و 2/1 ) .. هذه تسبب مشكله وهي مشكله الاسبقية .. لذلك نقوم في مثل هذه الحالات باستبدالها بناتج هذه االقسمه ..

اي ان 2/1 هو 0.5 .. وكذلك 3/1 هو 0.75 ..

كذلك بالنسبه لل7 / 22 .. فنكتب قيمة pi 3.14 فهي تفيد في الحل افضل من 7/22 ...

يعني تصحيح البرنامج سيكون بالشكل التالي ..

#include<iostream>
using namespace std;

int main()
{
int radius;
int height;
const int pi=3.14;

cout<<"please enter radius"<<endl;
cin>>radius;
cout<<"please enter height"<<endl;
cin>>height;

cout<<"cone's volume is"<<endl;
cout<<(float(0.75*pi)*(radius*radius)*(height))<<endl;


return 0;

جربي هذا الكود بعد التغيير واكتبي لي هل نجح ام لا ..

كذلك لدي ملاحظه بسيطه .. هي ليست خطا في البرنامج السابق وانما تفضل استعاملها في مثل هذه الحالات .. وهي بالنسبه لل pi .

يفضل جعل pi ماكرو .. اي ان يتم تعريفه بالشكل التالي ..

#define pi 3.14

هذه ايضا تشبه صيغه الثابت ..ولكنها ستسبدل الكلمة pi بالقيمة 3.14 اينما وجدت هذا الاسم .( pi) ..

اي مشكله انا حاضر في الخدمة ..

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#3

ال PI ليس int >

const double pi=22.0/7;

و كمان فى العملية دى > 1/3 لازم واحد فيهم يبقى float علشان يطلع الناتج float >

cout<<(float(1.0/3*pi)*(radius*radius)*(height))<<endl;

اقتباس
هلا اخت خوله ..

الكود الذي وضعتيه صحيح ولا توجد به مشكله ..والدليل انه تم تنفيذه ولكن المشكله في النتائج وهذا واضح .. والسبب في ذلك هو استخدامك للكسور مرتين ( 3/1 و 2/1 ) .. هذه تسبب مشكله وهي مشكله الاسبقية .. لذلك نقوم في مثل هذه الحالات باستبدالها بناتج هذه االقسمه ..

اي ان 2/1 هو 0.5 .. وكذلك 3/1 هو 0.75 ..

كذلك بالنسبه لل7 / 22 .. فنكتب قيمة pi 3.14 فهي تفيد في الحل افضل من 7/22 ...

يعني تصحيح البرنامج سيكون بالشكل التالي ..

أختلف معك أخ سنان لا توجد مشكلة فى الأسبقية حيث إذا تساوت المعاملات فى الأولوية يتم تنفيذها من اليسار إلى اليمين, و بالتالى ناتج العملية حيبقى صحيح. و بعدين إفرض إنى عايز أستخدم ال PI لحد دقة عالية حكتب كل ال digits اللى فيها!

اقتباس
كذلك لدي ملاحظه بسيطه .. هي ليست خطا في البرنامج السابق وانما تفضل استعاملها في مثل هذه الحالات .. وهي بالنسبه لل pi .

يفضل جعل pi ماكرو .. اي ان يتم تعريفه بالشكل التالي ..

كود

#define pi 3.14

هذه ايضا تشبه صيغه الثابت ..ولكنها ستسبدل الكلمة pi بالقيمة 3.14 اينما وجدت هذا الاسم .( pi) ..

أختلف معك مرة ثانية يا أخى, الماكرو من الأشياء التى ينصح بالإبتعاد عنها فى السى++ و الإستيعاض عنه بكلمة .const

تم تعديل هذه المشاركة بواسطة Blueteeth في 26 فبراير 2008 في 02:10

#4
اقتباس
أختلف معك أخ سنان لا توجد مشكلة فى الأسبقية حيث إذا تساوت المعاملات فى الأولوية يتم تنفيذها من اليسار إلى اليمين, و بالتالى ناتج العملية حيبقى صحيح. و بعدين إفرض إنى عايز أستخدم ال PI لحد دقة عالية حكتب كل ال digits اللى فيها!

اخي العزيز .. كلامك صحيح .. ولكن ارجو منك تجريب الكود التالي ..

int main(int argc, char *argv[])
{
	 float x=1.0;
	 cout << x * 0.75<<endl;
	 cout << x *(1/3);
	system("PAUSE");
	return EXIT_SUCCESS;
}

النتائج التي ستظهر كالتالي ..

0.75
0

انا ما طرحته اعلاه هو لحل هذه المشكله ..وهي ان 3/1 اصبح ناتجها 0 عندما ضربت ب x .. والسبب في ذلك هو لان ناتج 3/1 اصبح 0 وليس 0.75 .. حيث اخذ الجزء الصحيح فقط واهمل الكسر والسبب هو لاستخدامنا int ..

ولكن حل هذه المشكله بالتاكيد سيكون بجعل البسط من النوع float ..وذلك بوضع فارزة عشرية مع صفر .. اي ان يصبح بالشكل التالي ..

3/1.0 .. وبذلك يتم تقسيم واستخدام الناتج كاملا بفاصلته العشرية ..

اما ما طرحته انا اعلاه هو نفس هذا الحل ولكن مباشرة .. يعني ناتج 3/1.0 .. هو 0.75 .. فما الفرق بينهما ..؟

حتى انه لو استخدمنا الناتج سيكون اسرع من استخدام الكسر .. لان الكسر هنا سيجعل المترجم يقوم بعملية القسمه اولا بسبب القوس .. ولكن لو استخدمنا الرقم مباشرة فهذا سيغنينا عن هذه العملية الزائده ..

واذكر اني قرات معلومة في مرجع ذات مره ( لااذكره صراحة ) يوضح هذه المساله وهي انه نستخدم ناتج الكسر افضل من استخدامنا للكسر نفسه مع العلم ان الاثنين يحققون نفس المطلوب ..

هذا بالنسبه للجزء الاول ..

=======================

بالنسبه للجزء الثاني ..

اقتباس
أختلف معك مرة ثانية يا أخى, الماكرو من الأشياء التى ينصح بالإبتعاد عنها فى السى++ و الإستيعاض عنه بكلمة .const

كلامك من الممكن ان يكون صحيحا .. وهو بسبب ان الconst هي اسرع من الماكرو .. ولكن لتلاحظ شيئا وهو ان الماكرو لن يخزن القيمه في الذاكره ..وانما سيستبدل الاسم بالقيمة التي يحتويها .. والماكرو كما تعرف من اوامر preprocessing ..

انا معك .. من الممكن ان نستخدم طريقتين لتعريف ثابت pi .

#define pi 3.14
const float pi=3.14;

فبسؤال سهل مثل هذا .. لاتشكل الماكروات اي خطورة .. ولاتشكل اي مشكله من ناحية السرعه .. فعندما ينصح بالابتعاد عن الماكرو هو في برامج اخرى صعبوتها وتعقيدها اضعاف اضعاف هذا البرنامج ..

ولكن لو كان لديك سبب اخر يمنع من استخدام الماكرو .. وضحه ..

تحياتي العطرة ..

يَارَبُ إِن ضَاقَت قُلُوُب الْنَّاسٍ عَنْ مّافِي .. مِنْ خَيْرٍٍ فَعَفْوكَ لَا يَضِيْقْ ..

#5

أنا أفضل كتابة الكسور بالطريقة اﻹعتيادية, ححسب ليه و أنا معايا كمبيوتر! باﻹضافة إنى لو عايز أستخدم كسور بدقة عالية أو ﻻ نهائية مثل ١/٣ ليه أتعب نفسى على الفاضى.

ﻻ تشكل الماكروات خطورة "فى سؤال سهل كهذا" كما قلت, و لكنى أشرت أنه "ينصح باﻹبتعاد عنها عامة فى السى++"> http://www.parashift.com/c++-faq-lite/inli...ns.html#faq-9.4

و إقرأ النقطة اللى بعدها كمان.

#6

مشكورين جميعا

صارت معي خلاص

بس لو سمحتم اريد احط comments

فكيف اقدر اضعها

ما قصرتوا

#7

التعليقات او commnets بسيطة

تعليق من سطر واحد يبدا بــــ

//تعليق من سطر واحد

تعليق من اكتر من سطر

start with /*Write what you want */

تم تعديل هذه المشاركة بواسطة Omar Eladel في 28 فبراير 2008 في 13:07

#8

يا جماعة أنا جننت أم ماذا

من قال أن 3/1=0.75

هل تتكلمون عن النظام العشري أم أن هذا النظام خاص بأهل المريخ

من أقوال الأئمة

الإمام علي بن أبي طالب -رضي الله عنه-: "الناس ثلاثة : فعالم رباني ، ومتعلم على سبيل النجاة ، وهمج رِعاع غوغاء أتباع كل ناعق ، يميلون مع كل ريح ، لم يستضيئوا بنور العلم ، ولم يلجئوا إلى ركن وثيق".

الإمام مالك -رحمه الله- : " لن يصلح آخر هذه الأمة إلا بما أصلح به أولها ".

الإمام الأوزاعي -رحمه الله- : " عليك بآثار من سلف وإن رفضك الناس وإياك وآراء الرجال وإن زخرفوه لك بالقول ".

الإمام الفضيل بن عياض -رحمه الله- : " عليك بطرق الهدى و لا يضرك قلة السالكين و إياك و طرق الضلالة ولا يغرك كثرة الهالكين ".

علامة الزمان الإمام الألباني -رحمه الله- : " إن الخلاص إلى أيدي هؤلاء الشباب يتمثل في أمرين لا ثالث لهما ؛ التصفية والتربية ".

وكل خير في اتباع من سلف وكل شر في ابتداع من خلف

#9

:) أه إتصدق أنا لسة واخد بالى دلوقتى! :) أكيد الأخ سنان سهى عليه و هو بيكتبها و مخدش باله منها بعد كدة.

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