Loading...
StefanVAndreev avatar StefanVAndreev 1 Точки

Матрици C++

Здравейте,

Имам проблем, искам да създам матрица с размери приети от потребителя. Лошото е че когато се опитам да го създам, има грешка че размерите трябва да са константи, уж ги каствам към const и пак ме тормози.

https://pastebin.com/d3zYCmYU

Тагове:
0
Предложения и проблеми 16/12/2017 17:05:57
RoYaL avatar RoYaL Trainer 6849 Точки

Не е възможно това. Трябва да създадеш двумерен указател към цяло число. Т.е. указател към указател към число. След това за първото измерение да заделиш динамично памет за редовете, а за всеки ред след това да заделиш за колоните.

P.S.: Вариант е да ползваш вектор от вектори или структура, но подозирам, че не целиш това.

0
StefanVAndreev avatar StefanVAndreev 1 Точки

Намерих решение чрез вектори но имам проблем, направил съм го с INT а на мен ми трябва с float, и не знам как ще стане, някакви идеи?

https://pastebin.com/jjAU3yMu

0
ekolev avatar ekolev 13 Точки

Здравей,

Най-семпло за 2D ерей която е динамична е да ползваш ерей от пойнтерс. Като имаме предвид, че първия елемент във всеки единичен ерей държи адреса където се намира ерея, то ерей от пойнтерс би било ерей съдържащ ерейс.

Например:

#include<iostream>
using namespace std;

int main()
{
    // array of pointers
    int* arr[1];
    int rows = 0;
    int cols =0;
    cout << "Please enter the number of rows: ";
    cin >> rows;
    cout << "Plesae enter the number of columns: ";
    cin >> cols;
    // every pointer in the array points to the number
    // of elements in each column
    for (int i = 0; i < rows; i++) {
        arr[i] = new int[cols];
    }
    // simply initialize every element to 5
    for (int i = 0; i < rows; i++) {
        for (int x = 0; x < cols; x++)
            arr[i][x] = 5;
    }
    // print the array
    for (int i = 0; i < rows; i++) {
        for (int x = 0; x < cols; x++)
            cout<<arr[i][x]<<" ";
        cout << endl;
    }


    return 0;
}

При този подход трябва да имаш предвид, че когато освобождаваш паметта трябва да го направиш за всеки пойнтер във ерея.

0
20/12/2017 19:02:32
MartinPaunov avatar MartinPaunov 77 Точки

Здравей не знам точно каква е целта в задачата която имаш, но може да си създадеш вектор от вектори от double / float или някакви други типове данни. Тъй като имаш размера редовете и колоните можеш просто да използваш push_back и да въведеш елементите с два вложени цикъла вместо да попълваш елементите чрез достъп по индекс. В компилатора на Visual Studio няма да ти даде да създадеш матрица с променливи, като стойности на измеренията, но в Code blocks  например това ще работи. Вектора сам се грижи за оразмеряването си (реално когато се инициализира си заделя два пъти повече памет от типа данни, които ще съдържа и прави същото когато му е необходимо да пази повече елементи) не е необходимо да използваш resize.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.