فحص الكود الزائف.يحتاج إلى التحقق من صحة التعيين
-
13-09-2019 - |
سؤال
لقد سلمت هذا بالفعل لذا لن تساعدني في الغش.فقط أتساءل عما إذا كان هذا يبدو صحيحًا:
المهمة:أدخل قائمة بأسماء الموظفين والرواتب ، وتحديد الراتب المتوسط (المتوسط) وكذلك عدد الرواتب أعلاه وتحت المتوسط.
الخطة:السماح بإدخال الأسماء والرواتب حساب متوسط قيم عدد القيم أعلى من القيم العد الوسط أدناه
//This program will allow a user to input an employee name and salary
//The output will contain the mean salary
//as well as the number of salaries above and below the mean
//
//Arrays Used:
//Name(K) = Array for employee names
//Salary(K) = Array for salaries
//
//Variables Used:
//Mean = Mean of all employees Salaries
//UpMean = Number of Employees making more than the mean
//DwnMean = Number of Employees making less than the mean
//Sum = Sum of all salaries
//CountM = Counter for Mean
//CountUp = Counter for # of salaries above mean
//CountDwn = Counter for # of salaries below mean
Main
Call WelcomeMessage
Call InputData
Call Calculate
Call OutputData
End Program
WelcomeMessage
Write, “Beginning the Salary Program”
End WelcomeMessage
InputData
Declare Name(100) Of Strings
Declare Salary(100) Of Real
Declare Mean, UpMean, DwnMean As Real
Set Sum = 0
Set CountM = 0
Set CountUp = 0
Set CountDwn = 0
Write, "Enter Employee name and Salary."
Write, "Enter *,0 when done."
Input Name(K), Salary(K)
While Name(K) <> "*"
Set CountM = CountM + 1
Set Sum = Sum + Salary
Write, "Enter Employee name and Salary."
Write, "Enter *,0 when done."
Input Name(K), Salary(K)
End While
End InputData
Calculation
//Here Mean is found
Set Mean = Sum / CountM
//Here Number of Employees making more than the mean is found
For K = Step 1 to CountM
If Salary(K) > Mean Then
Set CountUp = CountUp + 1
End If
//Here Number of Employees making more than the mean is found
Set CountDwn = CountM - CountUp
//The above algorythm doesn't account for the possibility
//of someone making exactly the average so subtract 1 to reconcile
If Salary(K) = Mean Then
Set CountDwn = CountDwn - 1
End If
End Calculation
OutputData
Write, "There were," CountM, "salaries entered."
Write, "The mean salary is:", Mean
Write, "There are", CountUp, "employees who make more than the average"
Write, "There are", CountDwn, "employees who make less than the average"
End OutputData
المحلول
ملاحظة حول الحساب CountDwn
:
سيتم "طرح 1 للتوفيق" اعتمادًا على مدى دقة For
تعمل الحلقة بلغة التنفيذ، (أ) إنشاء خطأ من النوع "متغير غير معلن"، (ب) إنشاء خطأ "فهرس خارج النطاق"، أو (ج) طرح IFF واحد آخر كان الراتب يساوي بالضبط المتوسط.(أيضًا، لا يشتمل الرمز الخاص بك على End For
في Calculation
, ، لكنني أفترض أنه يجب أن يكون بعد الأول مباشرة End If
في تلك الوظيفة.)
بدلا من الحساب CountDwn
من CountUp
(بعد كل شيء، كل راتب استطاع يكون مساويًا للمتوسط)، أقترح إدراجه في الحلقة:
Calculation
//Here Mean is found
Set Mean = Sum / CountM
For K = Step 1 to CountM
//Here Number of Employees making more than the mean is found
If Salary(K) > Mean Then
Set CountUp = CountUp + 1
End If
//Here Number of Employees making less than the mean is found
If Salary(K) < Mean Then
Set CountDwn = CountDwn + 1
End If
End For
End Calculation
لاحظ أن CountUp + CountDwn
لا يساوي بالضرورة CountM
.
نصائح أخرى
يبدو طيب.الشيء الوحيد الذي يجب أن أقترحه هو استخدام بنية القيام أثناء قراءة المدخلات إلى الاسم/المبيعات.كما ترون، لديك نفس المنطق قبل بدء الحلقة، وفي الحلقة:
Write, "Enter Employee name and Salary."
Write, "Enter *,0 when done."
Input Name(K), Salary(K)
أيضًا، لن يتم تجميع الكود الزائف، نظرًا لأنك تتصل بـ Calculate ولكن الروتين يسمى Calculation ؛)
شكرا على الاقتراحات.ليس مألوفا حقا مع القيام به.ماذا سيكون هذا يشبه؟على الرغم من أنني ربما يجب أن يتغير شيء ما حول المدخلات في الحلقة ولكن لم أكن متأكدًا من كيفية.
يمكن أن يبدو مثل هذا:
Do
Write, "Enter Employee name and Salary."
Write, "Enter *,0 when done."
Input Name(K), Salary(K)
If Name(K) <> "*"
Set CountM = CountM + 1
Set Sum = Sum + Salary
Else
BreakLoop
End If
End While (true)
إنه ليس فرقًا كبيرًا حقًا، ولكنه مسألة ذوق حقًا.أنا شخصياً أعتقد أنه من الأسهل قراءته، نظرًا لأن الكود مكتوب بطريقة تجعلك تدرك بسهولة أنه من المفترض أن تقوم بإدخال شيء ما، والتحقق من الإدخال والقيام بشيء اعتمادًا على الإدخال.
في حلقة while الخاصة بك، يأتي Set CountM وما إلى ذلك بعد (في تدفق النص) الإدخال الأول، ولكن قبل بقية الإدخال، مما يعني أنه يتعين عليك الرجوع إلى الجزء العلوي من الحلقة لفهم أنها تفعل شيئًا ما بعد الإدخال السابق "الجولة" في الحلقة.الآن هذه مجرد حلقة صغيرة، ولكن إذا كان طولها 30 صفًا (لا سمح الله)، فسيتعين عليك التمرير لأعلى لترى ما يحدث.إذا كنت تعرف ما أعنيه :)
FINAL ALGORITHM
START
OUTPUT "Enter the number of parcels"
INPUT NUMBEROFPARCELS
INTEGER PRICE = 0
INTEGER PARCELWEIGHT [1:NUMBEROFPARCELS]
INTEGER TOTALPRICE = 0
FOR PARCELLOOP = 1 TO NUMBEROFPARCELS
INTEGER REJECT = 0
INTEGER ACCEPT = 0
INTEGER ACCEPTWEIGHT = 0
INTEGER REJECTEDPARCELS = 0
OUTPUT "Enter the weight of the parcel in kg"
INPUT WEIGHT
IF (WEIGHT < 1) THEN
REJECT = REJECT + 1
OUTPUT "The weight of the parcel should be atleast 1kg"
ELSE
IF (WEIGHT > 10) THEN
REJECT = REJECT + 1
OUTPUT "The weight of the parcel should be less than 10kg"
ENDIF
IF (WEIGHT > 1) THEN
IF (WEIGHT < 10) THEN
PARCELWEIGHT[PARCELLOOP] = WEIGHT
ENDIF
ENDIF
OUTPUT "Enter the first dimension of the parcel in cm"
INPUT DIMENSION1
IF (DIMENSION1 > 80 ) THEN
REJECT = REJECT + 1
OUTPUT "Each dimension of the parcel should be less than 80"
ENDIF
OUTPUT "Enter the second dimension of the parcel in cm"
INPUT DIMENSION2
IF (DIMENSION2 > 80 ) THEN
REJECT = REJECT + 1
OUTPUT "Each dimension of the parcel should be less than 80"
ENDIF
OUTPUT "Enter the third dimension of the parcel in cm"
INPUT DIMENSION3
IF (DIMENSION3 > 80 ) THEN
REJECT = REJECT + 1
OUTPUT "Each dimension of the parcel should be less than 80"
ENDIF
TOTALDIMENSION = DIMENSION1 + DIMENSION2 + DIMENSION3
IF (TOTALDIMENSION > 200 ) THEN
REJECT = REJECT + 1
OUTPUT "The size of the parcel should be less than 200cm"
ENDIF
IF (REJECT > 0 ) THEN
OUTPUT "Your parcel has been rejected for the reasons above"
REJECTEDPARCELS = REJECTEDPARCELS + 1
ENDIF
IF (REJECT = 0)THEN
OUTPUT "Your parcel has been accepted"
ACCEPT = ACCEPT + 1
ACCEPTWEIGHT = ACCEPTWEIGHT + WEIGHT
END IF
INTEGER PARCELSACCEPTED = ACCEPT
INTEGER TOTALWEIGHT = ACCEPTWEIGHT
INTEGER PARCELSREJECTED = REJECTEDPARCELS
OUTPUT "The number of parcels accepted is " PARCELSACCEPTED " and the total weight of the parcels is " TOTALWEIGHT
OUTPUT "The number of parcels rejected is " PARCELSREJECTED
NEXT PARCELLOOP
FOR PRICELOOP = 1 TO NUMBEROFPARCELS
IF (PARCELWEIGHT[PARCELLOOP] < 5) THEN
PRICE = PRICE + 10
TOTALPRICE = TOTALPRICE +PRICE
END IF
IF (PARCELWEIGHT[PARCELLOOP] > 5) THEN
PRICE = ((PARCELWEIGHT[PARCELLOOP] - 5)*0.10)/100
TOTALPRICE = TOTALPRICE +PRICE
END IF
OUTPUT "The price of the parcel is " PRICE
NEXT PRICELOOP
OUTPUT "The total price of all the parcels is " TOTALPRICE
STOP