Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 12.01.2023
Сообщений: 41

Отразить элементы матрицы по горизонтали с помощью указателей

16.01.2025, 10:10. Показов 3906. Ответов 46

Студворк — интернет-сервис помощи студентам
Срочность высокая.

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

Проблема: оно не отражает код, хотя по идее я должен был поменять местами значения.

Входные данные:
4
1 2 3 4
1 2 3 4
4 5 6
4
4 5 6 4

Правильные выходные данные:
4 5 6 4
4 5 6 4
1 2 3 4
1 2 3 4

Мои выходные данные:
1 2 3 4
1 2 3 4
4 5 6 4
4 5 6 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
#include <stdio.h>
 
void scan_matrix(int* b, int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            scanf("%d", b + i * n + j);
    }
};
 
 
void print_matrix(int* b, int n)
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
            printf("%d ", *(b + i * n + j));
        printf("\n");
    }
};
 
int main()
{
    int n;
    scanf("%d", &n);
    int arr[n][n] = {0};
    scan_matrix(&arr[0][0], n);
    for (int i = 0; i < n; i++)
    {
        int (*b) [n] = &arr[i];
        int (*p) [n] = &arr[n - i - 1];
        for (int j = 0; j < n; j++)
        {
            int* d = b[0];
            int* q = p[0];
            *(d) += *(q);
            *(q) = *(d) - *(q);
            *(d) -= *(q);
        }
    }
    printf("\n");
    print_matrix(&arr[0][0], n);
    return 0;
}
Добавлено через 3 минуты
P. s.: У меня компилятор GCC (GNU Compiler Collection), так, что у меня код компилируется и работает, хоть и не должен, чем я без зазрения совести пользуюсь.

Добавлено через 3 минуты
P. p. s.: глас за мылился, ошибку не вижу.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.01.2025, 10:10
Ответы с готовыми решениями:

Отразить строки матрицы по горизонтали
Дан динамический массив, отразить в нем строки по горизонтали. Пример: 1 2 3 4 5 6 7 8 полученный массив: 5 6 7 8 ...

Зеркально отразить элементы матрицы элементы относительно горизонтальной оси
Дана квадратная матрица порядка 2n+1 . Зеркально отразить ее элементы относительно горизонтальной оси симметрии матрицы на языке С++ ...

Зеркально отразить элементы матрицы относительно вертикальной оси симметрии матрицы
Здравствуйте! Помогите написать программу на Java с двумерными массивами. Дана матрица размера M × N. Зеркально отразить ее элементы...

46
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2025, 11:08
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
Сейчас у меня так и стоит:
Читать следует внимательно.
Ну и ссылку на доказательства я тоже привёл, без всякого видео
0
1 / 1 / 0
Регистрация: 12.01.2023
Сообщений: 41
16.01.2025, 11:20  [ТС]
Цитата Сообщение от KSergey9 Посмотреть сообщение
Ошибка ВСЕГДА и только в МОЁМ коде
Ну, почему же, у меня бывало и обратоное (2 года назад) -- проверочная система яндекс лицея стоит на серверах Линукс, а ученики обычно на винде, и при некоторых операциях с памятью, у меня расходились результаты с сервером.

Добавлено через 8 минут
При спользовании данного компилятора https://www.online-cpp.com на том же коде, и тех же входных данных я получил следущее:
Code
1
2
3
4
5
6
4 2 3 4
4 2 3 4
4 5 6 4
4 5 6 4
 
0x7ffca28667b0

Следовательно в нём память не очищается. Но значения не совпадают ни с исхожными данными, ни с требуемыми.

Добавлено через 2 минуты
При этом, как я уже писал, если верить блок-схеме, всё должно корректно работать, но стандартная блок схема плохо отображает операции с памятью.

Быть может, есть какая то особенность языка, о которой я не знаю, ну там может при присваивании указателю на элемент a, значения элемента b, может произойти ошибка?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2025, 11:41
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
у меня расходились результаты с сервером.
И при чем тут это?

Добавлено через 1 минуту
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
При этом, как я уже писал, если верить блок-схеме, всё должно корректно работать, но стандартная блок схема плохо отображает операции с памятью.
Дорогой друг, ты можешь вместо бестолковых рассуждений просто сравнить свой код и мой? и увидеть различия?

Добавлено через 1 минуту
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
Следовательно в нём память не очищается.
Там просто мимо памяти пишет в твоём коде.
А дальше уже как повезёт.
Так что по поводу сказок - я ошибался, признаю. Теперь верю тебе.
0
1 / 1 / 0
Регистрация: 12.01.2023
Сообщений: 41
16.01.2025, 11:44  [ТС]
Цитата Сообщение от KSergey9 Посмотреть сообщение
Дорогой друг, ты можешь вместо бестолковых рассуждений просто сравнить свой код и мой? и увидеть различия?

Если, ты хочешь, чтоб я скобки поправил, то разочарую, твой код вообще на этапе компиляции выдаёт ощибку, т. к. ты не правильно оценил, где какой тип данных должен быть
C++
1
2
3
4
5
    for (int i = 0; i < n/2; i++)
    {
        int *b = arr[i];
        int *p = arr[n - i - 1];
        for (int j = 0; j < n; j++)
Code
1
2
3
4
5
6
7
8
9
10
11
..\L0803.cpp: In function 'int main()':
..\L0803.cpp:36:37: error: invalid conversion from 'int' to 'int*' [-fpermissive]
   36 |                         int* d = b[j];
      |                                  ~~~^
      |                                     |
      |                                     int
..\L0803.cpp:37:37: error: invalid conversion from 'int' to 'int*' [-fpermissive]
   37 |                         int* q = p[j];
      |                                  ~~~^
      |                                     |
      |                                     int
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2025, 11:52
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
Если, ты хочешь, чтоб я скобки поправил, то разочарую, твой код вообще на этапе компиляции выдаёт ощибку, т. к. ты не правильно оценил, где какой тип данных должен быть
Т.е. дальше голову включать не будем? надо выдать полностью готовый ответ?

Ну ок, это дело добровольное.

Добавлено через 3 минуты
Там же есть ссылка на полностью рабочий код; то, что я в нём иначе сделал метод перестановки элементов - не суть важно, можно и исходный вернуть
Но верное обращение к элементам там имеет место быть.
1
1 / 1 / 0
Регистрация: 12.01.2023
Сообщений: 41
16.01.2025, 11:53  [ТС]
Если полностью код скопировать, то он работает, но не удовлетворяет условию. По условию обязательно использовать 2 уровня ссылок: на строки матрицы и на элементы строк матрицы.

Работающий код, но не удовлетворяющий ТЗ у меня и до этого был

Добавлено через 17 секунд
Или я чего - то не вижу?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2025, 11:54
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
2 уровня ссылок:
Это какая-то локальная терминология.
Я не понимаю что это такое.

Растолкуете - может удастся чем-то помочь.

Кстати, никаких ссылок в приведённом вами коде - вообще нет. Так что вообще не понятно о чем речь.
0
Злостный нарушитель
 Аватар для Verevkin
10886 / 5822 / 1288
Регистрация: 12.03.2015
Сообщений: 26,880
16.01.2025, 12:00
Вот так, штоли, надо?

1
 Аватар для Annemesski
2691 / 1348 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
16.01.2025, 12:01
Цитата Сообщение от KSergey9 Посмотреть сообщение
не понятно о чем речь
вангую что речь про указатели
0
1 / 1 / 0
Регистрация: 12.01.2023
Сообщений: 41
16.01.2025, 12:06  [ТС]
2 уровня указателей -- первый на строки матрицы, второй -- на их элементы.

1) Надо чтоб был массив указателей на строки матрицы
Эта чать у вас выполнена
C++
1
2
int *b = arr[i];
        int *p = arr[n - i - 1];
2) Надо чтобы были указатели на конкретный элемент матрицы
Эта часть, как я понимаю у вас не выполнена. Здесь, насколько я понимаю тип элементов int, а не int*.
C++
1
2
3
 int t = b[j];
            b[j] = p[j];
            p[j] = t;
Добавлено через 3 минуты
Простите за возможное введение в заблуждение, я использовал терминологию другого языка программирования. В контексте данной темы прошу интерпретировать данный термин аналогично термину указатель.
0
 Аватар для Annemesski
2691 / 1348 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
16.01.2025, 12:10
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
Надо чтобы были указатели на конкретный элемент матрицы
C++
1
2
3
int t = *(b + j);
*(b + j) = *(p + j);
*(p + j) = t;
так что ли?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2025, 12:13
Цитата Сообщение от Verevkin Посмотреть сообщение
Вот так, штоли, надо?
Чета я ваще не понял как что переставляется
Один столбец всегда остаётся на месте вроде?!
и автор, как я понял, хочет перестановки относительно горизонтальной середины.

Впрочем, перестановку каждый дурак сделать может
А вот ты попробуй это двухуровневыми ссылками сделать - вот где загогулина.
0
1 / 1 / 0
Регистрация: 12.01.2023
Сообщений: 41
16.01.2025, 12:17  [ТС]
Цитата Сообщение от Verevkin Посмотреть сообщение
Вот так, штоли, надо?
Я не совсем понял, по какому принципу у вас переставляются значения.Название: изображение_2025-01-16_140927244.png
Просмотров: 44

Размер: 23.2 Кб



А надо так
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2025, 12:17
Лучший ответ Сообщение было отмечено Reshaju zadachi как решение

Решение

Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
Здесь, насколько я понимаю тип элементов int, а не int*.
Тогда:
C++
1
2
int* d = b + j;
int* q = p + j;
и далее по тексту.
1
1 / 1 / 0
Регистрация: 12.01.2023
Сообщений: 41
16.01.2025, 12:27  [ТС]
, здесь типы данных не совпадают
Цитата Сообщение от Annemesski Посмотреть сообщение
так что ли?
__________________
( . )( . )++
Добавлено через 4 минуты
Цитата Сообщение от KSergey9 Посмотреть сообщение
Тогда:
C++
1
2
int* d = b + j;
int* q = p + j;
и далее по тексту.
Это в какой код вставить? в вашу версию или в мою?
А то уже слишком много веток, пора уже репозиторий на гите создавать.
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
16.01.2025, 12:28
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
Это в какой код вставить? в вашу версию или в мою?
так это то, что и требуется? или нет? я не могу понять
1
Злостный нарушитель
 Аватар для Verevkin
10886 / 5822 / 1288
Регистрация: 12.03.2015
Сообщений: 26,880
16.01.2025, 12:29
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
Я не совсем понял, по какому принципу у вас переставляются значения.
Хрен его знает. Написано "по горизонтали".
А как надо? Строки местами, штоль, поменять?
0
1 / 1 / 0
Регистрация: 12.01.2023
Сообщений: 41
16.01.2025, 12:32  [ТС]
Цитата Сообщение от KSergey9 Посмотреть сообщение
так это то, что и требуется? или нет? я не могу понять
В моей версии, d и p -- массивы, а в вашей -- указатели

Добавлено через 2 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
А как надо? Строки местами, штоль, поменять?
Да, поменять строки местами, как указано в моём сообщении выше. Можете посмотреть там последнее вложение.
0
 Аватар для Annemesski
2691 / 1348 / 485
Регистрация: 08.11.2016
Сообщений: 3,739
16.01.2025, 12:37
Цитата Сообщение от Reshaju zadachi Посмотреть сообщение
уже слишком много веток
не мучься, дропай все ветки на фиг и бери это:
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
#include <iostream>
 
int main()
{
    int n = 0;
    std::cin >> n;
 
    int **arr = new int*[n];
    for (int i = 0; i < n; ++i) {
        arr[i] = new int[n];
        for (int j = 0; j < n; ++j) {
            std::cin >> arr[i][j];
        }
    }
 
    for (int i = 0; i < n / 2; ++i) {
        int *tmp = arr[i];
        arr[i] = arr[n - 1 - i];
        arr[n - 1 - i] = tmp;
    }
 
    for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            std::cout << arr[i][j] << " ";
        }
        std::cout << std::endl;
        delete arr[i];
    }
 
    delete arr;
 
    return 0;
}
1
1 / 1 / 0
Регистрация: 12.01.2023
Сообщений: 41
16.01.2025, 12:40  [ТС]
Цитата Сообщение от KSergey9 Посмотреть сообщение
так это то, что и требуется? или нет? я не могу понять
Так, вроде условиям удовлетворяет. Сегодня уточню у преподавателя. Если он примет, то будет "лучший ответ", и моя благодарность.

Добавлено через 3 минуты
Цитата Сообщение от Annemesski Посмотреть сообщение
не мучься, дропай все ветки на фиг и бери это:
Ваш тоже работает так, как надо, и, вроде есть и *, и **. Выглядит как удовлетворяющее условиям.

P. s.: сдаю долги во время сессии. Можно сдать 1 лабораторную в один рабочий день. Осталось 5 лабораторных. Экзамен в среду. Осталось 4 рабочих дня. Если успею все сдать, и в среду перед экзаменом примут, то к экзамену допустят. Иначе -- недопуск.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.01.2025, 12:40

Зеркально отразить элементы матрицы относительно горизонтальной оси симметрии матрицы
Здравствуйте! Помогите написать 3 программмы на C++ на задачи с двумерными массивами 3. Дана матрица размера M x N. Зеркально...

Отразить элементы квадратной матрицы порядка М относительно горизонтальной оси симметрии матрицы
кто знает. как сделать!!! Отразить элементы квадратной матрицы порядка М относительно горизонтальной оси симметрии матрицы.

Отразить FontAwesome по горизонтали
1. Что есть 2. Что должно получиться Пробовал вращать через transform: rotate но не знаю какой градус задать, чтобы отразило по...

Bitmap отразить по горизонтали
Bitmap giv1=BitmapFactory.decodeResource(getContext().getResources(),R.drawable.sobaka); ???

Отразить картинку по горизонтали
Перерыл весь инет, но так и не нашел php-кода или js которые бы отражали картинку по горизонтали и записывали бы в файл. Может у кого...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru