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

خطأ في حساب النسبة المئوية

مغلق
بدأه المجاهدة في 22 فبراير 2005 · 30 رد · 2,826 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

Write c++ program that allos the user to enter the last names of five candidates in a local election and the number of votes received

by each candidate.

the program should then output each candidtae's name, the number of votes recived, and the percentage of the total votes recived by the candidates

Your program should also output the winner of the election.

Asample output is :

Candidate Votes Recived % of Total votes

Saadi 5000 25.91

Djaballah 4000 20.72

Boutef 6000 31.09

Ali 2500 12.95

Chorfi 1800 9.33

-------

100%

the winner is Boutef

this is my try

#include <iostream.h>
#include <string.h>
#include<conio.h>
class candidate 
{
private:
	char name[10];
	int voicesNO;
public :

	void get_name();
	void get_voicesNO();
	char* set_name();
	int set_voicesNO();
};


void candidate::get_name()
{
	cout<<"Enter the name : ";
	cin>>name;
}

void candidate ::get_voicesNO()
{
	cout<<"Enter the no of voices: ";
	cin>>voicesNO;
}
char* candidate:: set_name()
{
return name;
}

int candidate::set_voicesNO()
{
return voicesNO;
}

void main()
{       clrscr();


	candidate c[5];
	int sum,i,total;
	for (i=0;i<5; i++)
	{
  c.get_name();
  c.get_voicesNO();
  sum = sum + c.set_voicesNO();
	}

  cout<<"\n------------------------------------------------------------------";
	cout<<"\n\n Candidate\t\tVotes Recived\t\t% of Total votes \n";
  cout<<"\n------------------------------------------------------------------";

	for (i=0;i<5; i++)
	{

   total =(c.set_voicesNO()/sum)*100;
   cout<<"\n "<<c.set_name()<<"\t\t\t"<<c.set_voicesNO()<<"\t\t\t"<<total<<"\n";

	}

	//to stop the output screen
	getch();
}

النسبة المئوية تظهر صفر دائما ،، هل لاحدكم مدي يد العون لي

وكيف احسب الفائز ؟؟؟؟

#2

عرفي total على أنها float لأنها حاليا int وبذلك قسمة c.set_voicesNO()/sum دائما أقل من واحد وستستئصل لصفر في حال الأعداد الصحيحة , لذا يجب أن تكون رقم بفاصلة .

int sum,i,total;

تصبح :

float sum,i,total;

اقتباس

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#3

كيف راحت عن بالي :) ،،

شكرا جزيلا لك أخي HGB ...

انا قمت بالتعديل التالي

int i;
float sum,total;

لكن تظهر النسبة بقيمة عشرية سالبة :( ...

تم تعديل هذه المشاركة بواسطة المجاهدة في 22 فبراير 2005 في 17:33

#4

السلام عليكم

الأخت المجاهدة

برنامجك صحيح تماما بعد التعديل الذي قاله الأخ HGB

يبدو أنه يوجد خطأ عند كتابتك للبرنامج في المحرر، لذلك راجعي ما كتبتيه.

وأي شيء نحن في الخدمة

والسلام عليكم.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#5
result.gif
#6

السلام عليكم

أختي

أنا أقصد SOURCE CODE

راجعيه مرة أخرى.

ممكن أنك اخطأت في معادلة أو شيء من هذا القبيل.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#7

اوكي ..بارك الله فيكم ...

#8

السلام عليكم

جربي وضعي sum = 0;

في البداية اي صفري المخزن ثم جربي هل ينفع ذلك ام ليزال هنالك خطأ.

لانكي تجمعين كل القيم ثم تقسمين قيمة الفرد الواحد على المجموع وتضربين في 100

جربي ليس حل اكيد ولكن جربي ورد علينا؟!!!

اللهم علمنا ما ينفعنا وأنفعنا بما علمتنا أنك أنت العليم الحكيم

سبحان الله وبحمده سبحان الله العظيم

لاحول ولاقوة الا بالله( كنز من كنوز الجنة ).

#9

نعم كما قال السهم الناري , sum=0 , لأن المتغيرات التي تعرف في أي دالة تعطى قيمة إفتراضية إن لم يكتبها المبرمج بأي قيمة عشوائية من الذاكرة .

وهي هنا قيم سالبة غير مرغوبة , لذا يجب التمهيد ب sum=0;

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#10

شكرا لك أخي السهم الناري ولك أخي HGB ...

نفذت البرنامج واشتغل تمام :) واخيرا ،، جزاكم الله الخير جميعا ...

تم تعديل هذه المشاركة بواسطة المجاهدة في 23 فبراير 2005 في 19:34

#11

شكرا لك أخي السهم الناري ولك أخي HGB ...

نفذت البرنامج واشتغل تمام :) واخيرا ،، جزاكم الله الخير جميعا ...

تم تعديل هذه المشاركة بواسطة المجاهدة في 23 فبراير 2005 في 19:35

#12

مع احترامي للجميع

ليس من المفروض أن نضع sum=0;

لأنك لو لم تضع أي قيمة للمتغير فإن القيمة الافتراضية هي 0

ممكن أن توجد هناك اختلافات بين المترجمات، ولكن لا أعتقد أن تصل لهذه الدرجة.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#13

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

#14

انا مع رأي الأخ برق .. حيث ان القيمة الافتراضية للمتغيرات من نوع integer هي صفر .. اذا لم يتم اسناد قيمة لها ..

اخي HGB انت تقصد ان القيمة تكون سالبة وغير مرغوبة .. عند تعريف مصفوفة وعدم اعطائها قيم باتدائية Initial values ..

اما المتغيرات العادية من نوع integer فانها تأخذ الصفر بشكل افتراضي ..

جرب البرنامج التالي لتتأكد

#include <iostream.h>

void main()
{
  int x;
cout << "the value of X = " << x << endl;
}

تحياتي

ابوخلود

#15

السلام عليكم

وجدت هذا المثال التالى فى احد المواقع

 int count(int a[], int max, int val) {
  int cnt;               // auto count variable
  for (int i = 0; i < max; i++)    // loop over array
    if (a == val)         // found value?
     cnt++;             // increment count
  return cnt;             // return count
 }

ويقول المؤلف تعليقاً على هذه الشفره التالى :

اقتباس
The count() function loops over an array of integers and returns the number of elements that are equal to a certain value. The cnt variable, however, does not have an initial value (is it 0 or something else?). The behavior of this function is not predictable (it may work fine or return a random value).

يعنى كلام السهم النارى و هيثم مظبوط 100%.

والسلام عليكم

تم تعديل هذه المشاركة بواسطة احمد غريب في 24 فبراير 2005 في 10:56

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#16

مع احترامي لكلام الأخ أحمد غريب

أظن أن كلام الأخ slacker مدعوم بحجة قوية

وإضافة لذلك فإني قمت بكتابة البرنامج الخاص بالأخت المجاهدة بدون وضع قيمة لل sum فطلع معي كل شيء تمام.

غير أني أفضل أن أعطي قيم ابتدائية لأي متغير، حتى لا أعطي فرصة لحدوث خطأ.

بمعنى آخر نحن الاثنان كلامنا صحيح.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#17

مع احترامي لرأي الاعضاء لكن .....

عند حجز متغير في الميموري لايتم وضع الصفر كقيمة ابتدائية .......

تجد ارقام عشوائية .......

وتحياتي لكم

#18

اخوي برق ماتفسيرك عندما وضعت sum = 0 اشتغل البرنامج تمام

#19

وما تفسيرك أخي double عندما لم أضع sum=0 ،اشتغل البرنامج تمام؟ B)

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#20

السلام عليكم

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

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#21

ولكني جربت البرنامج أكثر من مرة. :blink:

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#22

اخي برق .....

الميموري مثل مانت عارف ليس كله اصفار ......

اوكي رح اي موقع تعليم البرمجة من اهم الاشياء الي يقولها لاي مبتدىء صفر المتغيرات اذا كان فيها جمع او طرح .............

وعلى فكره الى الان انا مصدوم من الي صار .......

وقد يحدث بالصدفة وتحدث مرة بالالف انك تعرف متغير ويكون المسند اليه صفر

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

اتوقع يدخل جهازك لموسوعة جينيس للارقام القياسية ........

ومايتوقف عند هذا الحد ولكن يوصل ان يكون جهازك من عجائب الدنيا السبع فتصبح من عجائب الدنيا الثمان ..... ههههههههههههه ;)

وانا متأكد من كلامي مليون بالمئة ماراح يطلع صفر ثاني مره .....

تم تعديل هذه المشاركة بواسطة double في 24 فبراير 2005 في 22:53

#23

أعتقد أنه شيء يمكن أن يكون خاضع لرغبة كل مصمم لل compiler

إلى غير أن في لغة C ++ ، فإن global variable و static local variable ، إذا لم تضع لهم قيمة فإنه يتم وضع الصفر كقيمة أولية ، وهذا ثابت عالميا ولا سبيل لإنكاره.

والأمر الذي في البرنامج بالنسبة للمتغير sum ، فأنا اتفق معه أنه لم يتحقق فيه شرط global كلية ولكنك تستطيع أن تتعامل معه بهذا الأساس، لأنه تم تعريفه داخل الدالة main وخارج أي دالة أخرى.

وفي النهاية

رأيي صواب يحتمل الخطأ

ورأي غيري خطأ يحتمل الصواب

والله تعالى أعلى وأعلم.

System Engineer

Red Hat Certified Engineer

Red Hat Certificate Number

805010381752078

#24

برنامج بسيط .........

#include <iostream>
using namespace std;
int main()
{
	int array[19];
	for(int i=0;i<19;i++)
  cout<<array<<endl;
	return 0;
}

جرب البرنامج وشف وش يطلع اذا طلع اصفار ........... ماعندي كلام ثاني :s

#25

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

الصحيح ان نعطي قيم ابتدائية للمتغيرات عند تعريفها ولا نعتمد ان يعطيها ال compiler قيم ابتدائية ...

اخي برق بالتجربة والتجربة خير برهان:) ، صحيح يختلف ذلك من compiler لاخر ... حيث عند تنفيذ البرنامج بواسطة Turbo C compiler اعطى للمتغير القيمة صفر كقيمة افتراضية واشتغل البرنامج كما هو مطلوب دون ان اعطيه انا هذه القيمة من خلال الكود ... اما باستخدام VC++6 compiler فاعطى قيمة افتراضية عشوائية لا تساوي صفر وبالتالي كان من الضروي ان اعطي انا المتغير في برنامجي القيمة صفر كقيمة افتراضية ليعمل البرنامج بطريقة صحيحة

اي ان كلام جميع الاخوة الذين قالوا يجب اعطاء قيمة ابتدائية من خلال الكود ايضا سليم :) ..

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

وشكرا للجميع على ردودهم ومشاركتهم ...

بالتوفيق للجميع ..

تم تعديل هذه المشاركة بواسطة المجاهدة في 24 فبراير 2005 في 23:22

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

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