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

Доделать код - C++

Восстановить пароль Регистрация
 
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
14.04.2013, 13:57     Доделать код #1
Помогите доделать код, нужно добавить укзатели можете помочь

Вот код:
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# include <windows.h>
# include <locale.h>
# include <stdio.h>
# include <stdlib.h>
# define MAX 100
 
struct olimpiads 
{
    char name [30];
    int bals;
} listS [MAX];
void init_list (), enter ();
void delete1 (), list ();
void load (), save ();
void peremog (), peremog ();
int menu_select (), find_free ();
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    char choice;
    printf("Ведення списку адресатiв\n");
    init_list (); /* ініціалізація масиву структур */
    for (; ;) 
    {
        choice = menu_select ();
        switch (choice) 
        {
            case 1: enter (); break;
            case 2: delete1 (); break;
            case 3: list (); break;
            case 4: save (); break;
            case 5: load (); break;
            case 6: peremog (); break;
            case 7: return 0;
        }
    }
    system ("pause");
    return 0;
}
 
/* Ініціалізація списку. */
void init_list ()
{
    for (register int t = 0; t <MAX; ++t) listS[t].name[0] = '\0'; /* занесення '\0'-символу у перший символ масиву символів поля name, що означає відсутність значимих символів у полі name */
}
/* Отримання номера пункту меню */
int menu_select ()
{
    setlocale(LC_CTYPE, "Russian");
    char pm [80];
    int c;
    printf ("\n");
    printf ("1. Ввести елемент списку \n");
    printf ("2. Вилучити елемент списку \n");
    printf ("3. Вивести список \n");
    printf ("4. Зберегти у файлi \n");
    printf ("5. Завантажити з файлу \n");
    printf ("6. Переможець олiмпiади \n");
    printf ("7. Вихiд \n");
    do 
    {
        printf ("\n Введiть номер потрiбного пункту меню: ");
        scanf("%s", &pm);
        c = atoi (pm); // приведення (конвертація) рядка в числовий вигляд
    } while (c <1 || c> 7);
    return c;
}
/* Додавання адреси у список */
void enter ()
{
    int n;
    n = find_free ();
    if (n == -1) {printf ("\n Список заповнений"); return;}
    printf ("Введiть прiзвище, iм’я, по-батьковi: ");
    scanf ("%s", &listS[n].name);
    printf ("Введiть оцiнку студента: ");
    scanf ("%d", &listS[n].bals);
}
/* Пошук вільного місця у списку. Переглядаеться список і якщо в межах заданого розміру масива зустрічається елемент, поле name якого не заповнене, то повертається номер цього елемента*/
int find_free ()
{
    register int t;
    for (t = 0; listS[t].name[0] && t <MAX; ++t);
    if (t == MAX) return -1; /* вільних структур немає */
    return t;
}
/* Вилучення адреси. На введенний № елемента у списку, який слід вилучити, у поле name вказаного елемента списку вводиться нуль-символ, що є ознакою вилученого елемента*/
void delete1 ()
{
    register int n;
    char s [80];
    printf ("Введiть № у списку: ");
    scanf("%s",&s);
    n = atoi (s); // приведення (конвертація) рядка в числовий вигляд
    if (n >= 0 && n <MAX)
    listS[n].name[0] = '\0'; /* '\0'-символ заноситься у перший символ масиву символів поля name, що означає відсутність значимих символів у полі name */
}
/* Виведення списку на екран */
void list ()
{
    setlocale (LC_ALL, "rus_rus.866");
    for (register int t = 0; t <MAX; ++t) 
    {
        if (listS[t].name[0]) 
        {
            printf ("%s \n", listS[t].name);
            printf ("%d \n", listS[t].bals);
        }
    }
    printf ("\n");
}
/* Збереження списку у файлі */
void save ()
{
    setlocale(LC_CTYPE, "Russian");
    FILE *fp;
    if ((fp = fopen ("listf", "w")) == NULL) 
    {
        printf ("Помилка при вiдкриттi файлу \n");
        return;
    }
    for (register int i = 0; i <MAX; i++)
    if (*listS[i].name)
    if (fwrite (&listS[i], sizeof (struct olimpiads), 1, fp) != 1)
    printf ("Помилка при запису файлу \n");
    fclose (fp);
}
/* Завантажити файл */
void load ()
{
    FILE *fp;
    if ((fp = fopen ("listf", "r")) == NULL) 
    {
        printf ("Помилка при вiдкриттi файлу \ n");
        return;
    }
    init_list ();
    for (register int i = 0; i <MAX; i++)
    if (fread (&listS[i], sizeof (struct olimpiads), 1, fp) != 1) 
    {
        if (feof (fp)) break;
        printf ("Помилка при зчитуваннi файлу \n");
    }
    fclose (fp);
}
/* Завантажити файл */
void peremog ()
{
    setlocale (LC_ALL, "Russian");
    int max_i = -1, max_b = -1; 
    for (int t = 0; t < MAX; t++)
    {
        if (listS[t].name[0] && listS[t].bals > max_b) 
        {
            max_b = listS[t].bals;
            max_i = t; 
        }
    }
 
    printf("%s переможець! Має %d балiв. ", listS[max_i].name, listS[max_i].bals );
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2013, 13:57     Доделать код
Посмотрите здесь:

C++ Доделать программу.
Доделать решение... C++
C++ доделать программу
Не могу доделать C++
Доделать программу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Большой_Стен
13 / 13 / 1
Регистрация: 22.04.2012
Сообщений: 99
14.04.2013, 15:12     Доделать код #2
Разрешите узнать, какие указатели и куда нужно добавить?
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
14.04.2013, 18:25  [ТС]     Доделать код #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
54
55
56
57
58
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <Windows.h>
#include <iostream>
#include <locale>
#include <ctime>
 
using namespace std; //Простір імен. Використовується для того, щоб обмежити видимість змінних, ф-ій і т.д.
 
void main() //Початок програми
{
    srand(time(NULL)); //Функція, яка приймає аргумент і задає функції rand () початкове число для генерації.
 
    setlocale(LC_ALL,"rus"); //Локалізація на російську
 
    int k=0,s=0,m,n; //Присвоєння операторів
 
    cout<<"Введiть кiлькiсть рядкiв: "; //Виведення тексту на екран
    cin>>m; //Введення тексту з клавіатури
    cout<<"Введiть кiлькiсть стовпчикiв: "; //Виведення тексту на екран
    cin>>n; //Введення тексту з клавіатури
 
    int **a; //Динамічний масив, виділення пам'яті під масив
 
    a=new int *[m];
 
    for (int i=0;i<m;i++) //Задаемо рядки
    {
        a[i]=new int[n];
        for (int j=0;j<n;j++) //Задаемо стовпчики
        {
            a[i][j]=rand()%9+1; //Генерація випадкових чисел
        }
    }
    for (int i=0;i<m;i++) //Задаемо рядки
    {
        cout<<"\n"; //Пустий рядок
        for (int j=0;j<n;j++) //Задаемо стовпчики
        {
            cout<<a[i][j]<<" "; //Виводимо масив на екран
        }
    }
    cout<<"\n\n";
    for (int i=0;i<m;i++) //Задаемо рядки
    {
        for (int j=0;j<n;j++) //Задаемо стовпчики
        {
            if (a[i][j]%2==1) //Перевірка умови
            {
                k++; //Запам'ятовування чисел
            }
        }
    }
    cout<<"Кiлькiсть непарних елементiв: "<< k << "\n"; //Виведення на екран k
    delete a; //Видалення пам'яті виділеної під масив
    system("pause"); //Затримка на екрані
}
Большой_Стен
13 / 13 / 1
Регистрация: 22.04.2012
Сообщений: 99
14.04.2013, 18:54     Доделать код #4
Так, интересный у вас код - набор глобальных функций, которые все используют один глобальный массив. И наверно предполагается его сделать через указатель. Ну тогда попробуйте что-то типа такого:
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# include <windows.h>
# include <locale.h>
# include <stdio.h>
# include <stdlib.h>
# define MAX 100
 
struct olimpiads 
{
    char name [30];
    int bals;
} *listS;
void init_list (), enter ();
void delete1 (), list ();
void load (), save ();
void peremog (), peremog ();
int menu_select (), find_free ();
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    listS=new olimpiads[MAX];
    char choice;
    printf("Ведення списку адресатiв\n");
    init_list (); /* ініціалізація масиву структур */
    for (; ;) 
    {
        choice = menu_select ();
        switch (choice) 
        {
            case 1: enter (); break;
            case 2: delete1 (); break;
            case 3: list (); break;
            case 4: save (); break;
            case 5: load (); break;
            case 6: peremog (); break;
            case 7: return 0;
        }
    }
    system ("pause");
    delete (listS);
    return 0;
}
 
/* Ініціалізація списку. */
void init_list ()
{
    for (register int t = 0; t <MAX; ++t) listS[t].name[0] = '\0'; /* занесення '\0'-символу у перший символ масиву символів поля name, що означає відсутність значимих символів у полі name */
}
/* Отримання номера пункту меню */
int menu_select ()
{
    setlocale(LC_CTYPE, "Russian");
    char pm [80];
    int c;
    printf ("\n");
    printf ("1. Ввести елемент списку \n");
    printf ("2. Вилучити елемент списку \n");
    printf ("3. Вивести список \n");
    printf ("4. Зберегти у файлi \n");
    printf ("5. Завантажити з файлу \n");
    printf ("6. Переможець олiмпiади \n");
    printf ("7. Вихiд \n");
    do 
    {
        printf ("\n Введiть номер потрiбного пункту меню: ");
        scanf("%s", &pm);
        c = atoi (pm); // приведення (конвертація) рядка в числовий вигляд
    } while (c <1 || c> 7);
    return c;
}
/* Додавання адреси у список */
void enter ()
{
    int n;
    n = find_free ();
    if (n == -1) {printf ("\n Список заповнений"); return;}
    printf ("Введiть прiзвище, iм’я, по-батьковi: ");
    scanf ("%s", &listS[n].name);
    printf ("Введiть оцiнку студента: ");
    scanf ("%d", &listS[n].bals);
}
/* Пошук вільного місця у списку. Переглядаеться список і якщо в межах заданого розміру масива зустрічається елемент, поле name якого не заповнене, то повертається номер цього елемента*/
int find_free ()
{
    register int t;
    for (t = 0; listS[t].name[0] && t <MAX; ++t);
    if (t == MAX) return -1; /* вільних структур немає */
    return t;
}
/* Вилучення адреси. На введенний № елемента у списку, який слід вилучити, у поле name вказаного елемента списку вводиться нуль-символ, що є ознакою вилученого елемента*/
void delete1 ()
{
    register int n;
    char s [80];
    printf ("Введiть № у списку: ");
    scanf("%s",&s);
    n = atoi (s); // приведення (конвертація) рядка в числовий вигляд
    if (n >= 0 && n <MAX)
    listS[n].name[0] = '\0'; /* '\0'-символ заноситься у перший символ масиву символів поля name, що означає відсутність значимих символів у полі name */
}
/* Виведення списку на екран */
void list ()
{
    setlocale (LC_ALL, "rus_rus.866");
    for (register int t = 0; t <MAX; ++t) 
    {
        if (listS[t].name[0]) 
        {
            printf ("%s \n", listS[t].name);
            printf ("%d \n", listS[t].bals);
        }
    }
    printf ("\n");
}
/* Збереження списку у файлі */
void save ()
{
    setlocale(LC_CTYPE, "Russian");
    FILE *fp;
    if ((fp = fopen ("listf", "w")) == NULL) 
    {
        printf ("Помилка при вiдкриттi файлу \n");
        return;
    }
    for (register int i = 0; i <MAX; i++)
    if (*listS[i].name)
    if (fwrite (&listS[i], sizeof (struct olimpiads), 1, fp) != 1)
    printf ("Помилка при запису файлу \n");
    fclose (fp);
}
/* Завантажити файл */
void load ()
{
    FILE *fp;
    if ((fp = fopen ("listf", "r")) == NULL) 
    {
        printf ("Помилка при вiдкриттi файлу \ n");
        return;
    }
    init_list ();
    for (register int i = 0; i <MAX; i++)
    if (fread (&listS[i], sizeof (struct olimpiads), 1, fp) != 1) 
    {
        if (feof (fp)) break;
        printf ("Помилка при зчитуваннi файлу \n");
    }
    fclose (fp);
}
/* Завантажити файл */
void peremog ()
{
    setlocale (LC_ALL, "Russian");
    int max_i = -1, max_b = -1; 
    for (int t = 0; t < MAX; t++)
    {
        if (listS[t].name[0] && listS[t].bals > max_b) 
        {
            max_b = listS[t].bals;
            max_i = t; 
        }
    }
 
    printf("%s переможець! Має %d балiв. ", listS[max_i].name, listS[max_i].bals );
}
Массив name в структуре делать динамическим через указатель как-то неразумно.
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
16.04.2013, 22:05  [ТС]     Доделать код #5
Большой_Стен, ну наша афигенная 70 летняя преподша говорит все делать так что(
Большой_Стен
13 / 13 / 1
Регистрация: 22.04.2012
Сообщений: 99
17.04.2013, 09:36     Доделать код #6
Т.е. строчку на 30 символов делать динамическим массивом? Ладно могу представить, но вообще адекватнее использовать класс string.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.04.2013, 11:14     Доделать код
Еще ссылки по теме:

C++ Доделать код
C++ Доделать код. Тема массивы. Нужно использовать массив для хранения ответа
C++ Нужно доделать код! Исключить из дерева сортировки число "2"

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

Или воспользуйтесь поиском по форуму:
tAruuuch
0 / 0 / 0
Регистрация: 24.02.2013
Сообщений: 144
17.04.2013, 11:14  [ТС]     Доделать код #7
Большой_Стен, можешь плз, а то эта конченая задалбует
Yandex
Объявления
17.04.2013, 11:14     Доделать код
Ответ Создать тему
Опции темы

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