0 / 0 / 0
Регистрация: 22.12.2020
Сообщений: 2
1

Инициализация массива без индексации

22.12.2020, 11:54. Показов 1081. Ответов 5
Метки нет (Все метки)

Доброго времени суток, преподаватель попросил задать массив без использования индексов i,j впринципе. Сам массив представляет собой матрицу размером NxN (пусть в одномерном массиве 9 элементов для матрицы 3x3) Нужно заполнить нулями все элементы кроме диагональных, диагональным присвоить значение diagonal_value
Если что, то *(elements+i) эквивалентен elements[i] (это ответ препода, он не подходит)
Вот что получилось у меня

C++
1
2
3
4
5
6
7
double *p_elements = elements; 
//зануление элементов 
for(int i = 0; i < size*size; i++, p_elements++)
 *p_elements = 0; 
//присваивание диагональным
 for(double i = 0; i < size; i++,p_elements = i * (1+col_size)) 
*p_elements= diagonal_value;
Примерно как то так, но в данном случае это не работает(

Добавлено через 6 минут
col_size в данном случае равно size, потому что матрица квадратная (код просто вырван с основной части где объявлено это)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2020, 11:54
Ответы с готовыми решениями:

Код без индексации, с указателями
Кому не сложно переписать мой код с указателями? По задаче индексация запрещена. Тема для меня...

Работа со строками, без индексации
Снова обращаюсь за помощью в решении задачи: &quot;определить количество вхождений в строку каждого из...

Нуль-терминальные строки без индексации
есть две строки char. 1.как их задать без индексации(с последующим вводом через cin)? 2.как...

Помогите переписать программу без использования индексации
Всем добрый вечер. помогите записать программу без: #include &lt;iostream&gt; #include &lt;string&gt; using...

5
1692 / 1094 / 336
Регистрация: 25.01.2019
Сообщений: 2,864
22.12.2020, 12:06 2
Что-то я не совсем понял
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
int main()
{
    double d_val = 9;
    
    const int n = 3;
    double x[n*n] = { 0 };
    
    int k = n;
    while(k--) x[k + k*n] = d_val;
    
    for(int i=0, e = n*n; i<e; ++i)
    {
        if(!(i%n)) std::cout << "\n";
        std::cout << x[i] << " ";
    }
    
    return 0;
}
0
0 / 0 / 0
Регистрация: 22.12.2020
Сообщений: 2
22.12.2020, 12:12  [ТС] 3
В данном случае опять таки используется индексация для элемента x[k+k*n] (этого быть не должно!) и все это нужно завернуть через указатели..
Честно говоря я сам не совсем понимаю этого препода, но тот отрывок что я скинул +- правильный, нужно лишь как то его поправить...(

Добавлено через 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
Matrix::Matrix(int size, double diagonal_value)
{
    simple_copy = false;
    
    error_code = 0;
    if (size == 0)
    {
        error_code = -1;
        
        row_size = 0;
        col_size = 0;
        elements = nullptr;
        
        return;
    }
    
    row_size = size;
    col_size = size;
    
    elements = new double[size * size];
    
    double *p_elements = elements;
    
    for(int i = 0; i < size*size; i++, p_elements++)
        *p_elements = 0;
    
 
    for(int i = 0; i < size; i++,p_elements++)
        *p_elements + i * (1 + col_size) = diagonal_value; //вот это нужно исправить 
}
0
16469 / 8968 / 2199
Регистрация: 30.01.2014
Сообщений: 15,571
22.12.2020, 12:15 4
Cunberssss, ответ препода подходит.

x[k+k*n] -> *(x + (k+k*n))
0
6574 / 4559 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
22.12.2020, 12:17 5
Цитата Сообщение от Cunberssss Посмотреть сообщение
Примерно как то так, но в данном случае это не работает(
Цитата Сообщение от Cunberssss Посмотреть сообщение
//присваивание диагональным
 for(double i = 0; i < size; i++,p_elements = i * (1+col_size))
*p_elements= diagonal_value;
C++
1
2
        for (double *p = x, *end = p + n * n; p < end; p += n + 1)
            *p = diagonal_value;
1
1692 / 1094 / 336
Регистрация: 25.01.2019
Сообщений: 2,864
22.12.2020, 12:46 6
Или это про векторную арифметику?
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
#include <iostream>
 
int main()
{
    double d_val = 6;
    
    const int n = 4;
    double x[n*n] = { 0 };
    
    double* k = x;
    double* e = x + n*n;
    while(k < e)
    {
        *k = d_val;
        k += n + 1; 
    }
    
    for(int i=0, e = n*n; i<e; ++i)
    {
        if(!(i%n)) std::cout << "\n";
        std::cout << x[i] << " ";
    }
    
    return 0;
}
Добавлено через 26 минут
Цитата Сообщение от Folian Посмотреть сообщение
векторную арифметику
Тфу! Совсем больной стал. Арифметика указателей, конечно.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2020, 12:46
Помогаю со студенческими работами здесь

Строка: Как посчитать, сколько раз буква встречается в строке без операции индексации?
Как посчитать сколько раз буква встречается в строке, без операции индексации?

Инициализация статических объектов без конструктора
Что-то я как ни вертел этот код, он у меня не заработал. Как я понял, смысл в том что не надо...

инициализация массива, вывод массива и обработка массива должны быть реализованы с помощью функций.
1 Последовательность a1; a2; ...; an состоит из нулей и единиц. Поставить в начало этой...

обращение к элементам массива символов без индексации
как обратиться к элементам массива из символом не используя индексацию, а только при помощи функций...

Инициализация массива структур без задания размера
Здравствуйте, уже полдня сижу голову ломаю. Почему не работает такой код на C: //This is File.h...

тИЦ без индексации
Заметил сегодня что у свежего непроиндексированного сайта тИЦ уже 10 стал. Да! Индексацию нынче...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru