1

Тема: Процедури с#

Дано квадратну матрицю А розміром nxn. Скласти програму нормування матриці, поділивши вС елементи кожного
рядка на максимальний елемент за модулем цього рядка. Пошук максимального елемента рядка оформити у вигляді прцедури.

Допоможіть будь-ласка.

2

Re: Процедури с#

А можна використовувати linq ?

3 Востаннє редагувалося truesupport (10.12.2012 02:20:55)

Re: Процедури с#

В мене сьогодні хороший настрій я нарешті закінчив проект, через те тримай  :)


using System;

namespace matrix_normalization
{
    class Program
    {
        /// <summary>
        /// Розмір матриці
        /// </summary>
        static int size = 6;

        /// <summary>
        /// Сама матриця
        /// </summary>
        static float[,] a;

        /// <summary>
        /// Точка входу в програму
        /// </summary>
        static void Main(string[] args)
        {
            InitializeMatrix();
            FillMatrix();
            PrintMatrix();
            
            float[] maxInRow = new float[size];
            for (int j = 0; j < size; j++)
            {
                maxInRow[j] = GetMaxInRow(j);
            }

            NormalizeMatrix(maxInRow);

            PrintMatrix();

            Console.ReadKey(true);

        }
        
        /// <summary>
        /// Виділяє память під матрицю
        /// </summary>
        static void InitializeMatrix()
        {
            a = new float[size, size];
        }

        static void FillMatrix()
        {
            var rnd = new Random();
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    a[i, j] = rnd.Next(100);
                }
            }
        }
        /// <summary>
        /// Повертає максимальний елемент рядка
        /// </summary>
        /// <param name="rowId">Індекс рядка (j)</param>
        /// <returns></returns>
        static float GetMaxInRow(int rowId)
        {
            float max = a[0, rowId];
            for (int i = 1; i < size; i++)
            {
                // Якщо поточний елемент більший максимального то присвоїти
                // максимальному елементу поточний
                max = a[i, rowId] > max ? a[i, rowId]: max;
            }
            return max;
        }

        /// <summary>
        /// Нормалізує матрицю
        /// </summary>
        /// <param name="maxInRow">Масив максимальних елементів</param>
        static void NormalizeMatrix(float[] maxInRow)
        {
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    a[i, j] /= maxInRow[i]; 
                }
            }
        }

        /// <summary>
        /// Друкує матрицю не екран
        /// </summary>
        static void PrintMatrix()
        {
            Console.WriteLine(string.Format("\t\t\t{0}", "Поточний стан матриці"));
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    Console.Write(string.Format("{0:f1} ", a[i, j]));
                }
                Console.WriteLine();
            }
        }
    }
}

А точно цю тему в роділ .net перенести було б непогано а то там 60% тем мною створені :)

Подякували: Replace, leofun012

4

Re: Процедури с#

truesupport написав:

В мене сьогодні хороший настрій я нарешті закінчив проект, через те тримай  :)


using System;

namespace matrix_normalization
{
    class Program
    {
        /// <summary>
        /// Розмір матриці
        /// </summary>
        static int size = 6;

        /// <summary>
        /// Сама матриця
        /// </summary>
        static float[,] a;

        /// <summary>
        /// Точка входу в програму
        /// </summary>
        static void Main(string[] args)
        {
            InitializeMatrix();
            FillMatrix();
            PrintMatrix();
            
            float[] maxInRow = new float[size];
            for (int j = 0; j < size; j++)
            {
                maxInRow[j] = GetMaxInRow(j);
            }

            NormalizeMatrix(maxInRow);

            PrintMatrix();

            Console.ReadKey(true);

        }
        
        /// <summary>
        /// Виділяє память під матрицю
        /// </summary>
        static void InitializeMatrix()
        {
            a = new float[size, size];
        }

        static void FillMatrix()
        {
            var rnd = new Random();
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    a[i, j] = rnd.Next(100);
                }
            }
        }
        /// <summary>
        /// Повертає максимальний елемент рядка
        /// </summary>
        /// <param name="rowId">Індекс рядка (j)</param>
        /// <returns></returns>
        static float GetMaxInRow(int rowId)
        {
            float max = a[0, rowId];
            for (int i = 1; i < size; i++)
            {
                // Якщо поточний елемент більший максимального то присвоїти
                // максимальному елементу поточний
                max = a[i, rowId] > max ? a[i, rowId]: max;
            }
            return max;
        }

        /// <summary>
        /// Нормалізує матрицю
        /// </summary>
        /// <param name="maxInRow">Масив максимальних елементів</param>
        static void NormalizeMatrix(float[] maxInRow)
        {
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    a[i, j] /= maxInRow[i]; 
                }
            }
        }

        /// <summary>
        /// Друкує матрицю не екран
        /// </summary>
        static void PrintMatrix()
        {
            Console.WriteLine(string.Format("\t\t\t{0}", "Поточний стан матриці"));
            for (int i = 0; i < size; i++)
            {
                for (int j = 0; j < size; j++)
                {
                    Console.Write(string.Format("{0:f1} ", a[i, j]));
                }
                Console.WriteLine();
            }
        }
    }
}

А точно цю тему в роділ .net перенести було б непогано а то там 60% тем мною створені :)

Це мова СІ ?

5

Re: Процедури с#

Це точно не мова сі, ну я прочитав заголовок теми там пише "Процедури с#", ну вот я і написав на с#. А вот воно як виявилось, ну нічого повезе в інший раз :)

6

Re: Процедури с#

truesupport написав:

Це точно не мова сі, ну я прочитав заголовок теми там пише "Процедури с#", ну вот я і написав на с#. А вот воно як виявилось, ну нічого повезе в інший раз :)

Не допоможете ?

7

Re: Процедури с#

ihorhol написав:
truesupport написав:

Це точно не мова сі, ну я прочитав заголовок теми там пише "Процедури с#", ну вот я і написав на с#. А вот воно як виявилось, ну нічого повезе в інший раз :)

Не допоможете ?

А хіба вам не допомогли?

I belong to the Dead Generation.
Подякували: leofun011

8

Re: Процедури с#

Bartash написав:
ihorhol написав:
truesupport написав:

Це точно не мова сі, ну я прочитав заголовок теми там пише "Процедури с#", ну вот я і написав на с#. А вот воно як виявилось, ну нічого повезе в інший раз :)

Не допоможете ?

А хіба вам не допомогли?

Ні, тому що, програма написана не на мові СІ.

9

Re: Процедури с#

Q: А хіба вам не допомогли?
A: Ні, тому що, програма написана не на мові СІ.

Ти неправильно розумієш слово допомога, воно не означає зробіть за мене.

Подякували: leofun011

10

Re: Процедури с#

truesupport написав:

Q: А хіба вам не допомогли?
A: Ні, тому що, програма написана не на мові СІ.

Ти неправильно розумієш слово допомога, воно не означає зробіть за мене.

До того ж в назві теми чітко читається: "C#", а не "C" чи "C++". Якщо автору теми різниця невідома, то ліпше вирішення задачі починати з невеликої аналітично-пошукової роботи на тему "Відмінність С від С#". 15-20 сторінок А4, 14пт, Times New Roman, 1.5 інтервал - все, як годиться. :)

I belong to the Dead Generation.
Подякували: bunyk, Replace, Очі.завидющі, leofun014

11

Re: Процедури с#

Bartash написав:

До того ж в назві теми чітко читається: "C#", а не "C" чи "C++". Якщо автору теми різниця невідома, то ліпше вирішення задачі починати з невеликої аналітично-пошукової роботи на тему "Відмінність С від С#". 15-20 сторінок А4, 14пт, Times New Roman, 1.5 інтервал - все, як годиться. :)

І не відповідати на запитання користувача поки не виконає це домашнє завдання. :)

12

Re: Процедури с#

от тільки треба було зразу зрозуміти що це завдання по С бо процедур в С# нема

13

Re: Процедури с#

от тільки треба було зразу зрозуміти що це завдання по С бо процедур в С# нема

Не чіпляйитесь до слів. Процедура це термін в галузі computer science і не залежить від мови програмування. Те, що в одних мовах воно одділяє блок кода(підпрограму) ключовим словом procedure, а в інших function ще нічого не значить. До речі procedure є в паскалі, а в С лише function а також під процедурою розуміють функцію, яка нічого не вертає. Ви мали б це зразу зрозуміти, як знавець С/С# ;)

Бодай вас Бог любив, а мене – молодиці!
Подякували: Bartash, Invader2

14

Re: Процедури с#

Очі.завидющі написав:

До речі procedure є в паскалі, а в С лише function а також під процедурою розуміють функцію, яка нічого не вертає. Ви мали б це зразу зрозуміти, як знавець С/С# ;)

Мої кроки у програмуванні починалися у вільних степах С, тому, дещо згодом у школі почалися авеню Паскаля, мій мозок довго не міг зрозуміти, для чого взагалі визначати окремо процедури та функції, якщо вони, по суті, лише на тип поверненого значення і відрізняються. :)

I belong to the Dead Generation.

15

Re: Процедури с#

ну ви б мали все-таки розуміти, чому окремо виділяють процедури і методи(звичайно і це і це функції) проте давайте згадаємо чим відрізняється застосування функцій в ООП і в прооцедурному програмуванні, в ООП функції не можуть бути за межами класу - тому вони належать певному класу і є його методами, в процедурному програмуванні - функції не належать класам, або можуть не належати класам (у випадку якщо це не є чисто об'єктно оріентована мова) - тоді їх називають процедурами, а типи повернення і т.п не є визначальним фактором у понятті процедура-метод.

16

Re: Процедури с#

RomkoModus, поки що я не розумію різницю між процедурами та функціями в сі подібних мовах. Слово процедура останнім часом взагалі не вживаю. Різницю між процедурами або функціями, що для мене одне і те саме, і методами я розумію, проте багато викладачів цю різницю не бачать або про неї не говорять, тому я на такі деталі як написати процедуру замість написати метод уваги просто не звертаю.

п.с. Bartash говорить про різницю між процедурами та функціями, а ви йому про різницю методів і процедур.

17

Re: Процедури с#

@RomkoModus
Погоджуюсь, але...

а типи повернення і т.п не є визначальним фактором у понятті процедура-метод.

Для паскалеподібних мов саме цей фактор є визначальним. Погодьтесь, що Нікалаус Вірт є авторитетом в computer science. Наші любі викладачі іншого авторитета не знають, тому в навчальному процесі використовується саме ця термінологія.

(у випадку якщо це не є чисто об'єктно-орієнтована мова)


Чисто об'єктна мова smalltalk, бо інші не годяться через можливість доступу до полів класів напряму. А писати в ООП стілі є можливість і на асемблері.

Бодай вас Бог любив, а мене – молодиці!