Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: 2 вопроса по паскалю
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
_Ivan_33
1) как сделать приведение типов если есть выражение a:=b[i]1000 + b[i+x]; причем а-longint а b - megatype который обявлен как array[1..100] of integer
2) препод говорил про функции приводящие символьную переменную в число и наоборот - подскажите что за ф-ции?
_Pasha
Цитата(_Ivan_33 @ Nov 14 2008, 17:35) *
a:=b[i]1000 + b[i+x];

Смотря что у Вас стоИт между b[i] и 1000 smile.gif Пропустили знак какой ?
Цитата
2) препод говорил про функции приводящие символьную переменную в число и наоборот - подскажите что за ф-ции?

Процедуры (не функции - это не Си)
val() и str()
MrYuran
Цитата(_Pasha @ Nov 14 2008, 17:00) *
Процедуры (не функции - это не Си)

Как раз-таки функции, раз значение возвращают.
_Pasha
Цитата(MrYuran @ Nov 14 2008, 18:09) *
Как раз-таки функции, раз значение возвращают.

Апядь холевара smile.gif
Оне ж не так возвращают
Код
MyVar := val(...);

а в параметрах по ссылке. Стало быть как функция они не возвращают ничего.
Неча развращать студентов smile.gif
_Ivan_33
между 1000 и b[i] стоит умножение *
_Pasha
Цитата(_Ivan_33 @ Nov 15 2008, 19:55) *
между 1000 и b[i] стоит умножение *

тогда
Код
a:= b[i]*1000 + b[i+x];

не нуждается в "ручном" приведении типов, т.к. выражение справа тоже будет типа longint
Компилер это видит благодаря тому, что в выражении присутствует константа. Раз так - сразу понятно, что в случае если b[i] будет равно максимально представимому целому (MAXINT), результат выражения никогда не станет больше максимально возможного longint
Вот если бы
Код
var
a:longint;
b:megatype;
i,x,m:integer;

begin
m:= func; // здесь мы получили значение m хз откуда и хз какое
a:= b[i]*m + b[i+x]; // то здесь нормальный компилер должен матюкнуццо "invalid type cast"
end;
_Ivan_33
а у меня пишет type mismatch... лан, ломать над этим голову не буду... сделаю по-другому
_Pasha
Цитата(_Ivan_33 @ Nov 15 2008, 23:09) *
а у меня пишет type mismatch...

Точно! type mismatch. А кто пишет-то? TP7.0 или поновее?
_Ivan_33
версия 7.1
по-моему я разобрался - здесь ошибок не выдает ... осталось еще другое подправить и будет все пучком...
а как в сурец сделать так чтоб компилятор написал туда мое имя фамилию и другие данные?
_Pasha
Цитата(_Ivan_33 @ Nov 15 2008, 23:25) *
а как в сурец сделать так чтоб компилятор написал туда мое имя фамилию и другие данные?

Ниасилил.
Кто куда должен писать ?
AHTOXA
Цитата(_Pasha @ Nov 16 2008, 02:13) *
Ниасилил.
Кто куда должен писать ?


Дык, компилятор, в сурец! :-)

Видимо так:
Код
const MyName : string = '_Ivan_33';


(Не помню, поймёт bp7 такое, или надо var)
_Pasha
Цитата(AHTOXA @ Nov 16 2008, 00:45) *
(Не помню, поймёт bp7 такое, или надо var)

Понять-то поймет, тока это уже не просто в сурец пойдет, а и в ехешник smile.gif
ежели просто в сурец - то можно и в каменте (*Иванов Иван Иваныч*).
Но, подозреваю, что суровый препод мог "предложить" написать программу, которая открывает свой собственный сурец и добавляет туда эти самые ФИО. Вот поэтому и не понял smile.gif
AHTOXA
Цитата(_Pasha @ Nov 16 2008, 02:54) *
Понять-то поймет, тока это уже не просто в сурец пойдет, а и в ехешник smile.gif

Дык! И препод сможет увидеть, что автор изготовил программу самолично, а не взял у товарищаsmile.gif
Цитата(_Pasha @ Nov 16 2008, 02:54) *
Но, подозреваю, что суровый препод мог "предложить" написать программу, которая открывает свой собственный сурец и добавляет туда эти самые ФИО. Вот поэтому и не понял smile.gif

Неужели бывают такие жестокие преподы?! smile.gif))
_Ivan_33
нет, как в других компиляторах в свойствах проекта можно ставить свои данные ... а здесь как делать также?
777777
Цитата(_Pasha @ Nov 14 2008, 17:18) *
Апядь холевара smile.gif
Оне ж не так возвращают
Код
MyVar := val(...);

а в параметрах по ссылке. Стало быть как функция они не возвращают ничего.
Неча развращать студентов smile.gif

Я, конечно, понимаю, что Паскакаль дебильнй язык, но про эти "функции" всегда думал, что это не функции и не процедуры, а лишь указание компилятору считать аргументы другим типом. То есть, оператор преобразования типа. Если же это действительно реальные функции, которым что-то передается и они генерируют вызов - то какие еще могут быть разговоры о паскале? Нахрена он это все делает? Есть символьная переменная, какие проблемы сложить ее с int? Сложи младший байт, затем к старшим прибавь 0 с переносом. Неужели паскаль вызывает функцию, которая возвращает то же число, но с добавлением нулевых байтов, и только это число можно использовать для сложения с int?
_Pasha
Цитата(777777 @ Nov 17 2008, 09:31) *

ппц... но если интересно, сходите по линкам во втором посте топика.
AHTOXA
Цитата(777777 @ Nov 17 2008, 11:31) *
Я, конечно, понимаю, что Паскакаль дебильнй язык, но про эти "функции" всегда думал, что это не функции и не процедуры, а лишь указание компилятору считать аргументы другим типом. То есть, оператор преобразования типа.


Во, чувствуется знаток паскаляsmile.gif

Цитата
Если же это действительно реальные функции, которым что-то передается и они генерируют вызов - то какие еще могут быть разговоры о паскале? Нахрена он это все делает?


Чтобы преобразовать численное значение в строку и обратно. Как atoi/itoa в Си.
777777
Цитата(AHTOXA @ Nov 17 2008, 09:20) *
Во, чувствуется знаток паскаляsmile.gif

Я отюдь не знаток паскаля и, к счастью, никогда на нем не писал.
Цитата(AHTOXA @ Nov 17 2008, 09:20) *
Чтобы преобразовать численное значение в строку и обратно. Как atoi/itoa в Си.

Значит я спутал с другими "функциями" одна из них называлась кажется ord() а обратная не помню. Ну хоть они-то не функции, а операторы языка?
AHTOXA
Цитата(777777 @ Nov 17 2008, 13:50) *
Я отюдь не знаток паскаля и, к счастью, никогда на нем не писал.


Почему же тогда вы считаете, что можете судить о нём?

Цитата(777777 @ Nov 17 2008, 13:50) *
понимаю, что Паскакаль дебильнй язык
_Ivan_33
вот у меня есть функция tip в нее экспортируется 1 параметр и 1 массив... выходное значение функции - integer....
как мне в главное программе какой то переменной присвоить значение этой функции?!?!? все время в этой строке пишет ошибку напишите пример плс...
_Pasha
Цитата(_Ivan_33 @ Nov 17 2008, 15:26) *
вот у меня есть функция tip в нее экспортируется 1 параметр и 1 массив... выходное значение функции - integer....
как мне в главное программе какой то переменной присвоить значение этой функции?!?!? все время в этой строке пишет ошибку напишите пример плс...

Так, что ли ?
Код
type
Tbuffer= array[1..100] of integer;
var
work,index:integer;
buffer: Tbuffer;

function tip(param1: integer; var param2: Tbuffer)
begin
tip := param2[lo(param1)] mod param1; (* хз чего сделали *)
end;

(* THE MAIN PROGRAM *)
BEGIN
(*Заполнили случайными числами буфер сюда можно не смотреть*)
randomize;
for index := 1 to 100 do buffer[index]:=random(65535);

(* а сюда уже смотреть надо*)
for index := 1 to 60000 do
  begin
   work := tip(index,buffer)
   writeln ('сделали еще ХЗ чего с индексом ',index, ' и оно равно ', work );
  end;
END.
XVR
Цитата(_Pasha @ Nov 17 2008, 14:47) *
Так, что ли ?
Код
type
Tbuffer= array[1..100] of integer;
var
work,index:integer;
buffer: Tbuffer;

function tip(param1: integer; var param2: Tbuffer)
begin
tip := param2[lo(param1)] mod param1; (* хз чего сделали *)
end;

(* THE MAIN PROGRAM *)
BEGIN
(*Заполнили случайными числами буфер сюда можно не смотреть*)
randomize;
for index := 1 to 100 do buffer[index]:=random(65535);

(* а сюда уже смотреть надо*)
for index := 1 to 60000 do
  begin
   work := tip(index,buffer)
   writeln ('сделали еще ХЗ чего с индексом ',index, ' и оно равно ', work );
  end;
END.
В последний раз на Pascal писал лет 20 назад, но все равно до сих пор помню, что тип значения, возвращаемого функцией, надо указывать:

Код
  function tip(param1: integer; var param2: Tbuffer) : integer;
_Pasha
Цитата(XVR @ Nov 18 2008, 13:31) *
до сих пор помню, что тип значения, возвращаемого функцией, надо указывать:

Эт точно. smile.gif Очепядко.
Спасибо!
_Ivan_33
спасибо все работает
а еще вопрос - может ли функция возвращать массив
ну типа в главное программе написать tip[i]...???
_Pasha
Цитата(_Ivan_33 @ Nov 21 2008, 10:53) *
а еще вопрос - может ли функция возвращать массив


Можно только два варианта:

Код
function tip(param1: integer; var param2: Tbuffer):integer;
                                                     ^
                                                      через параметр по ссылке


Второй вариант возможен, но он кривой. Лучше так не делать, потому что можно привыкнуть к этому и на автопилоте возвращать в функции огромные блоки данных, что заставляет машину заниматься черти-чем, и еще служит источником трудноуловимых глюков переполнения стека, т.к. значения функций возвращаются через стек.
Код
function tip2(param1: integer): Tbuffer;
(**********************************)

(*основная программа *)
var
mass1: Tbuffer;
param:integer;

begin
mass1:=tip2(param);
end.


А это - бессмыслица.
Код
var param1,param2 :integer;
begin
param1 := tip2(param2)[1];
end;

Зачем городить кучу данных, если надо что-то одно ?
После вызова функции ее результат доступен ведь только один раз.
_Ivan_33
гы, дошел до файлов...
у меня блокнот видит иероглифы если я записал прогой файл...
команда записывает русскую строку в файл - такое можно?
и как чтоб не было иероглифов?
кодировку менял
файл текстовый...
и еще как записать в типизированный файл кучу чисел(массив) а потом этот же массив прочитать(конечно с виду это извращения - но препод говорит что это его правила игры... и я с ним согласен)
заранее благодарен за ответы
_Pasha
Цитата(_Ivan_33 @ Dec 9 2008, 23:48) *
у меня блокнот видит иероглифы если я записал прогой файл...

Каким паскалем пользуетесь? Старым BP7 ? Если да - то ничем не могу помочь, пользуюсь FPC. Подробностей с кракозябрами не помню.

Цитата
и еще как записать в типизированный файл кучу чисел(массив)

Код
const
MaxElement = 9000;
var
f: file of integer;
map: array[1..MaxElement] of integer;
i: integer;
begin
assign(f,'temp.bin');(*назначили имя файла - он будет там же, где и файл программы, т.е. ЕХЕ-шник *)
rewrite(f); (* открыли файл на вывод*)
for i:= 1 to MaxElement do  write(f,map[i]); (*записали все,что надо из массива*)
close(f);(*закрыли файл, но в данном случае это необязательно*)
reset(f);(*открыли файл для чтения, но можно и по-другому, через процедуру seek();*)

(*прочитать можно таким же образом, как и записали но можно и так, если вспомнить
    о том, что в реальном мире размер файла может содержать другое число элементов,
    поэтому проверим условия конца файла и выхода за пределы массива.
*)
i:=1;
repeat
read(f,map[i]);
i := i+1;
until eof(f) or (i > MaxElement);
close(f);
end.


Надеюсь, кто-нить поправит, если допустил ошибку.
smile.gif вместо того чтоб флудить в ветке "Pascal для AVR"
_Ivan_33
СПАСИБО ВАМ ОГРОМНОЕ!!!! СДЕЛАЛ С ВАШЕЙ ПОМОЩЬЮ ВСЕ РАБОТАЕТ!!! ЗАВТРА ПОЙДУ ПОЛУЧАТЬ ЗАЧЕТ!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.