1 Востаннє редагувалося 9torchuncky6 (18.09.2014 19:53:13)

Тема: Правельність ініціалізації

Добро дня у мене виникла невеличка проблема: мені потрібно обробити масив за допомогою метода включення  в окремому класі ,а тілі програми тільки задати розмірність ось що я написав:

Post's attachments

Program.cs 1.01 kb, 132 downloads since 2014-09-18 

2

Re: Правельність ініціалізації

Код - в тег [ code ] сюди, будь ласка.
І не зовсім зрозуміло, що вам треба - ініціалізувати масив в окремій функції, чи що?

3

Re: Правельність ініціалізації

Я неправильно висловився. У мене є в основному класі(Programm) програми масив цілих чисел, цей масив потрібно передати в інший клас(Rozrahunok) в якому є метод для сортування цього масива після чого повернути в основний клас вже відсортований масив. Я не можу зрозуміти , як відправити масив в клас (Rozrahunok) і потім його повернути вже відсортованим.

using System;
using System.Text.RegularExpressions;

namespace sampleClasses
{
    class Rozrahunok
    {
        public void InsertSort(IComparable[] array)// метод сортування включенням
{
           int i, j;
 
    for (i = 1; i < array.Length; i++)
    {
        IComparable value = array[i];
        j = i - 1;
        while ((j >= 0) && (array[j].CompareTo(value) > 0))
        {
            array[j + 1] = array[j];
            j--;
        }
        array[j + 1] = value;
    }
}     
    class Program
    {
        static void Main(string[] args)
        {
            //Rozrahunok Roz = new Rozrahunok();// ініціалізував обєкт класу 
            int [] array = new int[10];
             Random r = new Random();
             for (int i = 0; i < array.Length; i++)
             {
                 array[i] = r.Next(100);
             }
             Rozrahunok Roz = new Rozrahunok();
             Roz.InsertSort();//не знаю як заповнити дужки , коректно ..
        }

        }
    }
}

4

Re: Правельність ініціалізації

Два варіанти: "в лоба"

public IComparable[] InsertSort( IComparable[] array )
{
...
return array;
}
...
array = InsertSort( array );//InsertSort приймає масив і повертає відсортований

або через посилання

public IComparable[] InsertSort( ref IComparable[] array )
...
InsertSort( ref array );//передати функції посилання на масив, щоб вона його змінювала
Подякували: 9torchuncky61

5

Re: Правельність ініціалізації

koala написав:

Два варіанти: "в лоба"

public IComparable[] InsertSort( IComparable[] array )
{
...
return array;
}
...
array = InsertSort( array );//InsertSort приймає масив і повертає відсортований

або через посилання

public IComparable[] InsertSort( ref IComparable[] array )
...
InsertSort( ref array );//передати функції посилання на масив, щоб вона його змінювала

Не бачить InsertSort  в основному класі всеодно чи може я не правильно записав ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication8
{ 
    class Rozrahunok
    {
        public IComparable[] InsertSort(IComparable[] array)// метод сортування включенням
{
           int i, j;
    for (i = 1; i < array.Length; i++)
    {
        IComparable value = array[i];
        j = i - 1;
        while ((j >= 0) && (array[j].CompareTo(value) > 0))
        {
            array[j + 1] = array[j];
            j--;            
        }
        array[j + 1] = value;   
    }
    return array; 
}  
        
}
    class Program
    {
        static void Main(string[] args)
        {
            //Rozrahunok Roz = new Rozrahunok();// ініціалізував обєкт класу 
            int [] array = new int[10];
             Random r = new Random();
             for (int i = 0; i < array.Length; i++)
             {
                 array[i] = r.Next(100);
             }
             Rozrahunok Roz = new Rozrahunok();

             array = InsertSort(array);// у цій частині кода не бачить InserSort
             
            
          
        }

        }
    }

6

Re: Правельність ініціалізації

Звісно, що не бачить - функції без уточнення, звідки вони, викликаються тільки зі свого класу. Треба Roz.InsertSort викликати. Або зробити його статичним, не створювати екземляр класу і робити Rozrahunok.InsertSort.

7

Re: Правельність ініціалізації

Всі reference types, до яких відноситься і

IComparable[] array

передаються по ссилці (by reference) не залежно від того чи вказаний параметр ref чи ні. Цей параметр відповідає не за те що можна подумати спочатку.

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

8

Re: Правельність ініціалізації

truesupport +1
дійсно,

Because arrays are reference types, the method can change the value of the elements.

http://msdn.microsoft.com/en-us/library/hyfeyz71.aspx