Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 21
1

Наименьшее значение в трехмерном массиве

12.03.2018, 23:15. Просмотров 838. Ответов 10
Метки нет (Все метки)

Подскажите,пожалуйста, как написать код к заданию:написать программу поиска минимального элемента в трёхмерном массиве используя адресную арифметику.
Пробовал написать код, вот что получилось. Скажите ,пожалуйста,где ошибки и как нужно было делать.


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
#include "stdafx.h"
#include <iostream>
#include <cstdlib> 
#include <iomanip>
#include <conio.h>
 
using namespace std;
int main() 
{
    setlocale(LC_ALL, "Rus");
    srand(static_cast<unsigned int>(time(0)));
    const unsigned int A = 2;
    const unsigned int B = 3;
    const unsigned int C = 4;
    int arr[A][B][C];
    for (int i = 0; i < A; i++)
    {
        for (int j = 0; j < B; j++)
        {
            for (int k = 0; k < C; k++)
            {
                arr[A][B][C] = rand();
                cout << arr[A][B][C] << endl;
            }
        }
    }
    int *ptr1, *ptr2, number;
    ptr1 = arr[0][0];
    for (ptr2 = 0; ptr2 < arr[A][B]; ptr2++)
    {
        for (ptr2 = 0; ptr1 < arr[B][C]; ptr1++)
        {
            if (ptr2 > ptr1)
            {
                ptr2 = &number;
            }
        }
    }
 
    cout << "минимальное значение" << ptr2 << endl;
    _getch();
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2018, 23:15
Ответы с готовыми решениями:

наименьшее значение в массиве поменять с последним элементом в массиве
В массиве C из N элементов найти элемент, имеющий наименьшее значение и поменять его местами с...

Найти наименьшее значение массива не содержащееся во втором массиве
Задано два массива из N целых чисел . Найти наименьшее среди значений первого массива которое не...

Найти наименьшее положительное значение в массиве вещественных чисел
Условие задачи:Найти наименьшее положительное значение в массиве вещественных чисел. Если...

Найти наибольшее и наименьшее значение в массиве
Написать программу, генерирующую массив 20-ти элементов, заполненных случайными числами в диапазоне...

10
17 / 17 / 12
Регистрация: 27.02.2018
Сообщений: 44
13.03.2018, 08:25 2
BananaSlamJama, вам точно в раздел С++? вы код оформили как С++ QT.
теперь по делу
1. в первом цикле, там уже где k, вы присваиваете случайное число элементу arr[A][B][C], тогда как надо было arr[i][j][k];
2. во втором цикле лично мне непонятно что вы вообще пытаетесь сделать. по какой логике, точнее. сейчас напишу как оно могло бы быть.

Добавлено через 15 минут
не, уже утром

Добавлено через 8 часов 34 минуты
Теперь уже у меня какая-то ошибка, может быть, найдете ответ в моей теме: В чем ошибка - задача с трехмерным массивом и арифметикой указателей
0
Модератор
Эксперт С++
9918 / 8441 / 5129
Регистрация: 18.12.2011
Сообщений: 22,601
13.03.2018, 12:09 3
Лучший ответ Сообщение было отмечено BananaSlamJama как решение

Решение

Такой массив в памяти хранится одним куском, поэтому
C++
1
2
3
4
5
int *start = &arr[0][0][0];
int min=*start;
for (int* ptr1=start; ptr1 < start+ A*B*C; ptr1++)
   if(*ptr1<min)
     min=*ptr1;
2
17 / 17 / 12
Регистрация: 27.02.2018
Сообщений: 44
13.03.2018, 12:31 4
логично, кстати, мда
вот почему я не выбираю самый легкий путь никогда... мда...

Добавлено через 52 секунды
zss, поможете с моей проблемой? да, там не самый легкий (и потому логичный) путь, но мне интересно почему именно при таком подходе реализация не работает
0
0 / 0 / 0
Регистрация: 12.03.2018
Сообщений: 21
13.03.2018, 15:29  [ТС] 5
Вы не могли бы объяснить, что значит start+ A*B*C в 3 строке ?
0
Модератор
Эксперт С++
9918 / 8441 / 5129
Регистрация: 18.12.2011
Сообщений: 22,601
13.03.2018, 17:58 6
Цитата Сообщение от BananaSlamJama Посмотреть сообщение
start+ A*B*C
start - адрес начала массива
A*B*C - общая длина массива
start+ A*B*C - адрес, следующий за последним элементом

Цитата Сообщение от BananaSlamJama Посмотреть сообщение
for (ptr2 = 0; ptr2 < arr[A][B]; ptr2++)
ptr2=0; - адресу присвоили ноль
Цитата Сообщение от BananaSlamJama Посмотреть сообщение
if (ptr2 > ptr1)
Сравнение адресов, а не значений.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    int min=arr[0][0][0];
    for (int i = 0; i < A; i++)
    {
        for (int j = 0; j < B; j++)
        {
           int* ptr1 = arr[i][j];
           for (; ptr1 < arr[A][B]; ptr1++)
           {
               if (min > *ptr1)
                  min = *ptr1;
            }
        }
    }
1
17 / 17 / 12
Регистрация: 27.02.2018
Сообщений: 44
13.03.2018, 19:22 7
zss, благодарю

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

Добавлено через 32 секунды
там же смысл именно в адресной арифметике, то есть чтобы были выражения типа (указатель + i)
0
Модератор
Эксперт С++
9918 / 8441 / 5129
Регистрация: 18.12.2011
Сообщений: 22,601
13.03.2018, 20:50 8
Цитата Сообщение от OlyaClimova Посмотреть сообщение
где я ошиблась
Я Вам уже указал основное:
1.Указателю надо присваивать адрес реальной переменной, а не нуль,
к которому потом прибавляете по 4 байта
2. Сравнивать надо значение переменных (*ptr), а не их адреса
0
17 / 17 / 12
Регистрация: 27.02.2018
Сообщений: 44
14.03.2018, 13:18 9
zss, насколько я помню, arr == &arr[0][0][0], и если к arr мы прибавляем число, то получается другой указатель. то есть, arr + 2 = arr[0][0][2], разве нет?
0
Модератор
Эксперт С++
9918 / 8441 / 5129
Регистрация: 18.12.2011
Сообщений: 22,601
14.03.2018, 16:56 10
Цитата Сообщение от OlyaClimova Посмотреть сообщение
arr + 2 = arr[0][0][2]
Опять путаете адреса и значения
пусть
C++
1
int* ptr=&arr[0][0][0];
тогда
ptr + 2 это &arr[0][0][2]
*(ptr + 2) это arr[0][0][2]
1
17 / 17 / 12
Регистрация: 27.02.2018
Сообщений: 44
14.03.2018, 22:49 11
zss, а, ну это да.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2018, 22:49

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

Определить наибольшее и наименьшее значение и их местоположение в массиве
Дан двумерный массив MxN. Помогите определить наибольшее и наименьшее значение и их местоположение...

как найти в массиве наибольшее , наименьшее , среднее значение
как найти в массиве наибольшее , наименьшее , среднее значение ,определить количество элементов...

Как поменять местами наименьшее и наибольшее значение в массиве?
как поменять местами наименьшее и наибольшее значение в массиве.? Добавлено через 19 секунд ...

Создание пользовательского обработчика прерывания, определяющего наименьшее значение в массиве
Ребят,как мне в прерывании поменять его функционал Например ,есть номер прерывания 6E ,а мне нужно...


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

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

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