Форум программистов, компьютерный форум CyberForum.ru

Разработать прогу которая хранит инфу о школьниках и их оценках с помощью map - C++

Восстановить пароль Регистрация
 
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.07.2010, 06:13     Разработать прогу которая хранит инфу о школьниках и их оценках с помощью map #1
С++.
Задача. Разработать прогу которая хранит инфу о школьниках и их оценках за 5 экз. в виде отображения (map). Каждый эл-т отображения должен иметь след. вид: ключ - фамилия ученика, значение - набор оценок за 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
#include <iostream>
#include <string>
#include <map>
int main()
{
    const int Num_of_notes=5;
    std::map<std::string, int*> ScMap;
    std::string Surname;
    int**Notes;
    int Num_of_pup=0;
 
    std::cout<<"Enter num of pupils\n";
    std::cin>>Num_of_pup;
    Notes=new int*[Num_of_pup];
    for(int i=0;i<Num_of_pup;i++)
        Notes[i]=new int[Num_of_notes];
    for(int i=0;i<Num_of_pup;i++)
    {
        std::cin.get();
        std::cout<<"Enter surname of pupil\n";
        std::getline(std::cin, Surname);
        for(int j=0;j<Num_of_notes;j++)
        {
            std::cout<<"Enter [ "<< j+1 <<" ] note of [ "<< i+1 <<" ] pupil\n";
            std::cin>>Notes[i][j];
            std::cin.get();
            ScMap[Surname]=Notes[i][j];
        }
    }
    //for(int i=0;i<Num_of_pup;i++)
    //{
    //  for(int j=0;j<Num_of_notes;j++)
    //  {
    //      std::cout<<"Notes of [ "<< i+1 <<" ] pupil "<< Notes[i][j] <<'\t';
    //  }
    //  std::cout<<std::endl;
    //}
    //  for(int j=0;j<5;j++)
    //      ScMap.insert(std::make_pair(Surname, Notes[i][j]));
    //}
    std::map<std::string, int*>::iterator pos=ScMap.begin();
    for(pos=ScMap.begin(); pos!=ScMap.end(); ++pos)
    {
        std::cout<<"Surname: "<< pos->first <<'\n';
        for(int i=0;i<5;i++)
            std::cout<<"Note number [ "<< i+1 <<" ] = "<< pos->second <<'\n';
    }
    return 0;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2010, 06:13     Разработать прогу которая хранит инфу о школьниках и их оценках с помощью map
Посмотрите здесь:

Написать прогу, которая выводит на экран содержимое файла C++
Требуется написать прогу которая преобразуют двоичное число в десятичное C++
Пиши прогу которая вытаскивает email адреса из файла. C++
Подскажите как написать программу которая сможет вытащить инфу с сайта и записать ее в файл C++
C++ Как написать прогу которая удалит все программы с компьютера
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
21.07.2010, 07:06     Разработать прогу которая хранит инфу о школьниках и их оценках с помощью map #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Используй вместо массива вектор, и будет тебе щастье

Добавлено через 9 минут
И да, у тебя такая ошибка:
У тебя значение - набор оценок, т.е. массив. Значит, при сопоставлении оценок с ключем с помощью оператора присваивания в строке 27 ты должен передавать весь массив, а не отдельный элемент.
Так и не понял, зачем ты создавал двумерный массив.

Добавлено через 24 минуты
Также не понял, зачем нужно было динамически выделять память.
Вот как можно сделать с векторами:
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
#include <iostream>
#include <map>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
 
int main()
{
    const size_t numberOfMarks = 5;
    std::map<std::string, std::vector<size_t> > jrn;
    size_t numberOfStudents;
    std::cout << "Enter the number of students: ";
    std::cin >> numberOfStudents;
    for(size_t i = 0; i < numberOfStudents; ++i, std::cout << std::endl)
    {
        std::string name;
        std::cout << "Enter the name of the student #" << i+1 << ": ";
        std::cin >> name;
        std::vector<size_t> marks;
        marks.reserve(numberOfMarks);
        for(size_t j = 0; j < numberOfMarks; ++j)
        {
            size_t mark;
            std::cout << "\tEnter the mark #" << j+1 << ": ";
            std::cin >> mark;
            marks.push_back(mark);
        }
        jrn[name] = marks;
    }
    std::cout << std::endl;
    for(std::map<std::string, std::vector<size_t> >::const_iterator it = jrn.begin();
        it != jrn.end();
        ++it)
    {
        std::cout << "\"" << it->first << "\" has following marks:\n\t";
        std::copy(it->second.begin(), it->second.end(), std::ostream_iterator<size_t>(std::cout, " "));
        std::cout << std::endl;
    }
    system("pause");
    return EXIT_SUCCESS;
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
21.07.2010, 11:55     Разработать прогу которая хранит инфу о школьниках и их оценках с помощью map #3
для разнообразия
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
#include <iostream>
#include <string>
#include <set>
#include <limits>
 
class Student {
    enum { EstimationsCount = 5 };
    std::string m_sName;
    int m_arrEstimations[EstimationsCount];
public:
    Student() : m_sName("") {
        for ( int i = 0; i < EstimationsCount; ++i )
            m_arrEstimations[i] = 0;
    }
    ~Student() {}
    void setData(){
        std::cout << "Name: ";
        std::getline(std::cin, m_sName);
        for ( int i = 0; i < EstimationsCount; ++i ){
            std::cout << "Estimation #" << ( i + 1 ) << ": ";
            std::cin >> m_arrEstimations[i];
        }
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }
    void getData() const {
        std::cout << "Name: " << m_sName << std::endl;
        for ( int i = 0; i < EstimationsCount; ++i )
            std::cout << "Estimation #" << ( i + 1 ) << ": " << m_arrEstimations[i] << std::endl;
    }
    bool operator < (const Student & another) const { return m_sName < another.m_sName; }
    bool operator == (const Student & another) const { return m_sName == another.m_sName; }
};
 
int main(){
    const int NUM_STUDENTS = 5;
    std::set<Student> stud;
 
    for ( int i = 0; i < NUM_STUDENTS; ++i ){
        Student s;
        std::cout << "\nStudent #" << ( i + 1 ) << std::endl;
        s.setData();
        stud.insert(s);
    }
 
    std::cout << "\nSorted by name:" << std::endl;
    for ( std::set<Student>::const_iterator i = stud.begin(); i != stud.end(); ++i ){
        std::cout << std::endl;
        i->getData();
    }
    std::cout << std::endl;
 
    return 0;
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.07.2010, 13:36  [ТС]     Разработать прогу которая хранит инфу о школьниках и их оценках с помощью map #4
Nameless One, Спасибо. Первоначально и хотел пробовать с векторами, но что-то не то оно мне написало. Видимо неправильно создавать пытался.
Yandex
Объявления
21.07.2010, 13:36     Разработать прогу которая хранит инфу о школьниках и их оценках с помощью map
Ответ Создать тему
Опции темы

Текущее время: 14:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru