помогите пожалуйста из неработающей программы, работающую сделать..
И.. как она должна работать? если не секрет, конечно.
Самое простое - заменить ее на работающий пример из учебника. Например, вывод "Hello, World!". Она гарантированно будет работать, зуб даю.
Автор: ducky 5.12.2010 16:09
да вроде бы просто запускаться должна))
Автор: Lapp 5.12.2010 16:43
Цитата(ducky @ 5.12.2010 12:09)
да вроде бы просто запускаться должна))
А какой у тебя компилятор?
Автор: ducky 5.12.2010 17:27
Паскаль у меня. компилятор же там есть..
Автор: Krjuger 5.12.2010 19:15
А слова поле,записть и тд,это ваш перевод или они в самой программе? И вопрос. y := x; if x = у then y := f(x); Вам не кажется,что это будет выполняться всегда?
Автор: Lapp 6.12.2010 5:13
Цитата(ducky @ 5.12.2010 13:27)
Паскаль у меня. компилятор же там есть..
н-даа.. Какой у тебя Паскаль?
Turbo Pscal? Pascal-ABC? FreePascal (FPC)? ...
Ответь, пожалуйста..
Смысл вот, в чем. Я знаю точно, что ни Turbo, ни FPC не признают русских идентификаторов. Но про ABC я точно не знаю. Потому и спросил. И в любом случае я ОЧЕНЬ не рекомендую тебе использовать русские буквы в названиях переменных (даже если твой какой-нить неизветсный мне зверь типа Паскаль-ЭЮЯ это и позволяет). Короче, переделай все на английские буквы, тогда будем говорить по делу.
Автор: volvo 6.12.2010 17:34
Цитата
Я знаю точно, что ни Turbo, ни FPC не признают русских идентификаторов. Но про ABC я точно не знаю.
Из всех компиляторов Паскаля только Глагол (хотя это не совсем Паскаль, так, просто синтаксис похож) и Component Pascal поддерживают идентификаторы на кириллице.
Автор: ducky 7.12.2010 1:36
Паскаль Турбо.
русские буквы в условии были..сейчас переделаю)
Автор: ducky 12.12.2010 3:34
вот..наконец-то код нормально набрала.. даже переделала немного.
program errors (input,output); type pole=(ar,br); zapis=record a:integer; b:char; end;
var x,y:zapis; c:char; function f(var z:zapis):real; var p:pole;
if x:=y then y:=f(x); with y do writeln (a,x.a); end.
но вот в этом рядочке - "if x:=y then y:=f(x);" жалуется Паскаль.
Автор: volvo 12.12.2010 4:00
if x=y then y:=f(x); Первый оператор - сравнение, второй - присваивание, не надо их путать "Если X равно Y, то Y присвоить что_то"
Заметь, в первом посте было записано правильно.
Автор: ducky 12.12.2010 4:32
поменяла как в первом посте..все-равно не хочет. выдает Error 41..
Автор: volvo 12.12.2010 5:06
Цитата
выдает Error 41.
А вот это уже серьезнее... Дело в том, что операция сравнения (в Турбо Паскале по крайней мере) допустима только между простыми типами. Запись - это тип сложный, нельзя сравнивать записи между собой таким образом (через оператор "="). В более продвинутых компиляторах возможно переопределить оператор сравнения, тогда можно будет добиться работоспособности программы.
Единственный способ сравнить записи в Турбо Паскале - это сравнить их по каждому полю отдельно. К тому же, ты неправильно написала: функция в первом посте возвращает тип "запись", в 10-м посте у тебя она возвращает вещественное число. Тут - тоже засада: не может в Турбо-Паскале функция возвращать значение сложного типа. То есть, с использованием Турбо-Паскаля невозможно заставить приведенную выше (в самом начале треда) программу компилироваться. Только путем значительной переделки этого удастся достичь...
Автор: ducky 19.12.2010 17:56
вообщем рабочую из нее сделать почти нереально?
Автор: volvo 19.12.2010 18:24
Вот это:
Цитата
type поле = (а,b); { ... } for p := a to b do f.p := succ(z.p)
- нереально (в таком виде, когда типы полей разные). Нельзя подставлять в цикле названия полей записи, и работать с ними. Можно заменить на
f.a := succ(f.a); f.b := succ(f.b)
Я ж говорю - почти полная переделка:
program errors (input,output); type zapis = record a: integer; b: char; end; var x, y: zapis; c: char;
function equal(left, right: zapis): boolean; begin equal := (left.a = right.a) and (left.b = right.b); end;
procedure f(var z:zapis; var res: zapis); begin res.a := succ(z.a); res.b := succ(z.b); end;