Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Помогите разобраться в Паскале


Автор: okaton 13.9.2007, 14:44
Доброго времени суток. Прошу о помощи. Пишу программу на c# (точнее переписываю, была написана когда-то на Паскале) и столкнулся срядом трудностей, я не очень понимаю этот язык (в смысле ТР). Помогите мне разобрать кусок кода:

Код

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;


где

Код

TYPE
     Ins_Data = Record
              Age     : Word;
              key     : word;
              Data_I  : Array[1..9,1..20] of Word;
     end;
     Ins_Tab3 = record
              D_Zad   : Array[0..20,1..10] of Single;
              end;
CONST
     Test     : Array[1..9] of tt = ('ДП','ИС','АН','ОБ','МЗ','ЧР','ПВ','ПО','ЗА');
     
VAR
     UserDat  :UserPar;
     tabl     : String[3];
     I_Data   : Ins_Data;
     O_Data   : Out_Data;
     I_Tab3   : Array[1..3] of Ins_Tab3;     
     F_Data   : File of Ins_Data;


Кстати что означает точка например между O_Data и Test

Автор: Rodman 13.9.2007, 14:57
Код

For m:=1 To 9 Do {цикл}
Begin
        e:=Word(Abs(Trunc(O_Data.Test[m,1])));
{переменной e присваивается значение. O_Data.Test[m,1] означает что мы обращаемся к элементу массива Test (структуры O_Data) под индексами m и 1. потом при помощи Trunc - округляется это значение и при помощи Abs берется модуль от полученного числа. и полученное значение приводится к типу Word (для верочки)}
        O_Data.Test[m,4]:= I_Tab3[I_Data.Age].D_Zad[e,m];{O_Data.Test[m,4] надеюсь теперь понял кто такой.  I_Tab3[I_Data.Age].D_Zad[e,m] обращение  к значению массива  D_Zad[e,m] из таблицы значений I_Tab3 с индексом который хранится в структуре I_Data.Age}
End;

теперь переспрашивай

Автор: okaton 13.9.2007, 15:17
Rodman большое спасибо за ответ

Правильно ли я понял, что O_Data это класс в котором находится двумерный массив Test[m,1] ?

word это беззнаковая 16 Битная переменная (типа  ushort или int16).  Зачем это здесь используется?

Вот это я совсем не понял I_Tab3[I_Data.Age].D_Zad[e,m] :( что здесь происходит

Автор: Rodman 13.9.2007, 15:50
Цитата(okaton @  13.9.2007,  15:17 Найти цитируемый пост)
Правильно ли я понял, что O_Data это класс в котором находится двумерный массив Test[m,1] ?

это структура!!!
Код

O_Data   : Out_Data;
я не вижу где объявлена Out_Data, но учитывая специфику кода, то предполагаю что это структура...
Цитата(okaton @  13.9.2007,  15:17 Найти цитируемый пост)
Что такое word, 2 байтовая переменная (int16 или short)? Зачем это здесь используется?

это такой тип переменной в Pascal - http://www.codenet.ru/progr/other/lpas1.php... а используется чтобы привести к этому типу, если вдруг не помогли предыдущие операции...
Цитата(okaton @  13.9.2007,  15:17 Найти цитируемый пост)
Вот это я совсем не понял I_Tab3[I_Data.Age].D_Zad[e,m] :(

не мудренно...
I_Tab3 - переменная типа "массив структур" по коду видно что состоит из 3 записей. грубо говоря одна запись это строка в которой хранятся еще массивы, т.к. 
Код

     Ins_Tab3 = record
              D_Zad   : Array[0..20,1..10] of Single;
              end;
 то что после точки...
ну а I_Data - тоже структура у которой есть поле Age в котором хранится целое число...

блин не легко на пальцах (т.е. на буквах) такое рассказать!

Автор: okaton 13.9.2007, 16:08
Код

TYPE
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;


А что такое структура?

По поводу O_Data.Test[m,4]:= I_Tab3[I_Data.Age].D_Zad[e,m]; я даже не знаю как сформулировать вопрос
В элементу массива Test[m,4] (которые перечислят цикл) структуры O_Data присваивается... что-то 
А почему для е (D_Zad[e,m]) нет цикла? каким образом может менятся е?

Автор: Rodman 13.9.2007, 16:19
Цитата(okaton @  13.9.2007,  16:08 Найти цитируемый пост)
А почему для е (D_Zad[e,m]) нет цикла? каким образом может менятся е? 

ну наверно не надо менять.. я же не знаю что должно происходить!
Цитата(okaton @  13.9.2007,  16:08 Найти цитируемый пост)
А что такое структура?

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

смори
Код

TYPE {объявление какого то своего типа}
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;
это нужно для того чтобы ты для себя знал что группа переменных относятся к структуре, т.е. предназначены для одной цели...

Добавлено через 26 секунд
 smile  - валяй еще вопрос

Автор: okaton 13.9.2007, 16:37
И все-таки что же сдесь происходит O_Data.Test[m,4]:= I_Tab3[I_Data.Age].D_Zad[e,m];
что в конечном счете записывается в Test[m,4] ?

может какие-то еще данные нужны чтобы отследить D_Zad[e,m]

кстати e:=Word(Abs(Trunc(O_Data.Test[m,1]))); случаем не относится ли к D_Zad[e,m]

Автор: Rodman 13.9.2007, 16:54
Цитата(okaton @  13.9.2007,  16:37 Найти цитируемый пост)
кстати e:=Word(Abs(Trunc(O_Data.Test[m,1]))); случаем не относится ли к D_Zad[e,m]

ну получается ты вычисляешь индекс строки матрицы
Цитата(okaton @  13.9.2007,  16:37 Найти цитируемый пост)
И все-таки что же сдесь происходит O_Data.Test[m,4]:= I_Tab3[I_Data.Age].D_Zad[e,m];

из массива D_Zad выбирается одно значение, а этот массив хранится в I_Tab3 под номером I_Data.Age....


ааааааааааааааааааааааааа... 

Автор: okaton 13.9.2007, 20:27
Спасибо большое. Начал вроде понимать. Пока что вопросов нет... 

Автор: volvo877 14.9.2007, 09:06
Модератор: Название темы должно отражать ее суть!

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