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

برنامج يحتاج لبعض اللمسات من مبرمجي السي::: ممكن !؟؟

مغلق
بدأه esaa في 16 فبراير 2008 · 19 رد · 1,903 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام من الله عليكم

تحية طيبه وبعد....

اليوم جئت لكم ببرنامج عملت به ولكن ينقصه بعض المسات الذكيه منكم

هو::

برنامج يقوم بحل المتسلسله التاليه:

1^2+2^2+3^2+........n^2

مثال لو ادخلنا العدد 5 يكون ناتج المتسلسله بالشكل الثالي::

1+4+9+16+25=55

انا لم استطع عملها بالضبط بالشكل السابق لكن طلعت الناتج بطريقه اخرى::

ممكن تشوفوا لي الكود وتعدلوا فيه ليطبع الناتج بالشكل المطلوب..


void main(){clrscr();
int n;
cout<<"enter n...";
cin>>n;
for(int i=1;i<=n;i++)
cout<<i<<"^"<<"2"<<"+"<<"="<<sum_sq(i)<<"\n";
getch();
}
int sum_sq(int b){
int sum=0;
for(int i=1;i<=b;i++)
sum+=i*i;
return sum;
}
int sum_sq(int b);

مع اجزيل الشكرررر

#2

السلام عليكم: هذا الكود جربه

#include <iostream>

using namespace std;

int sum_sq(int b ) ;

void main()

{

int n;

cout<<"enter n..." ;



cin>>n;

for(int i=1;i<=n; i++)

{

cout<<i<<'^'<<"2";

if(i!=n)cout<<'+' ;

}

cout<<"="<<sum_sq(n )<<"\n";

}

int sum_sq(int  b  ) {

int sum=0;

for(int i=1;i<=b; i++ )

sum+=i*i;

return sum;

}

تم تعديل هذه المشاركة بواسطة فهدالشلوي في 16 فبراير 2008 في 22:44

tvquran_6.gif

#3

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

اترك لنا الفرصه لنشارك معك ..

بدات اكتب بالكودللحل ولكن وجدت حلك فتركت الحل ..

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

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

#4

ببساطة شديدة الحل لا يتعدا مجموعة من الاسطر ,

#include<iostream.h>
#include<math.h>

int s(int a)
{
	int sum=0;
	for (int i=1;i<=a;i++)
	{
		cout<<i<<"^"<<2<<"="<<pow(i,2)<<endl;
		sum=sum+(int)pow(i,2);
	}
	return sum;
}
main()
{
	int x;
	cin>>x;
	cout<<s(x)<<endl;
	return 0;
}

شرح هذه الدالة s

لدينا السؤال كالتالي :

طباعة سلسلة وفقا للقانون ,

1 ^2 + 2 ^2 + 3 ^ 2 ... n^2

يعني مثل ماانت شايف لازم حلقة تكرار من 1 إلى n

	for (int i=1;i<=a;i++)

بعد كذا نخرج مجموع السلسلة

يعني لازم نعرف متغير sum نعطيه قيمة ابتدائية صفر ( العنصر المحايد لجمع)

int sum=0;

بعد كذا مجموع السلسة هو عبارة عن مجموع i قوى 2 + sum يعني:

		sum=sum+pow(i,2);

ملاحظة : استدعي الملف الرأسي

#include<math.h>

تم تعديل هذه المشاركة بواسطة time1 في 16 فبراير 2008 في 23:21

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#5

قاعد احضر للاولمبيات

ان شاء الله يستمر قسمنا بهذا النشاط .

ترى قسم السي الآن مسيطر على الوضع.

وفقنا الله واياكم.

tvquran_6.gif

#6

الاختصار يا شباب , كل ماقلت اسطر البرنامج كل مازادت الكفاءة

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#7
#include <iostream.h>
#include <math.h>
#include <conio.h>

int recursive(int n)
{
	 if(n == 1)
		  return pow(n,2);
	 else
		  return pow(n,2) + recursive(n-1);
}

main()
{
	  int x;
	  cout<<"enter the series you want to compute"<<endl;
	  cin>>x;

	  cout<<"your series value is: "<<recursive(x)<<endl;

	  getch();
}
#8

^

^

^

^

Yousof يا سلام عليك ( Recursive Functions) :thumb_up:

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#9

السلام عليكم,

ما شاء الله يا إخوان أكواد جميلة فعلا.

بس لى تعليق صغير, لم يوجه أحد صاحب الموضوع إلى الأخطاء اللى عملها فى كوده و كيف يصحح هذه الأخطاء و يتلافاها فيما بعد!!! و هو أساسا كان بيسأل على تعديل فقط لأنه حسب الناتج صح بس مش عارف يعرضه بالطريقة الصحيحة! و ليس برنامج كامل!! (و recursive كمان :lol:) غالبا هو لم يستفد كثيرا و لم يعرف لماذا برنامجه كان يطبع بطريقة غير صحيحة.

#10

السلام عليكم :

هذا كود أقصر.

#include <iostream>
void main()
{
int n,sum=0;
std::cout<<"enter n...";std::cin>>n;
for(int i=1;i<=n;i++){std::cout<<i<<'^'<<"2";sum+=i*i;if(i!=n)std::cout<<'+';}
std::cout<<"="<<sum<<"\n";
}
tvquran_6.gif

#11

طيب حسب كلام اخي بلوتوث الشرح اولى من كل هذه الاكواد

كودك صحيح ماعدا سطور الطباعه وهي فقط الى عدلتها في برنامجك

for(int i=1;i<=n; i++)
{
cout<<i<<'^'<<"2";/*يطبع بعدد مرات المتغير n*/
if(i!=n)cout<<'+' ;/*يطبع + مباشرتا خلف السطر السابق ما عدا آخر عدد قبل يساوي*/
}
tvquran_6.gif

#12

اخي الحبيب فهد الشلوى ,

اقصد في كلما قلة اسطر البرنامج , اي تعليمات البرنامج , على افتراض ان كل تعليمة هي سطر.

هناك معايير لتقييم البرامج , طبعا المعاير تختلف من برنامج لاخر , مثل حجم البرنامج , التعليمات , معالجة الاستثنائات Exception Handling , استغلال الموارد .... إلخ

احد اهم المعايير المستخدمة في تقييم البرامج تقول : " لكل برنامج له عدد لا نهائي من الحلول , لكن دائما نبحث عن الامثل"

مثال : في برنامجك الاول وضعت شروط وتعليمات كنت بغنى عنها لو استخدمت دالة القوى , في مثال الاخ يوسف استخدم العودية Recursive Functions وهي الحل الأمثل لمثل هذه المسائل ,

هذا المقصود بالحل الامثل ومبادئه :

تقليل استخدام التعليمات , الادخال والاخراج وحجز المتغيرات والعمليات الطويلة والعريضة , حتى وان كانت جميعها في سطر واحد ,^__^

يوجد سؤال يطرح على شخصين , احدهم مبتدئ فيحل البرنامج بـ 100 سطر والاخر خبير يحلها بـ 10 اسطر , طبعا اقصد اسطر اي تعليمات , اي لاتعتقد بأن دمج التعليمات في سطر واحد هو الحل , باختصار ( انت تضحك على نفسك ) :rolleyes:

استاذ Blueteeth : تصدق كلامك صحيح :wacko:

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#13

أخي حياك الله وبياك :

كل ما في الامر ولا اني عدلت في برنامج المعطى في السؤال ولم اكتب برنامج.

ثانيا الداله الي كتبتها في كذا سطر لست في حاجتها واستغنيت عن لوبين بلوب واحد فقط وحذفت الداله وكتبت عوض عناه فقط i*i

ثالثا هل الكود الاخير أفضل ام الاول.

رابعا : شكر لك على مداخلتك الطيبه.

tvquran_6.gif

#14
اقتباس
كل ما في الامر ولا اني عدلت في برنامج المعطى في السؤال ولم اكتب برنامج

:rolleyes:

اقتباس
ثانيا الداله الي كتبتها في كذا سطر لست في حاجتها واستغنيت عن لوبين بلوب واحد

+

اقتباس
ثالثا هل الكود الاخير أفضل ام الاول

اهلين وسهلين اخوي فهد ,

انا الي اقصده من ردي السابق هو ان البرامج تختلف في طريقة حلها واحنا دائما نسعى للحل الافضل , على سبيل المثال المسألة الي كتبها صاحب الموضوع خير طريقة لحلها هي Recursive Functions لكن صاحب الموضوع لجأ لطريقة اخرى , عموما انا مازلت انادي باختيار الطرق المثلى

عموما , انا ماابي اشتت ذهن كاتب الموضوع , عشان كذا شرحت بعض الامور الخاصة بمسألته , وله ان يختار ما يستوعبه , اما الامور الاخرى , فيحتفظ بها ببنك المعلومات :rolleyes:

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

#15

أخي الكريم لم أفهم ما تقصده لأن البرنامج يعرض لك الناتج بشكل سليم

أما أن كنت تقصد كيف نجعل البرنامج يطبع:

1^2 = 1

2^2 = 4

3^2 = 9

4^2 = 16

5^2 = 25

و الناتج يكون مجموعهم = 55

بدلا من البرنامج الذي وضعته:

1^2 = 1

2^2 = 5

3^2 = 14

4^2 = 30

5^2 = 55

فالبرنامج التالي يفي بالغرض:

#include <iostream.h>
#include <conio.h>

int sum_sq(int b);
main(){

int n;
int total = 0;
cout<<"enter n...";
cin>>n;
for(int i=1;i<=n;i++)
{
total = total + sum_sq(i);
cout<<i<<"^"<<"2"<<" = "<<sum_sq(i)<<"\n";
}
cout <<"The sum of "<<n<<" series is: "<<total<<endl;
getch();
return 0;
}
int sum_sq(int b){
static int sum = 0;
sum = b*b;
return sum;
}

تم تعديل هذه المشاركة بواسطة Yousof في 17 فبراير 2008 في 18:24

#16

هذا احد الحلول البسيطة والسريعة

اذا كنت تريد حساب شيء مثل (x*2^n) انصحك بشدة ان تستعمل هذه الطريقة (x<<n) لانها الاسرع

اي مثلا

5^2*7=224

و

5>>7=224

هذا الكود يحسب المجموع

 2^0+2^1+2^2+...+2^n.

				n
				---
				\
				/	2^i
				--- 
				i=0

							   #include <iostream>
									using namespace std;

									int f(int n)
									{
										if (!n) return 1;
										return (1<<n)+f(n-1);
									}

									int main()
									{
										cout << f(10);
										return 0;
									}

اذا كنت تريد البدء عند 1 مثل 1^2+2^2+3^2+...

يكفي ان تغير الكود كما يلي

#include <iostream>
   using namespace std;

   int f(int n)
   {
	   if (n<2) return 1<<n;
	   return (1<<n)+f(n-1);
   }

   int main()
   {
	   cout << f(5);
	   return 0;
   }

تم تعديل هذه المشاركة بواسطة مصطفــى في 17 فبراير 2008 في 20:40

#17

اشكركم جميعا ياخوتي على هالتفاعل معي

انا مش عارف شفت كودي يعمل معي لكن بناتج اخر وغير عن اللي ابغاه

بس بشوف اكوادكم جميعا

وارى النواتج واشوف من اللي حقق المطلوب

تقريبا اتوقع انها كلها تحقق لانني اتعامل مع مبرمجين وخبراء

اثابكم الله

جميعا::::

بصراحه وجدت في هالمنتدى المساعده السريعه والتفاعل الطيب

شكرا لكم

#18

what about this code!!!

#include <iostream.h>

  int power(int a,int b)
  {
	int res=1;
  for (int f=0;f<b;f++)
	   res*=a;
	 return res;}

  int sum(int x)
  {  int sum=0;
  for (int i=0;i<x;i++)
	   sum+=power(x-i,2);

	 return sum;}



 int main()

 {
	 int y;
	 cout<<"ENTER N\n";
	 cin>>y;
	cout<<sum(y)<<endl;

 return 0;}
#19

اشكرك اخي انج ليتايف على المداخله الطيبه::

اخ تايم1 صحيح كلامك من حيث الكفاءه

لكن انا اعتبر مبتدئ والاكواد التي وضعتوموها في الاخير بعد الاختصار الشديد للاسطر والله لم افهم شيئ منها

يعني بصراحه انا ماناسبني ومافهمت غير الاكواد الاولى من الاخ فهد والاخ يوسف

والتي قريبه لكودي واريد اعتمدها اول كود للاخ فهد:::

لكن ان تقدمت قليلا في تعليمي للسي ساحتاج الى تلك الاكواد

بس حاليا صعبه بالنسبة لي ولم افهمها::

عموما::: اشكركم جدا جدا على تفاعلكم الطيب وياي

ان شاء الله تكونوا هكذا دايم يد وحده وتنفعوا غيركم بعلمكم الطيب

تحياتي

#20

اهلين اخي ,

اهم شي انك وصلت لطلبك سواء عندي او عند غيري ,

وفقك الله

llback.jpg

اشهد ان لا إله إلا الله وان محمدا ً رسول الله

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…