Loading...
biser.stoev avatar biser.stoev 57 Точки

[Lab Problems] C# Basics - December 2014 - Problem{2} - Fun With Matrices

Здравейте, от 1 час се мъча да си намеря грешката в кода и не ми се получава. Е чрез дебъгване мисля, че я намерих: при  сплитването на командата ми брой и "-" като отделен стринг, а не заедно с числото както искам.

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

Работещ код: http://pastebin.com/Sm762qgb

Неработещ код: http://pastebin.com/Uxzt2Pb4

Примерен инпут: 

-2444411

500000

2 2 power 3

2 3 multiply -0.05

2 0 multiply 1.11

0 0 sum 13.99

Game Over!

Тагове:
1
Programming Basics 30/03/2015 11:22:48
KatyaMarincheva avatar KatyaMarincheva 572 Точки
Best Answer

Здравей Бисере,

в switch-a на неработещия код липсва update на съответната клетка на матрицата с Math.Pow(matrix[row, col], num);

Пише само: case "power": Math.Pow(matrix[row, col], num);

Докато в работещия ти код е:

                case "power":
                    matrix[row, col] = Math.Pow(matrix[row, col], num);

Поздравления за това че си се сетил да попиташ външен човек - аз веднъж изгубих цял ден да сравнявам два "идентични" кода - работещ и неработещ, и така по много бавен и труден начин разбрах че ако искам да ползвам готов код или части от него никога не трябва да го преписвам, трябва да го копирам и при нужда да го customize-на. При преписване се пропускат много детайли. А и ако си търси човек сам пропуска се губи много повече време.

Тествах - с тази поправка нераборещият код дава 100 точки в judge.

2
27/03/2015 22:47:56
biser.stoev avatar biser.stoev 57 Точки

Благодаря много :)

1
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Здравей, искам да попитам с коя част на кода се проверява условието за output:

  • In case there are two equal values priority is as follows: rows (upper-most), columns (left-most), left diagonal, right diagonal.

Нямам идея как да го направя.... точно тази част ми се опъна и резултатите ми в juge са съответно 85%

Ако някой има време може да погледне кода ТУК

1
29/03/2015 16:10:22
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Здравей Галя,

equal values priority  в кода на колегата е решено със самото подреждане на блоковете код изчисляващи сума в програмата.

Изчисленията на сумите започват с редовете:

        double maxSum = double.MinValue;
        int index = 0;
        string maxType = "ROW";
 
        for (int row = 0; row < 4; row++)
        {
            double sum = matrix[row, 0] + matrix[row, 1] + matrix[row, 2] + matrix[row, 3];
            if (sum > maxSum)
            {
                maxSum = sum;
                index = row;
            }
        }
после са колоните, но ако някоя от колоните е със сума равна на максималната сума достигната от ред - няма да правим никаква промяна, промяна ще има само ако някоя колона се окаже със сума надвищаваща максималната сума получена за ред:
            if (sum > maxSum) // ред 64 от програмата на колегата
            {
                maxSum = sum;
                index = col;
                maxType = "COLUMN";
            }
и така нататък, самите блокове код изчисляващи сумите са подредени по priority, и  сума изчислена в code block с по-ниско priority може да измести сума изчислена от предишен code block само ако е по-голяма, не и ако е равна.
1
KatyaMarincheva avatar KatyaMarincheva 572 Точки

Програмата ти дава 100 точки в judge -

залагането на правилото за equal values priority ти е всъщност много логично направено.

Единственото което промених в кода беше да сменя декларацията

double largestSum = 0;

с double largestSum = double.MinValue;

защото в условието на задачата пише че инпута може да се състои и от отрицателни числа

  • All numbers are in the range [±5.0 × 10−324 … ±1.7 × 10308].

Това не е грешка а само мислене на програмист, т.е. гениално и съответно разсеяно :)

2
29/03/2015 17:09:05
GalyaGeorgieva avatar GalyaGeorgieva 88 Точки

Много ти благодаря, Катя.

Наистина дребно нещо, но...
Прекрасно обясняваш и се радвам, че можем да разчитаме на твоето присъствие във форума.

1
g.pipkov avatar g.pipkov 2 Точки

Здравейте, реших задачата с помощта на поста на колегата, но не мога да разбера защо judge системата дава 71/100 точки. Моля за разяснение. Ето кода: http://pastebin.com/0Uh0VcVU . Благодаря предварително.

0
Filkolev avatar Filkolev 4482 Точки

Виж хубаво какво правиш при диагоналите, имаш грешка в логиката.

1
21/08/2015 15:21:10
g.pipkov avatar g.pipkov 2 Точки

Пусто невнимание. Благодаря за бързия отговор.

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