@
@rtem
Всем привет, есть пара вопросов по С++, помогаю делать знакомому задания, вот хотелось бы спросить.
Первое:
И второе
тут все работает но меня смущает эта функция void Reverse_array(double ar[], int n) необходимо сделать реверс элементов массива, кроме первого и последнего. Я сделал, но что то мне кажется что можно сделать красивее, так что если кто знает подскажите.
Всем спасибо.
Первое:
Код:
#include <iostream>
using namespace std;
const int SLEN = 30;
struct student {
char fullname[SLEN];
char hobby[SLEN];
int ooplevel;
};
int getinfo(student pa[], int n);
void display1(student st);
void display2(const student *ps);
void display3(const student pa[], int n);
int main() {
cout << " Введите количество студентов : ";
int class_size;
cin >> class_size;
while (cin.get() != '\n')
continue;
student *ptr_stu = new student[class_size];
int entered = getinfo(ptr_stu, class_size);
for (int i = 0; i < entered; i++) {
display1(ptr_stu[i]);
display2(&ptr_stu[i]);
}
display3(ptr_stu, entered);
delete [] ptr_stu;
cout << " Готово." << endl;
return 0;
}
int getinfo(student pa[], int n) {
int i;
cout << " Заполните массив структур "Студент"" << endl;
for (i = 0; i < n; i++) {
cout << " Полное имя : ";
cin.getline(pa[i].fullname, SLEN);
//if (pa[i].fullname == '\n') { break; } // ----- в этом и есть ошибка мне нужно сделать так, чтобы при вводе пустой строки заполнение структуры прекращалось.
cout << " Хобби : ";
cin.getline(pa[i].hobby, SLEN);
cout << " Уровень ООП : ";
(cin >> pa[i].ooplevel).get();
cout << endl << " Новый студент " << endl;
}
return i;
}
void display1(student st) {
cout << endl << " Полное имя студента : " << st.fullname << endl;
cout << " Хобби студента : " << st.hobby << endl;
cout << " Уровень ООП студетна : " << st.ooplevel << endl;
}
void display2(const student *ps) {
cout << endl << " Полное имя студента : " << ps->fullname << endl;
cout << " Хобби студента : " << ps->hobby << endl;
cout << " Уровень ООП студетна : " << ps->ooplevel << endl;
}
void display3(const student pa[], int n) {
cout << endl << "********** Вся структура **********" << endl;
for (int i = 0; i < n; i++) {
cout << endl << " Полное имя студента : " << pa[i].fullname << endl;
cout << " Хобби студента : " << pa[i].hobby << endl;
cout << " Уровень ООП студетна : " << pa[i].ooplevel << endl;
}
}
И второе
Код:
#include <iostream>
using namespace std;
int Fill_array(double ar[], int n);
void Show_array(const double ar[], int n);
void Reverse_array(double ar[], int n);
const int arrSize = 10;
int main() {
double newArray[arrSize];
int size = Fill_array(newArray, arrSize);
Show_array(newArray, size);
Reverse_array(newArray, size);
Show_array(newArray, size);
return 0;
}
int Fill_array(double ar[], int n) {
int i;
int tmp;
for (i = 0; i < n; i++) {
cout << " Enter a value #"<< (i + 1) << " : ";
cin >> tmp;
if (!cin) {
cin.clear();
while (cin.get() != '\n')
continue;
cout << " Bad input; input process terminated." << endl;
break;
}
else if (tmp < 0) {
cout << " Exit input process." << endl;
break;
}
ar[i] = tmp;
}
return i;
}
void Show_array(const double ar[], int n) {
cout << endl << " Array elements " << endl;
for (int i = 0; i < n; i++) {
cout << " Value of #" << (i + 1) << " " << ar[i] << endl;
}
}
void Reverse_array(double ar[], int n) {
double tmp[n];
int j = n - 1;
for (int i = 1; i < j; i++) {
tmp[i] = ar[j - i];
}
for (int i = 1; i < j; i++) {
ar[i] = tmp[i];
}
}
тут все работает но меня смущает эта функция void Reverse_array(double ar[], int n) необходимо сделать реверс элементов массива, кроме первого и последнего. Я сделал, но что то мне кажется что можно сделать красивее, так что если кто знает подскажите.
Всем спасибо.