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

Оформить программу в виде функций - C++

Восстановить пароль Регистрация
 
Beg1ner
0 / 0 / 0
Регистрация: 28.10.2009
Сообщений: 9
14.01.2010, 10:47     Оформить программу в виде функций #1
Недавно столкнулся с такой вот задачей: Дана матрица размером M на N, нужно сформировать одномерный массив из максимальных элементов матрицы. Задача несложная, но появились проблемы на моменте выделения динамической памяти. Дан файл. Оттуда надо считать эту матрицу. Возможно, размеры её надо ввести с клавиатуры. Еще возникли сложности при объявлении переменных при переносе в функции: по условию задачи, основной код должен состоять только из вызова функций. Помогите, плз.

Добавлено через время прочтения методички
Вот, что у меня получилось за вечер. Помогите плз передалать код так, чтобы основной код состоял только из вызова функций.

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 <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{
setlocale (LC_ALL, "Russian_Russia.1251");
ifstream file("file.txt");
if(!file.is_open())
    {
         cout << "Ошибка! Файл file.txt не найден!" << endl << endl;
         cin.get();
         cin.get();
         return 1;
    }
    
int  n, m, i, j;
cout << "Внимание! Перед вводом убедитесь, что в файле присутствует нужное число строк и столбцов и что все элементы введены верно. Для выхода нажмите Ctrl+C." << endl;
cout << endl << "Введите количество строк:" << endl;
cin >> m;
if (m < 0) 
     {
     cout << endl << "Ошибка! Количество строк не может быть отрицательным." << endl;
     cin.get();
     cin.get();
     return 1;
     }
     
cout << endl << "Введите количество столбцов:" << endl;
cin >> n;
if (n < 0) 
     {
     cout << endl << "Ошибка! Количество столбцов не может быть отрицательным." << endl;
     cin.get();
     cin.get();
     return 1;
     }
if (n == 0 || m == 0) 
     {
     cout << endl << "Элементы отсутствуют, т.к. один из размеров исходной матрицы равен нулю." << endl;
     cin.get();
     cin.get();
     return 1;
     }
 
      
float **mas = new float *[m];
for (int i = 0; i < m; i++)
mas[i] = new float [n];
 
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
    file >> mas[i][j];
}
 
     cout << endl << "Исходный массив:" << endl;
             for(i = 0; i < n; i++)
             {
                 for (j = 0; j < m; j++)
                    cout << mas[i][j] << " ";
                    cout << endl;
             }
float max = mas[0][0];
cout << endl << "Одномерный массив из максимальных элементов столбцов исходной матрицы:" << endl;
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
if (max < mas[i][j]) max = mas[i][j];
cout << max << " ";
}
delete mas;
cin.get();
cin.get();
return 0; 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
טאַראַס
7 / 7 / 1
Регистрация: 11.01.2010
Сообщений: 123
14.01.2010, 11:11     Оформить программу в виде функций #2
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
#include <iostream>
#include <fstream>
 
using namespace std;
int guiopsdfhdfh()
{
setlocale (LC_ALL, "Russian_Russia.1251");
ifstream file("file.txt");
if(!file.is_open())
    {
         cout << "Ошибка! Файл file.txt не найден!" << endl << endl;
         cin.get();
         cin.get();
         return 1;
 }
    
int  n, m, i, j;
cout << "Внимание! Перед вводом убедитесь, что в файле присутствует нужное число строк и столбцов и что все элементы введены верно. Для выхода нажмите Ctrl+C." << endl;
cout << endl << "Введите количество строк:" << endl;
cin >> m;
if (m < 0) 
     {
     cout << endl << "Ошибка! Количество строк не может быть отрицательным." << endl;
     cin.get();
     cin.get();
     return 1;
     }
     
cout << endl << "Введите количество столбцов:" << endl;
cin >> n;
if (n < 0) 
     {
     cout << endl << "Ошибка! Количество столбцов не может быть отрицательным." << endl;
     cin.get();
     cin.get();
     return 1;
     }
if (n == 0 || m == 0) 
     {
     cout << endl << "Элементы отсутствуют, т.к. один из размеров исходной матрицы равен нулю." << endl;
     cin.get();
     cin.get();
     return 1;
     }
 
      
float **mas = new float *[m];
for (int i = 0; i < m; i++)
mas[i] = new float [n];
 
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
    file >> mas[i][j];
}
 
     cout << endl << "Исходный массив:" << endl;
             for(i = 0; i < n; i++)
             {
                 for (j = 0; j < m; j++)
                    cout << mas[i][j] << " ";
                    cout << endl;
             }
float max = mas[0][0];
cout << endl << "Одномерный массив из максимальных элементов столбцов исходной матрицы:" << endl;
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
if (max < mas[i][j]) max = mas[i][j];
cout << max << " ";
}
delete mas;
cin.get();
cin.get();
return 0; 
}
int main()
{
 return guiopsdfhdfh();
}
}
[/QUOTE]

Добавлено через 3 минуты
Я просто скопирожал весь код в функцию, а в мэйне его вызвал. Не нравится вариант переделки - делай декомпозицию задачи на подзадачи. Каждую подзадачу решай в отдельной функции. В мэйне вызывай их. Часть можно косвенно, то есть мэйн вызывает функции, которые вызывает другие функции.
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
14.01.2010, 11:34     Оформить программу в виде функций #3
Цитата Сообщение от טאַראַס Посмотреть сообщение
Каждую подзадачу решай в отдельной функции.
Как раз с этим у нас и возникли трудности, поэтому мы и задали вопрос здесь.
טאַראַס
7 / 7 / 1
Регистрация: 11.01.2010
Сообщений: 123
14.01.2010, 11:40     Оформить программу в виде функций #4
Задача может состоять, например, из:
1. Ввода матриц.
2. Поиска максимумов.
3. Занесения их в массив.
4. Вывода результата.
Определи в имеющемся коде, где у тебя границы каждой из этих подзадач. Так как тебе дан файл, то ввод надо реализовать полностью файловый. То есть, размеры матрицы вводятся тоже из файла. Выводить будешь куда? Ещё в один файл? Или на экран?
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14
14.01.2010, 11:51     Оформить программу в виде функций #5
Выводить на экран.

Определи в имеющемся коде, где у тебя границы каждой из этих подзадач.
Выделение динам. памяти:
C++
1
2
3
float **mas = new float *[m];
for (int i = 0; i < m; i++)
mas[i] = new float [n];
Проверка на существование файла:
C++
1
2
3
4
5
6
7
if(!file.is_open())
    {
         cout << "Ошибка! Файл file.txt не найден!" << endl << endl;
         cin.get();
         cin.get();
         return 1;
 }
Считывание из файла:
C++
1
2
3
4
5
6
ifstream file("file.txt");
for (i=0; i<m; i++)
for (j=0; j<n; j++)
{
    file >> mas[i][j];
}
Поиск максимума с выводом на экран:
C++
1
2
3
4
5
6
7
8
9
10
11
12
float max = mas[0][0];
cout << endl << "Одномерный массив из максимальных элементов столбцов исходной матрицы:" << endl;
for (i=0; i<m; i++)
{
for (j=0; j<n; j++)
if (max < mas[i][j]) max = mas[i][j];
cout << max << " ";
}
delete mas;
cin.get();
cin.get();
return 0;
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.01.2010, 11:53     Оформить программу в виде функций #6
Пихай каждый кусок в функцию и делай вызов.
Yandex
Объявления
14.01.2010, 11:53     Оформить программу в виде функций
Ответ Создать тему
Опции темы

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