Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для Anya1919
3 / 1 / 2
Регистрация: 06.10.2016
Сообщений: 17

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

06.10.2016, 13:45. Показов 744. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.10.2016, 13:45
Ответы с готовыми решениями:

работа с вводом/выводом
Здравствуйте!!! Работаю с вводом/выводом и столкнулся со следующей проблемой: в программе вожу целочисленное значение с клавиатуры и затем...

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

Переделать программу с процедурами и функциями и с вводом и выводом в файл
Данная программа вычисляет значение функции с заданной точностью и аргументами. program kkr2; uses crt; var a, b, h,...

3
06.10.2016, 14:13

Не по теме:

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

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

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

Добавлено через 14 минут
UPD: скрин с ошибками при компиляции http://prnt.sc/cqk6tq
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
07.10.2016, 04:31
Цитата Сообщение от Anya1919 Посмотреть сообщение
скрин с ошибками при компиляции
Те, которые на скрине, из-за того, что переменная out объявлена два раза: в 13 строке и в 43 строке.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2016, 04:31
Помогаю со студенческими работами здесь

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

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

Подсобите со вводом/выводом
Здравствуйте! Крайняя ситуация, поэтому прошу помощь :( Необходимо вычислить сумму: z=\sum_{i=0}^{n}{y}_{i} , где ...

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

Непонятка с Вводом-выводом
имеется такое дело static void Menu() { Console.WriteLine(&quot; 1 - Ввести список &quot;); ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru