{
if (strcmp(spisok.name, spisok[k].name) == 1) [COLOR=seagreen]//spisok.name > spisok[k].name[/COLOR]
{
for (int a = 0; a<20; a++)
{b[a]=spisok.name[a];
spisok.name[a]=spisok[k].name[a];
spisok[k].name[a]=b[a];
d[a]=spisok.uspevaemost[a];
spisok.uspevaemost[a]=spisok[k].uspevaemost[a];
spisok[k].uspevaemost[a]=d[a];
}
Структуры
Цитата:
Описать структуру с именем STUDENT, содержащую следующие поля:
- фамилия и инициалы;
- номер группы;
- успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT;
- упорядочивать записи по алфавиту;
- вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 8 и 9;
- если таких студентов нет, вывести соответствующее сообщение.
- фамилия и инициалы;
- номер группы;
- успеваемость (массив из пяти элементов).
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT;
- упорядочивать записи по алфавиту;
- вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 8 и 9;
- если таких студентов нет, вывести соответствующее сообщение.
Вот моё решение:
Цитата:
#include "iostream.h"
#include "stdio.h"
int ident;
char b[20];
long c;
char d[20];
struct student
{ char name[20];
long group;
char uspevaemost[20];
} spisok[10];
void main()
{
for (int i=0;i<3;i++)
{ cout<<endl<<"Vvedite svedeniya o studente "<<i+1<<endl<<endl;
cout<<"Familiya i iniciali"<<endl;
cin.getline(spisok.name, sizeof(spisok.name));
cout<<"Nomer gruppi"<<endl;
cin>>spisok.group;
cin.ignore();
cout<<"Uspevaemost (5 ocenok)"<<endl;
cin.getline(spisok.uspevaemost, sizeof(spisok.uspevaemost));
}
for (int k = 2; k >= 0; k--)
for (int i = 0; i < k; i++)
for (int j = 19; j >= 0; j--)
{if (spisok.name[j] > spisok[k].name[j])
{for (int a = 0; a<20; a++)
{b[a]=spisok.name[a];
spisok.name[a]=spisok[k].name[a];
spisok[k].name[a]=b[a];
d[a]=spisok.uspevaemost[a];
spisok.uspevaemost[a]=spisok[k].uspevaemost[a];
spisok[k].uspevaemost[a]=d[a];
}
c=spisok.group;
spisok.group=spisok[k].group;
spisok[k].group=c;
}
}
for (int j=0; j<3; j++)
{for (int k=0; k<20; k++)
{if (spisok.uspevaemost[k]==8||spisok.uspevaemost[k]==9)
ident=ident+1;
}
if (ident==5)
{
cout<<spisok[j].name;
cout<<" gruppa "<<spisok[j].group;
cout<<" ocenki "<<spisok[j].uspevaemost<<endl;
}
}
if (ident==0)
cout<<"Studentov s ocenkami 8 i 9 ne sushcestvuet"<<endl;
}
#include "stdio.h"
int ident;
char b[20];
long c;
char d[20];
struct student
{ char name[20];
long group;
char uspevaemost[20];
} spisok[10];
void main()
{
for (int i=0;i<3;i++)
{ cout<<endl<<"Vvedite svedeniya o studente "<<i+1<<endl<<endl;
cout<<"Familiya i iniciali"<<endl;
cin.getline(spisok.name, sizeof(spisok.name));
cout<<"Nomer gruppi"<<endl;
cin>>spisok.group;
cin.ignore();
cout<<"Uspevaemost (5 ocenok)"<<endl;
cin.getline(spisok.uspevaemost, sizeof(spisok.uspevaemost));
}
for (int k = 2; k >= 0; k--)
for (int i = 0; i < k; i++)
for (int j = 19; j >= 0; j--)
{if (spisok.name[j] > spisok[k].name[j])
{for (int a = 0; a<20; a++)
{b[a]=spisok.name[a];
spisok.name[a]=spisok[k].name[a];
spisok[k].name[a]=b[a];
d[a]=spisok.uspevaemost[a];
spisok.uspevaemost[a]=spisok[k].uspevaemost[a];
spisok[k].uspevaemost[a]=d[a];
}
c=spisok.group;
spisok.group=spisok[k].group;
spisok[k].group=c;
}
}
for (int j=0; j<3; j++)
{for (int k=0; k<20; k++)
{if (spisok.uspevaemost[k]==8||spisok.uspevaemost[k]==9)
ident=ident+1;
}
if (ident==5)
{
cout<<spisok[j].name;
cout<<" gruppa "<<spisok[j].group;
cout<<" ocenki "<<spisok[j].uspevaemost<<endl;
}
}
if (ident==0)
cout<<"Studentov s ocenkami 8 i 9 ne sushcestvuet"<<endl;
}
Но это решение не работает, мне кажется, всё дело в строчке
"if (spisok.uspevaemost[k]==8||spisok.uspevaemost[k]==9)"
Что у меня неправильно и как исправить всё это?
strcpy(spisok.name[a],spisok[k].name[a]);
потом для сравнения строк используется функция strcmp(str1, str2),
а для сортировки структур не надо писать код:
Код:
достаточно написать:
Код:
if (strcmp(spisok.name, spisok[k].name) == 1)
{
struct student temp = spisok;
spisok = spisok[k];
spisok[k] = temp;
}
{
struct student temp = spisok;
spisok = spisok[k];
spisok[k] = temp;
}
т.к. массив структур фактически содержит в себе указатели на них, правильнее и быстрее поменять местами указатели, чем данные на которые они указывают.
насчет функции strcpy, Мерлин прав, она преднозначена для копирования строк, никто посимвольно это не делает.
функции strcpy, strcmp находятся в <string.h>
1) Для чего нужна cin.ignore в char массиве и почему бесполезна в int?
2) У меня эта строчка:
Цитата:
cout<<"Uspevaemost (5 ocenok)"<<endl;
for (j = 0; j < 5; j++)
{
cin>>spisok.uspevaemost[j];
}
[QUOTE]
Ждёт ввода 5 чисел. Как сделать так, чтобы при вводе менее 5 чисел и нажатии Энтер программа выдавала сообщение: Введите 5 чисел?
Вот и текст моей проги:
[QUOTE]#include "iostream.h"
#include "stdio.h"
int ident, ident2=0;
int i, j, k;
struct student
{char name[20];
long group;
int uspevaemost[5];
} spisok[10];
void main()
{
for (i = 0; i < 3; i++)
{
cout<<endl<<"Vvedite svedeniya o studente "<<i+1<<endl<<endl;
cout<<"Familiya i iniciali"<<endl;
gets(spisok.name);
cout<<"Nomer gruppi"<<endl;
cin>>spisok.group;
cin.ignore();
cout<<"Uspevaemost (5 ocenok)"<<endl;
for (j = 0; j < 5; j++)
{
cin>>spisok.uspevaemost[j];
}
}
for (k = 2; k >= 0; k--)
for (i = 0; i < k; i++)
for (j = 19; j >= 0; j--)
{
if (spisok.name[j] > spisok[k].name[j])
{
struct student temp = spisok;
spisok = spisok[k];
spisok[k] = temp;
}
}
for (i = 0; i < 3; i++)
{
ident = 0;
for (k = 0; k < 5; k++)
{
if (spisok.uspevaemost[k]==8||spisok.uspevaemost[k]==9)
{
ident++;
}
if (ident == 5)
{
cout<<spisok.name;
cout<<" gruppa "<<spisok.group;
cout<<" ocenki ";
for (j = 0; j < 5; j++)
{
cout<<spisok.uspevaemost[j]<<" ";
}
cout<<endl;
ident2++;
}
}
}
if (ident2 == 0)
cout<<"Studentov s ocenkami 8 i 9 ne sushcestvuet"<<endl;
}
for (j = 0; j < 5; j++)
{
cin>>spisok.uspevaemost[j];
}
[QUOTE]
Ждёт ввода 5 чисел. Как сделать так, чтобы при вводе менее 5 чисел и нажатии Энтер программа выдавала сообщение: Введите 5 чисел?
Вот и текст моей проги:
[QUOTE]#include "iostream.h"
#include "stdio.h"
int ident, ident2=0;
int i, j, k;
struct student
{char name[20];
long group;
int uspevaemost[5];
} spisok[10];
void main()
{
for (i = 0; i < 3; i++)
{
cout<<endl<<"Vvedite svedeniya o studente "<<i+1<<endl<<endl;
cout<<"Familiya i iniciali"<<endl;
gets(spisok.name);
cout<<"Nomer gruppi"<<endl;
cin>>spisok.group;
cin.ignore();
cout<<"Uspevaemost (5 ocenok)"<<endl;
for (j = 0; j < 5; j++)
{
cin>>spisok.uspevaemost[j];
}
}
for (k = 2; k >= 0; k--)
for (i = 0; i < k; i++)
for (j = 19; j >= 0; j--)
{
if (spisok.name[j] > spisok[k].name[j])
{
struct student temp = spisok;
spisok = spisok[k];
spisok[k] = temp;
}
}
for (i = 0; i < 3; i++)
{
ident = 0;
for (k = 0; k < 5; k++)
{
if (spisok.uspevaemost[k]==8||spisok.uspevaemost[k]==9)
{
ident++;
}
if (ident == 5)
{
cout<<spisok.name;
cout<<" gruppa "<<spisok.group;
cout<<" ocenki ";
for (j = 0; j < 5; j++)
{
cout<<spisok.uspevaemost[j]<<" ";
}
cout<<endl;
ident2++;
}
}
}
if (ident2 == 0)
cout<<"Studentov s ocenkami 8 i 9 ne sushcestvuet"<<endl;
}
Вариант 4
1) Описать структуру с именем RESISTOR, содержащую следующие по-
ля:
• TYPE — тип резистора;
• VALUE — номинал;
• POWER — Рассеиваемая мощность (массив из пяти элементов).
2) Написать программу, выполняющую следующие действия:
• ввод с клавиатуры данных в массив RESISTORS, состоящий из се-
ми элементов типа RESISTOR; записи должны быть упорядочены по
возрастанию рассеиваемой мощности;
• вывод на экран номиналов резисторов и их рассеиваемой мощно-
сти, тип которого совпал с типом, введенным с клавиатуры;
• если такого типа резистора нет, вывести соответствующее сообще-
ние.
И еще препод злодей такой поставил ограничения: В данном задании НЕ ИСПОЛЬЗОВАТЬ классы и объекты для работы со строками, а
также динамическое выделение памяти. HELP PLEASE!!
Значения резисторов нужно вводить как с клавиатуры, так они еще должны быть константами то есть на выбор.
Значения резисторов:
R1=0.25 Ом
R2=0.5 Ом
R3=1 Ом
R4=2.5 Ом
R5=5 Ом
help Ни кто не может помочь? сессия на носу