Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Структуры в c#


Автор: okaton 26.9.2007, 22:22
Доброго времени суток. Мне нужно переработь код с Паскаля на c# и я столкнулся вот с такой трудностью:

здесь описываются типы (структура) и переменные 

Код

TYPE
Ins_Data = Record
              Age     : Word;
              key     : word;
              Data_I  : Array[1..9,1..20] of Word;
     end;

Ins_Tab2 = record
              D_Zad   : Array[0..20,0..10] of Single;
              end;

Ins_Tab3 = record
                D_Zad   : Array[0..20,1..10] of Single;

Out_Data = record
              Test    : Array[1..9,1..7] of Single;
              B5_Shk  : Array[1..9] of Single;
              Zad     : Array[1..10] of Single;
              ko      : Single;
              kpo     : Single;
              ssz     : Single;
              x       : Single;
              ki      : Single;
              pg      : Single;
              ob_sz   : Single;
              i       : Integer;
              end;

VAR
I_Tab3   : Array[1..3] of Ins_Tab3;
O_Data   : Out_Data;


Вот сдесь она используется

Код

For m:=1 To 9 Do
        Begin
        e:=Word(Abs(Trunc(O_Data.Test[m,1])));
        O_Data.Test[m,4]:=
          I_Tab3[I_Data.Age].D_Zad[e,m];
        End;


Принцип я понял вроде бы, а вот как это отразить в шарпе понять не получается:(
Помогите кто чем сможет

P.S. как объявить массив с заданными параметрами в структуре?

Автор: Bogdan1024 27.9.2007, 12:39
А в чём сама проблема? Ты просишь нас весь этот код набрать под C#?  smile 

Автор: okaton 27.9.2007, 12:50
Bogdan1024, Ну вобщем да, я попробовал создать структуру такого рода

Код

struct Ins_Tab3 //Ins_Tab3 = record
        {
            public Single[] D_Zad = new Single [19,10];  //D_Zad   : Array[0..20,1..10] of Single;            
        }


и подцепить к ней    
Код

Ins_Tab3[] I_Tab3 = new Ins_Tab3[3]     //I_Tab3   : Array[1..3] of Ins_Tab3;


неполучилось, вообще я со структурами столкнулся первый раз, как можно записать эту структуру со ссылками а потом воспользоваться ею

и как объявить массив с заданными параметрами в структуре???


Автор: Bogdan1024 27.9.2007, 15:26
Код

        class Ins_Tab3 //Ins_Tab3 = record
        {
            public Single[,] D_Zad = new Single[19,10];  //D_Zad   : Array[0..20,1..10] of Single;            
        }

Ибо у структур не могут быть инициализаторы, они есть только у классов. Или делай класс или инициализируй структуры руками.

Автор: okaton 27.9.2007, 15:35
Bogdan1024,  а каким образом можно проинициализировать структуру руками 2 неделю пытаюсь сделать, неполучается решил обратиться за помощью.

Все что у меня получилось это
Код

struct Ins_Tab3 //Ins_Tab3 = record
        {
            public Single[,] D_Zad;
        }

а где мне параметры массива определять и вообще где его создавать?

Автор: bend0r 27.9.2007, 15:41
там где ты с ней собираеся работать
Код

class Start
    {
        // The main entry point for the application.
        [STAThread]
        static void Main(string[] args)
        {
            Ins_Tab3[] I_Tab3 = new Ins_Tab3[3];
            Ins_Tab3 test;
            test.D_Zad = new Single[19, 10];
        }
        
    }


    struct Ins_Tab3
    {
        public Single[,] D_Zad;

    }

Автор: okaton 27.9.2007, 21:17
bend0r,  а как между собой связаны class Start и struct Ins_Tab3?

Автор: okaton 27.9.2007, 21:48
Что-то совсем ничего не получается:(
Будут рад любой разумной помощи только объясняйте пожалуйста как можно подробней.

Автор: bend0r 28.9.2007, 11:43
Цитата(okaton @  27.9.2007,  21:17 Найти цитируемый пост)
bend0r,  а как между собой связаны class Start и struct Ins_Tab3? 

они находятся в одном пространстве имен. то что я выложил это консольное приложение в котором метод Main является точкой входа в программу. ты можешь создавать и работать сосвоими структурами в любом другом классе.

посмотри это, мож понятней будет:
Код

using System;
using System.Web.Mail;

namespace Test
{
    class Start
    {
        // The main entry point for the application.
        [STAThread]
        static void Main(string[] args)
        {
            //Создаешь масив из 3 элементов Ins_Tab3
            Ins_Tab3[] massIns_Tab3 = new Ins_Tab3[3];
            //в цикле создаешь, инициализируешь и добавляешь в massIns_Tab3
            for (int i = 0; i < 3; i++)
            {
                Ins_Tab3 test;
                test.D_Zad = new float [,]{{1,2,3,4,},{4,3,2,1}};
                //test.D_Zad = new float[10,10];
                massIns_Tab3[i] = test;
            }
        }
        
    }


    struct Ins_Data
    {
        public string Age;
        public string key;
        public string[,] Data_I;
    }

    struct Ins_Tab2
    {
         public Single[,] D_Zad;
    }

    struct Ins_Tab3
    {
        public Single[,] D_Zad;
    }

   struct Out_Data
   {
       public Single[,] Test;
       public Single[] B5_Shk; 
       public Single[] Zad;
       public Single ko;
       public Single kpo;
       public Single ssz;
       public Single x;
       public Single ki;
       public Single pg;
       public Single ob_sz;
       public int i;
   }

}



Автор: okaton 28.9.2007, 19:08
bend0r, СПАСИБО ОГРОМНОЕ!!! 


Возникли тупые вопросы
Правильно ли я понимаю что структуры инициализируются в моем случае таки образом 
                                          Out_Data O_Data;         Ins_Tab3 I_Tab3;         Ins_Data I_Data;

А зачем нужен "using System.Web.Mail;"?

Почему структуры находятся в не класса Start?

Как мне заполнить "I_Tab3[I_Data.Age].D_Zad[e,m];" в каждом Age (их всего 3) я так понимаю свой D_Zad[e,m] в котором свои данные?

                                                                                                (так не получается)
Как мне посчитать "O_Data.Test[m, 4] = I_Tab3[I_Data.Age].D_Zad[e, m];" как мне добраться до D_Zad[e, m]?

Вот эту запись я не очень понял test.D_Zad = new float [,]{{1,2,3,4,},{4,3,2,1}}; :(

Автор: mr.DUDA 29.9.2007, 00:11
Цитата(okaton @  28.9.2007,  19:08 Найти цитируемый пост)
А зачем нужен "using System.Web.Mail;"?

Для создания объектов из неймспейса System.Mail

Цитата(okaton @  28.9.2007,  19:08 Найти цитируемый пост)
Почему структуры находятся в не класса Start?

Где объявили класс структуры - там он и находится.

Цитата(okaton @  28.9.2007,  19:08 Найти цитируемый пост)
Как мне заполнить "I_Tab3[I_Data.Age].D_Zad[e,m];" в каждом Age (их всего 3) я так понимаю свой D_Zad[e,m] в котором свои данные?

По порядку заполняйте. В цикле например.

Цитата(okaton @  28.9.2007,  19:08 Найти цитируемый пост)
Вот эту запись я не очень понял test.D_Zad = new float [,]{{1,2,3,4,},{4,3,2,1}}; :(

Синтаксис аналогичен С++

Автор: okaton 29.9.2007, 10:54
mr.DUDA, А как мне добраться до D_Zad[e,m] в I_Tab3[I_Data.Age].D_Zad[e,m] - такой ведь записи нет это из паскаля

у меня совсем плохо, я в с++ совсем "не очень", если не сложно, все-таки объясните test.D_Zad = new float [,]{{1,2,3,4,},{4,3,2,1}};

P.S. а какие объектов из неймспейса System.Mail здесь присутствуют?

Автор: okaton 1.10.2007, 10:45
Нашел интересный пример

Код

public static class global 
{
    static int[][,] k;
    static global () 
    {
        k = new int[3][,];
        for (int b = 0; b < 3; b++)
        {
            k[b] = new int[21, 10];
        }
    }
}


только не получается добраться до k:(

теперь массивы 0,1 и 2  нужно каким-то образом заполнить по порядку данными из файла

считываю файл таким образом
Код

float[] shorts;
            using (BinaryReader br = new BinaryReader(File.OpenRead("Single.Float")))
            {
                List<float> res = new List<float>();
                for (Int32 i = 0; br.BaseStream.Position < br.BaseStream.Length; i++)
                    res.Add(br.ReadSingle());
                shorts = res.ToArray();                
            }    


Как мне записать этот файл по порядку в массивы к[0], k[1], и k[2] ?


Автор: okaton 1.10.2007, 13:41
Справился сам, спасибо тем кто помогал!


 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)