C# Part 2 - Multidimensional Arrays Homework


2
Пускам тема и за второто домашно. Тук са моите решения.



Отговори



0

Здравейте,

      Тъй като за първи път решавам задача, в която е включен материалът от ООП(задача 6), бих помолил, който има желание и време, да погледне решението ми и да каже, дали горе долу правилно разсъждавам и структурирам задачата. Не търся конкретни забележки, а просто цялостно мнение, дали трябва да чета още доста преди да се опитвам да решавам такива задачи. Ето го и решението: click.


от antoanelenkov (1047 точки)


2
Можеш да погледнеш ТОВА видео ако имаш нещо неясно.Много добре е обяснено всичко около задачата.

от baretata (934 точки)

0
Тамън го изгледах, аз не съм разбрал правилно условието. Трябва да се  ПРЕДЕФИНИРАТ операторите. Мерси :)

от antoanelenkov (1047 точки)



0

Първата задача си е баш "рисуване" по конзолата. Не можах сам да го измисля, погледнах решенията на другите.  Добре, 2 цикъла, първият е за колона, вторият за ред. Попълваме го. Звучи логично. Въпреки че не бих се сетил да разменя местата на ред и колона в циклите. Проблемът:

- при принтирането пак 2 цикъла - външен за колона, вътрешен за ред. И редът се вижда, че се увеличава, но конзолата пише пак на първия ред и някак вади правилните числа. Как става тая работа? Това още в първата част на C# ме озори, не не остана време да му обърна повече внимание. И да, знам, че конзолата може само да рисува ред след ред. 

http://i.imgur.com/LuVf22t.png

Ако при принтирането сменя местата на циклите - първо ред, после колона - обичайното. Ми ги вади последователно

1 2 3 4
5 6 7 8 и т.н. Това го разбирам.


от Bruno (921 точки)


2

Независимо как го кръстиш, при принтирането външният цикъл върви по редове - взема първия, влиза във вътрешния цикъл, изписва всяка колона до края на реда, след което минава на втория и т.н. Какво точно ще попълни на съответните ред и колона идва от arr[row, col] - индексите вътре. Ако col е във външния цикъл както при теб, като влезе във вътрешния цикъл за пръв път ще вземе arr[0,0], след което arr[1,0], arr[2,0] и нататък, понеже row е това, което се увеличава. Най-лесно е да го дебъгнеш, за да си го проследиш и обясниш. ;)

P.S. Можеш и вместо да разместваш циклите, да смениш местата на индексите - arr[col, row], ако искаш да изпишеш редовете от масива като колони. :)


от svetlai (1438 точки)

0

Т.е. идеята е просто да си напълним многомерния масив последователно, а после, при изписването, просто да сменим координатите за изписване? Последователно са записани в масива - 1, 2, 3, 4, 5, 6 и т.н., но ние му казваме - дай ми ги в друга подредба. И изписването не зависи от това как са запаметени в самия масив. И може би няма значение, стига да ти ги връща така, както искаш.

.... Да, точно така! Сега си го разчертах. Ееее! То се иска мозък за тая работа. Брех! Хората, които виждат тия зависимости, без да чертаят и да го мислят имат бая остър ум. Направо... нямам думи. Мерси, svetlai! :D Тайната е разгадана! Сега да видим останалите как са....


от Bruno (921 точки)



1

Трябва да добавиш един ред за преизчиляване на стойността в съответната клетка:

matrixA[i, j] = i + 1 + n*j;

http://pastebin.com/JkxrgH0W


от emil_t (210 точки)


0
И Светла горе го предложи. Това вече ме закопа. Може би ще ми трябват няколко часа или ден, за да го осмисля... евентуално.

от Bruno (921 точки)


0
ТУК е и моето домашно, но е без 6та задача, че нещо не можах да я измисля, ако на някой му се обеснява ще съм благодарна да удари едно рамо :)



0

Ето едно видео, в което много добре са обяснени стъпките при създаването на class Matrix.

Бих ти препоръчал да го изгледаш на 1.75 playback speed, за да не губиш излишно време. :)


от lnikod4s (6538 точки)

1
Да по този начин ги гледам видеата, че иначе много време отнема :) така направих при подготовката за изпита :)



1
Бих искал да попитам някой ,който е запознат със типа/съкращението "ref" ,какво е неговото приложение,кога се ползва и при какви условия за улеснение и т.н. Видях някои методи ,които на входа си взимат ref int, ref char[] и искам да ги разбера и тях.Мисля,че и на другите ще е полезно,благодаря.

от IvayloAndonov (1994 точки)


2

Ето колега дано съм помогнал.

Аргументи могат да се предават по референция, когато при извикване на метод към описанието на параметър в дефиницията на метода се добави ключова дума ref или out. Удобно е да се използват, когато се налага в даден метод стойността на променлива да се променя по референция, т.е. тази промяна директно се отразява на променливата. Разликата между тези два параметъра е, че преди инициализацията при out достъпът е само за писане, докато при ref достъпът е за четене и писане.

void PassRef(ref int x)
{
    if(x == 2) x = 10;
}
int Z;
PassRef(ref Z);
 
void PassOut(out int x)
{
    x = 2;
}
int Q;
PassOut(out Q);

 Тук е цялата статия има доста неща описани. ТУК

  

от chernogorov (220 точки)

2

Свързано е с типовете данни - имаш примитивни (int, double) и референтни (int[]). Примитивните си пазят директно стойността, докато референтните - референция към мястото, на което се намира съответната стойност в паметта. Т.е. ако имаш int a = 5; int b = a; b ще е съвсем отделна променлива, равна на 5, докато ако имаш int[] a = {1, 2, 3}; int[] b = a; b и a ще сочат към едни и същи данни и ако промениш a, промяната ще се отрази и в b.

That said... като добавиш ref към параметъра, ти го правиш референтен и всеки път, когато го променяш в метода, промяната се отразява върху една и съща променлива извън него. Удобно е например като сумираш/броиш нещо и искаш да натрупваш тази сума. Ето един пример - виж разликата когато е с ref и без ref.


от svetlai (1438 точки)



0

Забелязах в кода ти на 6 задача, че умножаваш всеки с всеки елемент, а математически би трябвало да е:

for (int i = 0; i < MatrixSize;i++)

{

newMatrix[x, y] += mat1[x, y] * mat2[x, y];

}




0
Решения на задачите от 1 до 5.



0
Това са от мен задачите от 1-ва до 5та - цък



0
Машинииии :)

от Dobata7 (44 точки)


0
Здравейте бих искал да споделя решението на първата задача с рисуването на матрицата! Всички условия съм ги групирал в един проект като потребителя избира кой вариант от матрицата иска ;) Направих няколко теста и и бих казал, че работи коректно :) 

от kristian.face (871 точки)