Помощ за C++ задача
Автор |
|
nik2009Чет, 26.10.17, 23:09 |
Здравейте, занимавам се само със C#, но имам задача за домашна която е на C++ и моля за помощ, че там синтаксисът ми е труден и не съм се занимавал. Условието е: Да се напише програма реализираща въвеждане от клавиатурата на броя присъстващи студенти на занятие за всеки от 30 поредни дни. - Да се изведе с цифри денят с най-малко присъстващи студенти и минималния брой присъстващи студенти - да се изведе общия брой студенти - да се изведат дните , в които са присъствали над 12 студенти Благодаря! редактиран от nik2009 на 26.10.17 23:10 | | drevenПет, 27.10.17, 11:41 |
Аз също не се занимавам със C++, но на Visual Basic 6.0 тази задачка се решава елегантно с няколко реда сорс. За реализацията е необходимо само едно текстово поле и 3 броя Label, за визуализация:
Ето го и целия сорс: '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim masiv(1 To 30), den, Min Private Sub Form_Load() Min = 1 End Sub Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) ' Въвеждаме студентите за 30 дни If KeyCode = 13 Then ' тоест при натискане на Enter den = den + 1 ' увеличаваме дните с един, започвайки от 0 masiv(den) = Val(Text1.Text) ' Въвеждаме броя на студентите в масива Label1.Caption = den + 1 & " ден" ' Визуализираме следващия ден Me.Print den & " ден: " & Val(Text1.Text) ' Визуализираме въведените данни на формата Text1.Text = "" ' Изчистваме текстовото поле, подготвяйки го следващо въвеждане 'определяме деня с най-малко студенти If masiv(den) <= masiv(Min) Then Min = den: Label2.Caption = "Минимален брой на " & Min & " ден" Label3.Caption = Val(Label3.Caption) + masiv(den) & " студенти общ брой" ' Общ брой студенти If masiv(den) > 12 Then Label4.Caption = Label4.Caption & den & "; " If den = 30 Then Text1.Visible = False: Label1.Visible = False 'скриваме полето за въвеждане и надписа за дните End If End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Ето и проекта на програмката, в който има и компилирано ехе:Primer.zip След като напишеш задачката на C++ , бих се радвал да видя как изглежда сорса. Интересува ме от чисто академичен интерес. редактиран от dreven на 27.10.17 11:48 | | dreamskillПет, 27.10.17, 16:51 |
#include <iostream>
using namespace std;
int main(int argc, char** argv) {
int day = 0;
int days[29];
int min = 0;
int min_day = 0;
int total = 0;
bool good_days[29];
for (day = 0; day < 30; day++) {
cout << "Въведете присъстващите студенти за ден " << day + 1 << endl;
cin >> days[day];
total += days[day];
if (day > 0) {
if (min > days[day]) {
min = days[day];
min_day = day;
}
} else {
min = days[day];
}
if (days[day] > 12) {
good_days[day] = true;
} else {
good_days[day] = false;
}
}
cout << "Общо: " << total << endl;
cout << "Най-малко студенти са дошли на ден " << min_day + 1 << " и са били " << min << " на брой." << endl;
cout << "Дни с над 12 студенти: ";
for (day = 0; day < 30; day++) {
if (good_days[day]) {
cout << day + 1 << ',';
}
}
return 0;
} |
Едно от решенията. От теб се изисква: -да провериш дали въведеното е число, защото ако въведеш нещо друго освен int се прецаква; -да промениш min_day в масив, за да може да показва повече дни, ако минималния брой студенти се повтаря; -накрая като изброява дните с над 12 студенти, вместо последната запетая да се появи точка. ” Аз също не се занимавам със C++, но на Visual Basic 6.0 тази задачка се решава елегантно с няколко реда сорс. За реализацията е необходимо само едно текстово поле и 3 броя Label, за визуализация:
Ето го и целия сорс: '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Dim masiv(1 To 30), den, Min Private Sub Form_Load() Min = 1 End Sub Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) ' Въвеждаме студентите за 30 дни If KeyCode = 13 Then ' тоест при натискане на Enter den = den + 1 ' увеличаваме дните с един, започвайки от 0 masiv(den) = Val(Text1.Text) ' Въвеждаме броя на студентите в масива Label1.Caption = den + 1 & " ден" ' Визуализираме следващия ден Me.Print den & " ден: " & Val(Text1.Text) ' Визуализираме въведените данни на формата Text1.Text = "" ' Изчистваме текстовото поле, подготвяйки го следващо въвеждане 'определяме деня с най-малко студенти If masiv(den) <= masiv(Min) Then Min = den: Label2.Caption = "Минимален брой на " & Min & " ден" Label3.Caption = Val(Label3.Caption) + masiv(den) & " студенти общ брой" ' Общ брой студенти If masiv(den) > 12 Then Label4.Caption = Label4.Caption & den & "; " If den = 30 Then Text1.Visible = False: Label1.Visible = False 'скриваме полето за въвеждане и надписа за дните End If End Sub '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Ето и проекта на програмката, в който има и компилирано ехе:Primer.zip След като напишеш задачката на C++ , бих се радвал да видя как изглежда сорса. Интересува ме от чисто академичен интерес. „
Твоята програма не показва минималния брой присъстващи студенти. Думата "студент" няма бройна форма за мн.ч. и се използва числителната форма ("студенти", а не "студента"). | | drevenПет, 27.10.17, 20:13 |
Да валидация на входните данни трябва да има, съгласен съм. Относно правописната грешка за думата студенти, също съм съгласен . Но не разбирам, защо трябва допълнителен масив? Нещо повече, чудя се защо изобщо съм използвал дори един масив, като масиви изобщо не са нужни. Навярно по инерция. Ето как виждам нещата още по-просто и елегантно. Без масиви, без цикли: Dim den, Min, Student
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 13 Then
On Error GoTo Alarm: If Text1.Text <> Int(Text1.Text) Then GoTo Alarm
den = den + 1: Vavedeno = Val(Text1.Text)
If den = 1 Then Student = Vavedeno: Min = 1: Label2.Caption = "Дни с минимално присъствие =>1;"
Label1.Caption = den + 1 & " ден": Me.Print den & " ден: " & Vavedeno: Text1.Text = ""
If Vavedeno < Student Then Min = den: Student = Vavedeno: Label2.Caption = "Дни с минимално присъствие =>" & Min & ";"
If Vavedeno = Student And den <> Min Then Min = den: Student = Vavedeno: Label2.Caption = Label2.Caption & Min & ";"
If Vavedeno > 12 Then Label4.Caption = Label4.Caption & den & "; "
Label3.Caption = Val(Label3.Caption) + Vavedeno & " студенти общ брой."
If den = 30 Then Text1.Visible = False: Label1.Visible = False
End If
Exit Sub
Alarm: MsgBox "Трябва да въведете цяло число за брой студенти!", vbCritical, "Грешка при въвеждане": Text1.Text = ""
End Sub |
Ето и новото по-просто проектче:Primer.zip редактиран от dreven на 27.10.17 20:14 | | dinko89Съб, 28.10.17, 12:11 | | | dinko89Съб, 28.10.17, 12:19 | RE: Помощ за C++ задача
” #include <iostream>
using namespace std;
int main(int argc, char** argv) {
int day = 0;
int days[29];
int min = 0;
int min_day = 0;
int total = 0;
bool good_days[29];
for (day = 0; day < 30; day++) {
cout << "Въведете присъстващите студенти за ден " << day + 1 << endl;
cin >> days[day];
total += days[day];
if (day > 0) {
if (min > days[day]) {
min = days[day];
min_day = day;
}
} else {
min = days[day];
}
if (days[day] > 12) {
good_days[day] = true;
} else {
good_days[day] = false;
}
}
cout << "Общо: " << total << endl;
cout << "Най-малко студенти са дошли на ден " << min_day + 1 << " и са били " << min << " на брой." << endl;
cout << "Дни с над 12 студенти: ";
for (day = 0; day < 30; day++) {
if (good_days[day]) {
cout << day + 1 << ',';
}
}
return 0;
} |
„
А сега видях ,че дори го имаш и на С++ | | nik2009Чет, 09.11.17, 09:06 | RE: Помощ за C++ задача
”
Ето и проекта на програмката, в който има и компилирано ехе: Primer.zipСлед като напишеш задачката на C++ , бих се радвал да видя как изглежда сорса. Интересува ме от чисто академичен интерес. „
Ето и вариант на C++ който ми написаха. #include <iostream>
using namespace std;
int main()
{
int days[30];
for (int i = 0; i < sizeof(days); i++)
{
cin >> days[i];
}
int minDay = days[0];
int minimal = days[0];
int attendance = 0;
int over12 = 0;
for (int i = 1; i < sizeof(days); i++)
{
if (days[i] < minimal)
{
minimal = days[i];
minDay = i + 1;
}
else
{
minDay = 1;
}
}
for (int i = 0; i < sizeof(days); i++)
{
attendance += days[i];
}
for (int i = 0; i < sizeof(days); i++)
{
if (days[i] > 12)
{
over12 += 1;
}
}
cout << "Day with fewest attendance: Day " << minDay << " - " << minimal << " students" << endl;
cout << "Attendance: " << attendance << endl;
cout << "Days with over 12 students: " << over12 << endl;
return 0;
} |
Аз съм в началото още и изучавам C# и затова на C++ ми е мъгла. Благодаря на всички, за помощта, а пък за Конвертера чувам за пръв път и съм много благодарен, че ще върши работа за напред. Ще го пробвам. | | drevenЧет, 09.11.17, 18:52 | RE: RE: Помощ за C++ задача
” Ето и вариант на C++ който ми написаха. „
На пръв прочит на сорса виждам несъвпадения с условието на задачата. - Да се изведе с цифри денят с най-малко присъстващи студенти и минималния брой присъстващи студентиminDay трябва да ти даде денят с най- малко студенти. Представи си, че предпоследния ден са отишли най-малко студенти, а в последния най-много то IF-a ще ти даде minDay=1, а би трябвало да е 29. В условието е написано: - да се изведат дните , в които са присъствали над 12 студентиА при теб няма да се изведат конкретните дни, в които студентите са над 12, а ще се изведе колко на брой дни си имал студенти над 12. Тези разсъждения ги правя само при четене на сорса и е възможно да греша. Все пак трябва да се стартира сорса и да се види реално какво прави. | | Коментар |