![]() |
Компилятор для программ на Pascal
Здрасте, подскажите пожалуйста компилятор для программ написанных на Pascal, я просто проги пишу в Pascal ABC а при переводе в Turbo Pascal вместо русских букв вылазиет иероглифы!!:help::молись::idontnow:
|
Gamer2100, проблема стара как мир...
Турбо работает с кодировкой DOS (cp-866), Pascal ABC - с кодировкой Windows (cp-1251). Достаточно просто перед запуском проги на компиляцию конвертировать cp-1251->cp-866. Проще говоря, кодировка русского в исходном файле должна совпадать с кодировкой его же в среде исполнения (для ДОС и консоли Win - 866, для GUI Win - 1251). Или, как вариант, перед запуском на выполнение проги в NT-консоли можно менять кодовую страницу: chcp 1251. Более современный компилятор есть тут: _http://www.freepascal.org/ |
Работает, тока вот в нём не плучается произвести следующие действа:
x:=round(y/4) где x,y:integer прога доходит до этого места и пишет ошипку!!! |
не стал парится с Апсалютными числами, поставил реал, округлил до сотых, но вот другая проблема, написал такую прогу:
program pass; var a,b,c,d,e,f,g:string; p: string; label 1; begin writeln('Эта программы покажет вам мои пороли, если вы правильно ответите на 3 вопроса.'); writeln('Готовы?(Введите "да" или "нет").'); readln(a); if (a='да') then writeln('Дата моего рождения в формате ДД/ММ/ГГГГ') else writeln('Как хотите.'); if (a='нет') then goto 1; readln(b); if (b='25.12.1993') then writeln('Правильно, теперь введите один из моих ников.') else writeln('Ошибка. Прощайте.'); if not (b='25.12.1993') then goto 1; readln(c); if (c='Walkman') or (c='walkman') or (c='Dreamer') or (c='dreamer') or (c='X3M-NRG') or (c='x3m-nrg') then writeln('Правильно, теперь назовите мой любимый инструмент.') else writeln('Ошибка. Прощайте.'); if not (c='Walkman') or (c='walkman') or (c='Dreamer') or (c='dreamer') or (c='X3M-NRG') or (c='x3m-nrg') then goto 1; readln(d); if (d='Create_thread') or (d='Create_thread') then write('Правильно, но это ещё не всё, не думайте что всё так просто, назовите мою любимую актрису(на английском пожалуйста).') else writeln('Ошибка. Прощайте.'); if not (d='Create_thread') or (d='Create_thread') then goto 1; readln(e); if (e='Emma Wotson') then writeln('Правильно!!!Последний(это правда) вопрос. Какая фамилия у человека составившего учебник по алгебре для 7, 8, 9 класса?') else writeln('Ошибка. Прощайте.'); if not (e='Emma Wotson') then goto 1; readln(f); if (f='Мордкович') then writeln('Молодец, все слои защиты пройдены, вот мои ники и пароли:') else writeln('Ошибка. Прощайте.'); if not (f='Мордкович') then goto 1; if (f='Мордкович') then writeln('"WebMoney"'); if (f='Мордкович') then writeln('код: 099087336262'); if (f='Мордкович') then writeln('пароль: ***'); if (f='Мордкович') then writeln('код доступа к фаилу ключей:***'); if (f='Мордкович') then writeln('"E-mail"'); if (f='Мордкович') then writeln('login:sergey1993@bk.ru'); if (f='Мордкович') then writeln('pass:***'); if (f='Мордкович') then writeln('"Мой сайт"'); if (f='Мордкович') then writeln('login:young-gamedev'); if (f='Мордкович') then writeln('pass:***'); if (f='Мордкович') then writeln('"GTAMaps"'); if (f='Мордкович') then writeln('login:X3M-NRG'); if (f='Мордкович') then writeln('pass:***'); if (f='Мордкович') then writeln('Есть ещё, но я их забыл.:-('); if (f='Мордкович') then writeln('Вы закончили?'); 1: readln(g); end. но она после третьего вопроса выходит, почему это может быть?:idontnow::help: ЗЫ я знаю что goto это признак плохого програмирования, но пока я с ним не разобрался буду его юзать!!! |
Цитата:
добавлено через 8 минут Цитата:
Третий впорос это про ники? В остальных все работает как и ожидалось?? P.S. И вообще, кто Вас так учил программировать? Надеюсь это просто Ваша первая программа?? |
В смысле не ошибку а просто прога выходит, после ответа прога завершается, причём не важно какой вопрос третий.
ЗЫ нет, программа вторая:p |
Цитата:
Зачем столько if-ов с одинаковым условием идущих подряд? Если не специально — замени их на конструкцию вида: Код:
if f = … then begin Код:
if f = 'Мордкович' then begin По более раннему вопросу. В коде: Код:
var x, y: Integer; Цитата:
Цитата:
Впрочем, с опытом это придет. Ща я тебе даже накидаю скелет этой твоей проги. Если че — не обессудь, паскаля я уже давно в глаза не видел: Код:
program Pass; |
Спасибо, мне уже помогли, советов послушался и код изменил, а ошибка была только в этом:
не if not (c='Walkman') or (c='walkman') or (c='Dreamer') or (c='dreamer') or (c='X3M-NRG') or (c='x3m-nrg') ндо было писать, а if not ((c='Walkman') or (c='walkman') or (c='Dreamer') or (c='dreamer') or (c='X3M-NRG') or (c='x3m-nrg')) то-есть всё взять в скобки добавлено через 46 минут хех, всё работает, вот финальный вариант: Код:
program pass; |
Цитата:
c:=UpCase(c); // или UpString давно не юзал дососвский паскаль if not ((c=('WALKMAN') or (c='DREAMER') or (c='X3M-NRG') ) Далее Цитата:
И еще одно, но важное - никогда не используй GoTo!!!! Отвыкнешь, сам же спасибо скажешь :beer: |
почему?!?!?!?
|
Если когда нить будешь писать достаточно большой проект. То его надо будет разбить на более мелкие блоки. Их на еще более мелкие. И отлаживать всю программу на 5000+ строк будет ой как тяжело если переходы GOTO идут. А так отладил блок - забыл про него, следующий, а потом используй их в виде процедур и функций. Останется в самой программе всего несколько строк :) См. исходники прог на Delphi.
Твоя прога например может выглядеть так. function MyQuery1:Boolean begin writeln('Готовы?(Введите "да" или "нет").'); readln(a); if (a='да') then MyQuery1:=True else MyQuery1:=False; end; procedure ShowWelcomeMessage; begin writeln('Здравствуйте.'); end; procedure EndError; begin writeln('Ошибка. Прощайте.'); Exit; end; procedure ShowTrueMessage; begin writeln('Все правильно и т.д.'); Exit; end; begin ShowWelcomeMessage; - вывод приветсвия If Not MyQuery1 then EndError; If Not MyQuery2 then EndError; If Not MyQuery3 then EndError; If Not MyQuery4 then EndError; If Not MyQuery5 then EndError; ShowTrueMessage; end. вот типа такого наброска и должна выглядеть правильная программа. никаких GOTO. Будут вопросы пиши. |
памагите
моя первая прога памагите вылетает
program z; Var a,b,s:integer; begin a:=read; b:=read; s:=a+b; writeln (s); writeln (s); end. как вводить данные и вообще все проги вылетают не тока эта (имею в виду написанные мною на паскале плиз информатичка незнает хелп) |
vindows93, во время вылета программы обычно указывается в какой строке ошибка и её описание. Так ты бы хоть указал их здесь. А по коду программы: по-моему, ты некорректно вводишь данные (если вообще неверно). Правильно будет:
Код:
readln (a); |
И не совсем понятно зачем ты выводишь на экран результат суммирования два раза (writeln (s);).
информатичка говорила типа чтобы подольше текст задержать вводи что угодно всёравно рухает ошибок нет в екзе уже a:=2 b:=3 нихрена a=2 b=3 то;t skdhjdfsbvsdlkfvklsvkjsdbfkjbds тоже самое ентер нажимаешь и крендец |
вводить надо значения a <enter>, потом b <enter>
например 2 3 добавлено через 1 минуту задерживать можно той же функцией readln; - надо нажать enter для продолжения |
СПАСИБООО ПОМОГЛО
помагите информатичка задолбала прога нужна но я сам хочу написать кароче КВАДРАТНОЕ УРАВНЕНИЕ program z; Var a,b,d,c,e,f,:integer; begin readln (a); readln (b); readln (c); d:=(b*b)-((4*a)*c); writeln (d); e:=((b*b)-(sqrt(d)))/(2*a); типа первое значение икс f:=((b*b)+(sqrt(d)))/(2*a); типа второе writeln (e); writeln (f); happy end. исправьте ошибку плиз неработает неверное значение неверное выражение неверная структура блин!!!!!!!!!!!!!!!!!!!!!!!! |
По одной строке добавлять в программу и компилировать не пробовал?
Тогда сразу будет видно с добавлением какой строки перестаёт работать. Var a,b,d,c,e,f,:integer; запятая лишняя :p |
Цитата:
не работает она сама |
Ну так закомментируй всё и по строчке открывай-запускай.
|
vindows93, так как ты опять не указал какую именно ошибку выдаёт компилятор, могу только предположить. Integer - это целочисленное значение, а переменные "e" и "f" у тебя скорее всего получатся дробные (Float). Попробуй пропиши:
Код:
Var a,b,d,c: integer; И всё же, ты должен запускать программу из под компилятора, а не готовый exe'шник. А компилятор обычно выдаёт код и описание ошибки. Поэтому будет на много проще тебе помогать, если ты так же будешь здесь указывать эти данные. :contract: |
program z;
Var a,b,d,c,e,f:real; begin readln (a); readln (b); readln (c); d:=(b*b)-((4*a)*c); writeln (d); e:=((b*b)-(sqrt(d)))/(2*a); f:=((b*b)+(sqrt(d)))/(2*a); writeln (e); writeln (f); end. не флоат а реал но всёравно спс а как условие типа d>0 то e:=((b*b)-(sqrt(d)))/(2*a); f:=((b*b)+(sqrt(d)))/(2*a); d<0 типа хрен тебе d=0 то (-b)/(2*a) плиз срочна чере 12 ч школа и информатика |
Цитата:
По условию: Код:
if (d>0) do begin |
скорее
Код:
if d>= 0 then |
Спасибо спасли
добавлено через 4 минуты Рано обрадовался заболел.. ОШИБКА if (d>0) do begin неверное выражение |
У меня в голове уже все языки перемешались в кашу. Пишу галиматью и ввожу тебя в заблуждение.
Код:
if d>0 then begin |
program z;
Var a,b,d,c,e,f:real; begin readln (a); readln (b); readln (c); d:=(b*b)-((4*a)*c); writeln (d); if d>= 0 then begin e:=((b*b)-(sqrt(d)))/(2*a); f:=((b*b)+(sqrt(d)))/(2*a); writeln(e); writeln(f); Writeln('дискриминант отрицательный'). end. else if здесь требует елсе или точка с запятой ставил нихрена таже ошибка....... d=0 then begin e:=(-b)/(2*a); writeln(e); Writeln('одно решение'); end else if d<=0 then begin Writeln('дискриминант отрицательный хрен тебе в руки'); end. памагите напутал с операторами сказано блин надоело уже!!!! плиз всё проверьте а то !!!!!!!! |
Вот готовая программа:
Код:
program z; |
не надо при условии d>0 писать про отрицательный дискриминант
пробуй выводить результаты так: writeln(e:4:2); |
СПС всем изучать буду ПАСКАЛЬ
ТОКА уже изучил питона и басик !!) добавлено через 37 минут в редакторе работает а в екзешнике падает почему??? program z; Var a,b,d,c,e,f:real; begin readln (a); readln (b); readln (c); d:=(b*b)-((4*a)*c); writeln (d); if d>0 then begin e:=((b*b)-(sqrt(d)))/(2*a); f:=((b*b)+(sqrt(d)))/(2*a); writeln(e); writeln(f); Writeln('дискриминант отрицательный'); Writeln('дискриминант отрицательный'); end; if d=0 then begin e:=(-b)/(2*a); writeln(e); Writeln('одно решение'); Writeln('одно решение'); end; if d<0 then Writeln('дискриминант отрицательный !!!!лузер!!!'); Writeln('дискриминант отрицательный !!!!лузер!!!'); End. |
код ошибки? вообще код неправильный, но падать не должно. разве что при a=0
|
ошибки нет просто падает ввёл 666 через ентер и падает
НАПИШИ ПРАВИЛЬНЫЙ КОД ПЛИЗ!!!!!!! |
Код:
var |
СПС а чё делает 0:2 вот эти в d x1 x2
|
Цитата:
|
Часовой пояс GMT +4, время: 18:52. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.