Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
#1

Задание на создание и работу с классами - C++

14.03.2011, 20:36. Просмотров 1045. Ответов 18
Метки нет (Все метки)

Есть задание:
1.Описать класс с именем STUDENT, содержащий следующие поля:
фамилия и инициалы;
номер группы;
успеваемость (массив из пяти элементов).
2.Написать программу, выполняющую следующие действия:
ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT;
записи должны быть упорядочены но возрастанию среднего балла;
вывод на дисплей фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5; если таких студентов нет, вывести соответствующее сообщение.
Вот моя программная реализация,котораЯ не работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <conio.h>
using namespace std;
class STUDENT
{
 
public :
    char firstname[len];
    char lastname[len]; 
    int groupnumber;
    int label[5];
    
}
bool good(int *a,int n)
{bool ok=true;
for (int i=0;i<n;i++)
{
    if (a[i]<4) {ok=false;break;}
 
}
 
return (ok);
    }
float sred(int *a,int n)
{float j=0;
    for (int i=0;i<n;i++)
    j+=a[i];
    
return(j/n*1.0);
 
}   
void main()
{setlocale(LC_ALL,"Russian");
STUDENT a[max];float labelsred[max];int index[max];
cout<<"Программа:\n";
cout<<"1)Cоздает списки студентов!\n";
cout<<"2)Сортирует по успеваемости и выводит!\n";
cout<<"3)Выводит списки студентов,имеющих 4 и 5!\n";
cout<<"~~~~~~~~~~~~~~~~~~~~1~~~~~~~~~~~~~~~~~~~~\n";
for (int l=0;l<max;l++)
{
 cout<<"Введите фамилию"<<l<<"-го"<<" студента:";
 cin.getline(a[l].firstname,len);
cout<<"Введите имя"<<l<<"-го"<<" студента!";
cin.getline(a[l].lastname,len);
cout<<"Номер группы:";cin>>a[l].groupnumber;
for (int p=0;p<5;p++)
{ cout <<"Введите отметку по "<<p<<"-й дисциплине:";
    cin>>a[l].label[p];
 
}
labelsred[l]=sred(&a[l].label[1],5);
index[l]=l;
}
float buffer1;int n,m,buffer2;
n=max;
for (int i=0;i<n;i++)
{m=i;
 for (int j=i+1;j<n-1;j++)
 {
     if (labelsred[j]<labelsred[m]) 
     {m=j;
     buffer1=labelsred[i];
    labelsred[i]=labelsred[m];
    labelsred[m]=buffer1;
    buffer2=index[i];
    index[i]=index[m];
    index[m]=buffer2;
     }
 
 }
 for (int y=0;y<max;y++)
 cout<<index[y]<<")"<<labelsred[y]<<endl;
}
getch();
}
Сделал ее только до половины,да вот только не работает!!!
http://www.cyberforum.ru/cpp-beginners/thread1948706.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.03.2011, 20:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Задание на создание и работу с классами (C++):

Придумайте, пожалуйста, задание с классами - только интересное
Вот стало скучно хочу что-то написать придумайте задание только что-то...

Написал задание с классами, по примеру, но в public выдает ошибки, незнаю как их переделать :)
# include &quot;stdafx.h&quot; # include &lt;conio.h&gt; #include &lt;iostream&gt; #include...

Задание на работу со односвязными списками
Нужна помощь Задание: В составе программы описать функцию которая меняет...

Написать ответы на тестовое задание при приёме на работу (исключения, sizeof, mutex)
Добрый день! Ходил недавно на собеседование. Имеется список вопросов, на...

Задание на создание классов
Дорогие коллеги! Помогите новичку разобраться с этим заданием! Задание на...

18
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
14.03.2011, 20:40 #2
Цитата Сообщение от REALIST07 Посмотреть сообщение
bool good(int *a,int n)
{bool ok=true;
for (int i=0;i<n;i++)
{
if (a[i]<4) {ok=false;break;}
}
где возвращаемое значение?
компилятор должен был написать ошибку?
return ok;
0
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
14.03.2011, 20:42  [ТС] #3
Цитата Сообщение от REALIST07 Посмотреть сообщение
return (ok);
вот он
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
14.03.2011, 20:46 #4
Цитата Сообщение от REALIST07 Посмотреть сообщение
&a[l].label[1]
массивы начинаются с 0

Добавлено через 4 минуты
сделай функции проверки успеваемости и средний балл членами класса
0
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
14.03.2011, 20:47  [ТС] #5
Ну это ладно тут он пару десятков ошибок выдает,вот программа сама
0
Вложения
Тип файла: rar Classes.rar (1.79 Мб, 24 просмотров)
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
14.03.2011, 20:48  [ТС] #6
Я просто только начал изучать-совсем не в теме,подправьте если вариант
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
14.03.2011, 21:12 #7
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}

void main()
для начала у тебя две точки входа зачем???

Добавлено через 18 минут
#define len 256
class STUDENT
в начале файла MyClass.h
это явно мусор предыдуший
он не дает скомпильнуть
дальше класс у тебя описан и в h и в cpp файлах
два определения тоже ошибка компиляции
0
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
14.03.2011, 21:16  [ТС] #8
ValeryS ,подпраь прогу если можешь

Добавлено через 13 секунд
я выше исходник выложил
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
14.03.2011, 21:26 #9
твой проект у меня не идет VS2010 у меня VS2008
создал свой проект скопировал текст из первого поста все скомпилилось после доработки напильником
Цитата Сообщение от REALIST07 Посмотреть сообщение
len
Цитата Сообщение от REALIST07 Посмотреть сообщение
max
пришлось объявить
Цитата Сообщение от REALIST07 Посмотреть сообщение
class STUDENT
{
public :
char firstname[len];
char lastname[len];
int groupnumber;
int label[5];
}
в конце ;
ошибки алгритмические
не проверяется оценка хоть 100 напиши
если вместо номера группы написать строку программа идет вразнос
проверяй вводимые значения
0
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
14.03.2011, 21:32  [ТС] #10
Каким образом?

Добавлено через 3 минуты
ааа туплю блин,я понял просто проблема в том что в модуле хранится
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,211
14.03.2011, 21:35 #11
в смысле???
создал пустой проект
скопировал туда твою прогу(из первого поста и запустил)
0
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
14.03.2011, 21:56  [ТС] #12
Щас программу полностью переделаю-посмотрим

Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "stdafx.h"
#define len 16
#define MAX 5
 
 
#include <iostream>
#include <conio.h>
using namespace std;
class STUDENT
{
 
public :
        char firstname[len];
        char lastname[len]; 
        int groupnumber;
        int label[5];
        
};
bool good(int *a,int n)
{bool ok=true;
for (int i=0;i<n;i++)
if (a[i]<4) {ok=false;break;}
 return (ok);
        }
float sred(int *a,int n)
{float j=0;
        for (int i=0;i<n;i++)
        j+=a[i];
        
return (j/n*1.0);
 
}       
void main()
{setlocale(LC_ALL,"Russian");
STUDENT a[MAX];float labelsred[MAX];int index[MAX];int i,j;
cout<<"Программа:\n";
cout<<"1)Cоздает списки студентов!\n";
cout<<"2)Сортирует по успеваемости и выводит!\n";
cout<<"3)Выводит списки студентов,имеющих 4 и 5!\n";
cout<<"~~~~~~~~~~~~~~~~~~~~1~~~~~~~~~~~~~~~~~~~~\n";
for (i=0;i<MAX;i++)
{
 cout<<"Введите фамилию"<<i+1<<"-го"<<" студента:";
 cin.getline(a[i].firstname,len);
cout<<"Введите имя"<<i+1<<"-го"<<" студента:";
cin.get(a[i].lastname,len);
cout<<"Номер группы:";cin>>a[i].groupnumber;
for (j=0;j<5;j++)
{ cout <<"Введите отметку по "<<j+1<<"-й дисциплине:";
        cin>>a[i].label[j];
 
}
labelsred[i]=sred(&a[i].label[0],5);
index[i]=i;
}
float buffer1;int n,m,buffer2;
n=MAX;
for (int i=0;i<n;i++)
{m=i;
 for (int j=i+1;j<n-1;j++)
 {
         if (labelsred[j]<labelsred[m]) 
         {m=j;
         buffer1=labelsred[i];
    labelsred[i]=labelsred[m];
    labelsred[m]=buffer1;
        buffer2=index[i];
        index[i]=index[m];
        index[m]=buffer2;
         }
 
 }
 for (int y=0;y<MAX;y++)
 cout<<index[y]<<")"<<labelsred[y]<<endl;
}
getch();
}
Вроде бы исправил,но почему после второго раза набор фамилии и имени слепаются???
0
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
14.03.2011, 22:36 #13
Цитата Сообщение от REALIST07 Посмотреть сообщение
Вроде бы исправил,но почему после второго раза набор фамилии и имени слепаются???
Забыл почистить входной поток
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#define len 16
#define MAX 5
 
 
#include <iostream>
#include <conio.h>
using namespace std;
class STUDENT
{
 
public :
        char firstname[len];
        char lastname[len];
        int groupnumber;
        int label[5];
 
};
bool good(int *a,int n)
{bool ok=true;
for (int i=0;i<n;i++)
if (a[i]<4) {ok=false;break;}
 return (ok);
        }
float sred(int *a,int n)
{float j=0;
        for (int i=0;i<n;i++)
        j+=a[i];
 
return (j/n*1.0);
 
}
int main()
{setlocale(LC_ALL,"Russian");
STUDENT a[MAX];float labelsred[MAX];int index[MAX];int i,j;
cout<<"Программа:\n";
cout<<"1)Cоздает списки студентов!\n";
cout<<"2)Сортирует по успеваемости и выводит!\n";
cout<<"3)Выводит списки студентов,имеющих 4 и 5!\n";
cout<<"~~~~~~~~~~~~~~~~~~~~1~~~~~~~~~~~~~~~~~~~~\n";
for (i=0;i<MAX;i++)
{
 cout<<"Введите фамилию"<<i+1<<"-го"<<" студента:";
 cin.sync();//!!!
 cin.getline(a[i].firstname,len);
cout<<"Введите имя"<<i+1<<"-го"<<" студента:";
cin.get(a[i].lastname,len);
cout<<"Номер группы:";cin>>a[i].groupnumber;
for (j=0;j<5;j++)
{ cout <<"Введите отметку по "<<j+1<<"-й дисциплине:";
        cin>>a[i].label[j];
 
}
labelsred[i]=sred(&a[i].label[0],5);
index[i]=i;
}
float buffer1;int n,m,buffer2;
n=MAX;
for (int i=0;i<n;i++)
{m=i;
 for (int j=i+1;j<n-1;j++)
 {
         if (labelsred[j]<labelsred[m])
         {m=j;
         buffer1=labelsred[i];
    labelsred[i]=labelsred[m];
    labelsred[m]=buffer1;
        buffer2=index[i];
        index[i]=index[m];
        index[m]=buffer2;
         }
 
 }
 for (int y=0;y<MAX;y++)
 cout<<index[y]<<")"<<labelsred[y]<<endl;
}
getch();
}
1
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
14.03.2011, 22:42  [ТС] #14
Тогда вопрос другой как проверить отметку?тупо так:
C++
1
if (label>1 && label<5) ...
И еще как проверить цифры ли?перебором в массиве от 0 до 9?
И последнее как отреагировать на неправильное заполнение?
0
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
14.03.2011, 22:44 #15
Цитата Сообщение от REALIST07 Посмотреть сообщение
Тогда вопрос другой как проверить отметку?
Проверить на что ?
0
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
14.03.2011, 22:46  [ТС] #16
На то от 1 и до 5 ли оно?

Цитата Сообщение от REALIST07 Посмотреть сообщение
И еще как проверить цифры ли?перебором в массиве от 0 до 9?
И последнее как отреагировать на неправильное заполнение?
0
asics
Freelance
Эксперт С++
2854 / 1789 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
14.03.2011, 22:50 #17
Цитата Сообщение от REALIST07 Посмотреть сообщение
И еще как проверить цифры ли?
Можно так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <sstream>
#include <string>
 
template<class T>
void  input(const std::string&  prompt, T&  t){
    for(;;){
        std::cout << prompt;
        std::string  s;
        getline(std::cin, s);
        std::istringstream  ssin(s);
        char  c;
        if(ssin >> t
           && !(ssin >> c))
            break;
    }
}
 
int main(){
 
    int  i;
    input("Int num: ", i);
    std::cout << "i = "
              << i
              << std::endl;
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от REALIST07 Посмотреть сообщение
На то от 1 и до 5 ли оно?
C++
1
2
3
4
if(mark < 1 || mark > 5)
  //Бросаеш ошибку
else
  //идеш дальше
Добавлено через 1 минуту
Цитата Сообщение от REALIST07 Посмотреть сообщение
И последнее как отреагировать на неправильное заполнение?
http://ru.wikipedia.org/wiki/%D0%9E%...BD%D0%B8%D0%B9
1
REALIST07
Автор FAQ
Автор FAQ
181 / 181 / 20
Регистрация: 11.06.2010
Сообщений: 949
14.03.2011, 23:04  [ТС] #18
Все идеально остался только одна проблема досадная-кодировка!НО я кажется знаю как решить ее
0
Subgrando
40 / 40 / 9
Регистрация: 28.01.2011
Сообщений: 175
14.03.2011, 23:21 #19
C++
1
2
SetConsoleOutputCP(1251); // под виндоус, например
setlocale(0, "rus"); // если не помогло
0
14.03.2011, 23:21
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 23:21
Привет! Вот еще темы с решениями:

создание класса в С++ , простейшее задание
Помогите создать класс по условию... Тип «Вариант распыление» определить как...

Создание класса, моделирующего работу RS-триггера
Здравствуйте! Помогите пожалуйста с заданием.. Создать класс RS_trigger,...

Создание консольного теста: выводит задание и 4 варианта ответа
Дано задание сделать консольный тест на C++, который выводит вопрос и 4...

Задание по ООП: создание АТД "Массив"
Такое задание на листке бумаги написать ADT массива, то что я принес...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru