Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Anya1919
2 / 0 / 2
Регистрация: 06.10.2016
Сообщений: 17
Завершенные тесты: 1
1

Операции с матрицой и работа с вводом-выводом в файл

06.10.2016, 13:45. Просмотров 388. Ответов 3
Метки нет (Все метки)

Здравствуйте. Дали несколько заданий на практике, одно из них следующее:
Начиная с центра, обойти по спирали все элементы квадратной матрицы А(n x m), распечатывая их в порядке обхода.
Условия по реализации:

В программе должны использоваться динамические матрицы, исходная матрица читается из текстового файла. Структура файла следующая: число строк, число столбцов, а затем идут элементы матрицы.
Например матрица 3х3 в файле:
3 3
1.1 2 3.6
5 2 2.1
2.6 8 2.0

Код написала, по частям работало всё, а когда стала всё собирать в одно целое с использованием функций и указателями, то запуталась окончательно, ещё и непривычно столько строчек кода видеть у себя программе. Как итог - написанный мной код не компилится и не знаю за что взяться, может кто-нибудь может глянуть и подправить его до рабочего состояния?
Сам код ниже.
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
#include <iostream> 
#include <fstream> 
#include <string>
 
using namespace std;
void PrintMatrix(double **, int, int);
int SortBySpir(double **, int, int);
 
int main() {
    char Filename[50];
    std::cout << "Input the name of file: ";
    cin >> Filename;
    ofstream out(Filename, ios_base::trunc);
    ifstream in(Filename);
    if (!in)
    {
        std::cout << "Cannot open file.\n";
        std::system("pause");
        exit(1);
    }
    double** matr;
    int n, m;
    std::cout << "Enter size of matr ";
    in >> n;
    in >> m;
    matr = new double*[n];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; i < m; j++)
        {
            in >> matr[i][j];
        }
    }
    PrintMatrix(matr, n, m);
    SortBySpir(matr, n, m);
    std::cout << endl << endl << "After sort" << endl << endl;
    PrintMatrix(matr, n, m);
    in.close();
 
    char nameOutputFile[40];
    std::cout << "Input the name of output file: ";
    cin >> nameOutputFile;
    ofstream out(nameOutputFile);
    if (!out)
    {
        std::cout << "Cannot open file.\n";
        std::system("pause");
        exit(1);
    }
    int i, j;
    out << n << " " << m << endl;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
        {
            out.width(8);
            out << matr[i][j];
        }
        out << endl;
    }
    out.close();
 
    for (int i = 0; i < n; i++)
    {
        delete[] matr[i];
    }
    delete[] matr;
    std::system("pause");
    return 0;
}
 
        void PrintMatrix(double** a, int n, int m){
            std::cout.setf(ios::fixed);
            std::cout.precision(2);
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                    std::cout.width(8);
                    std::cout << a[i][j];
                }
                std::cout << endl;
            }
        }
 
        int SortBySpir(double** a, int n, int m) {
            int z;                      //счётчик 
            int i = n / 2; int j = m / 2;       //устанавливаем итераторы на центральный элемент массива
                                            //цикл обхода по спирали по часовой стрелке 
            do {
                z++;//увеличиваем величину сдвига на 1
                for (int k = 0; k<z; k++)//выводим n элементов со сдвигом вверх
                    std::cout << a[i--][j] << ' ';
                //точка выхода из цикла
                if (z == n)//если сдвиг равен размерности массива
                    break;//выход
                for (int k = 0; k<z; k++)//выводим n элементов со сдвигом вправо
                    std::cout << a[i][j++] << ' ';
                n++;//опять увеличиваем сдвиг
                for (int k = 0; k<z; k++)////выводим n элементов со сдвигом вниз
                    std::cout << a[i++][j] << ' ';
                for (int k = 0; k<z; k++)////выводим n элементов со сдвигом влево
                    std::cout << a[i][j--] << ' ';
 
            } while (z);
            std::system("pause");
            return 0;
        }
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2016, 13:45
Ответы с готовыми решениями:

Задача по массиву с вводом и выводом файл
Есть задание, суть такова, что нужна программа, которая читает файл, в котором задан размер...

Переделать код для работы с файловым вводом/выводом (работа с массивом объектов пользовательского типа)
Доброго времени суток! Можно ли переделать эту прогу на работу с файлом при помощи потоковых...

Трабл с вводом/выводом
Вот есть код: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main(){ ...

Управление вводом-выводом
Помогите решить задачу. Пусть два процесса осуществляют доступ к одному и тому же файлу, но один...

Помощь с потоковым вводом-выводом.
Доброго времени суток. можно ли как-нибудь создать/открыть файл для чтения и добавления с помощью ...

3
Почтальон
06.10.2016, 14:13
  #2

Не по теме:

Цитата Сообщение от Anya1919 Посмотреть сообщение
Код написала
с трудом верится, что сами писали

0
Anya1919
2 / 0 / 2
Регистрация: 06.10.2016
Сообщений: 17
Завершенные тесты: 1
06.10.2016, 17:54  [ТС] 3
Цитата Сообщение от Почтальон Посмотреть сообщение
с трудом верится, что сами писали
Алгоритм искала на просторах интернета, остальное писала сама пользуясь примерами из методички.

Добавлено через 3 часа 19 минут
бтв опечатка в названии, извиняюсь

Добавлено через 14 минут
UPD: скрин с ошибками при компиляции http://prnt.sc/cqk6tq
0
nd2
3104 / 2598 / 1134
Регистрация: 29.01.2016
Сообщений: 8,690
07.10.2016, 04:31 4
Цитата Сообщение от Anya1919 Посмотреть сообщение
скрин с ошибками при компиляции
Те, которые на скрине, из-за того, что переменная out объявлена два раза: в 13 строке и в 43 строке.
1
07.10.2016, 04:31
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2016, 04:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Проблема с вводом-выводом из файлов
Только изучаю данную тематику, и нарвался на подобное - при попытке компилить, находит одну ошибку,...

Таблица с вводом и выводом. Ошибки. C++
Доброго всем вечера! Делал вот такую таблицу с вводом и выводом из книжки обучения для C++...

Помогите разобраться с потоковым вводом/выводом в С++
как решить эти две задачи: 24.1 Для класса Т1, имеющего два целочисленных компонентных данных а и...


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

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

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