Объясните новичку.

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

Re: Объясните новичку.

Сообщение Paster Fob » 28.05.2011 09:27:40

Идём дальше.Oleg_D в вашей книге привидена таблица кодировок ASCII.Написано что от 0-31 это управляющие символы и даны их обозначения.Я запустил такую программку:
Код: Выделить всё
var n: integer;
begin
  for n:=0 to 255 do
    Writeln(n,'  ', Char(n));
  readln
end.

В результате вышло совсем не так как в таблице.Вот скрин:

Изображение

Почему так или я опять что-то путаю?Да и кстати почему когда я запускаю эту программу пищит динамик в ПК?
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: Объясните новичку.

Сообщение Oleg_D » 28.05.2011 10:00:02

Brainenjii писал(а):Oleg_D: не знаю, считается ли это подсказкой, но если судить по книге - то к 24 главе Maxizar'овскую задачку решить вполне себе можно ^_^

Подсказкой не считается :) Это нам, опытным волкам, все кажется просто.

Добавлено спустя 13 минут 19 секунд:
Paster Fob писал(а):Идём дальше.Oleg_D в вашей книге привидена таблица кодировок ASCII.Написано что от 0-31 это управляющие символы и даны их обозначения.Я запустил такую программку:
Код: Выделить всё
var n: integer;
begin
  for n:=0 to 255 do
    Writeln(n,'  ', Char(n));
  readln
end.

В результате вышло совсем не так как в таблице.
Почему так или я опять что-то путаю?Да и кстати почему когда я запускаю эту программу пищит динамик в ПК?

Молодец, Paster Fob! Из Вас выйдет толк. Не верьте дядям на слово, все самому проверять надо. :)
Теперь попробую объяснить. Управляющие коды 0-31 были стандартизованы давно, когда еще не было дисплеев. Тогда они применялись для управления в основном принтерами и пишущими машинками. Сейчас некоторые из них используют нестандартно - для отображения всяких закорючек. Повторяю: это нестандартное применение, далеко не все редакторы текста способны их воспринять! Кстати, символ с кодом 7, называемый BELL (звонок), заставляет пищать ваш системный блок.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Re: Объясните новичку.

Сообщение Paster Fob » 28.05.2011 11:07:47

А как заставить компилятор вывести стандартные символы?
Про сигнал понятно.

Добавлено спустя 1 час 42 минуты 34 секунды:
Ну вот опять не задача,получается что я что-то не понял с процедурами и функциями.Задача по книге "Песни о Паскале".Значит так в книге есть программа шифрование и расшифровка строки.Я прочитал,а потом по памяти решил написать эту программку,Сразу же написал главную программу для проверки функций и возникла проблема.Почему после возвращения результата,переменная s всё равно равна первоначальному значению?
Код: Выделить всё
const ckey=2;
function Crypt(arg:char):char;
var x:char;
begin
  Crypt:=char(ord(arg)+ckey);
end;
function EnCrypt(arg:char):char;
var x:char;
begin
  EnCrypt:=char(ord(arg)-ckey);
end;
var s:char;
begin
    readln(s);
    writeln(Crypt(s));
    writeln(s);
    writeln(EnCrypt(s));
    writeln(s);
    readln;
end.

Переделал функции в процедуры и всё заработало.
Код: Выделить всё
const ckey=2;
procedure Crypt(var arg:char);
var x:char;
begin
  arg:=char(ord(arg)+ckey);
end;
procedure EnCrypt(var arg:char);
var x:char;
begin
  arg:=char(ord(arg)-ckey);
end;
var s:char;
begin
    readln(s);
    Crypt(s);
    writeln(s);
    EnCrypt(s);
    writeln(s);
    readln;
end.

Получается что результат возвращённый через функцию,далее в программе не используется.Или опять что-то не то?
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: Объясните новичку.

Сообщение Putnick » 28.05.2011 16:09:53

Paster Fob писал(а):Получается что результат возвращённый через функцию,далее в программе не используется.Или опять что-то не то?

Ну, в Вашем случае получается именно так. Функция-то результат возвратила, а Вы его не приняли. Вот если бы Вы написали:
Код: Выделить всё
s:=Cript(s)

тогда бы переменной S было бы присвоено новое значение.
Или если бы функция Cript имела примерно такой вид:
Код: Выделить всё
var
  s:char;
function Crypt(arg:char):char;
begin
  s:=char(ord(arg)+ckey);
  Crypt:=s
end;

или такой:
Код: Выделить всё
function Crypt(var arg:char):char;
begin
  arg:=char(ord(arg)+ckey);
  Crypt:=arg
end;

Тогда тоже произошло бы изменение переменной S.
Putnick
новенький
 
Сообщения: 62
Зарегистрирован: 18.03.2009 13:02:56

Re: Объясните новичку.

Сообщение Paster Fob » 28.05.2011 16:49:17

Всё понял,спасибо за разъяснения.
Аватара пользователя
Paster Fob
постоялец
 
Сообщения: 188
Зарегистрирован: 22.02.2011 21:53:36
Откуда: Новосибирск.

Re: Объясните новичку.

Сообщение Oleg_D » 29.05.2011 00:30:04

Paster Fob писал(а):А как заставить компилятор вывести стандартные символы?

Вы хотите вывести то, что указано во второй колонке таблицы? Это всего лишь английские сокращения названий этих управляющих символов, например, LF - Line Feed - прогон строки. Компилятору об этих названиях ничего "не известно", это просто договоренность такая между человеками, - так их называть. Вы можете сделать такую программку сами, - вот Вам еще одно упражнение. :)
Добавлю, что управляющие символы используются по-разному в разных устройствах. Например, в модемах, часть из них служит для управления передачей данных. Вам важно понять пока лишь то, что эти символы не применяют для представления символов текста (об этом будет в следующей главе).
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

Re: Объясните новичку.

Сообщение teapot » 13.11.2011 16:02:41

Paster Fob, мне тоже далеко за 20 и я в качестве хобби изучаю (вернее, пытаюсь вспомнить школьный курс) паскаль по книге уважаемого Олега. Хоть Вас давно не было на форуме, позвольте присоединиться.
Аватара пользователя
teapot
незнакомец
 
Сообщения: 7
Зарегистрирован: 13.11.2011 15:20:23

Re: Объясните новичку.

Сообщение Андрей131289 » 27.11.2011 13:13:38

Подскажите пожалуйста что за ошибка
<1.1> Error: Illegal Expression
Graph прописан выше в самой програме;

Procedure doroga;
var i:integer;
begin
setcolor(6);
line(0,850,1440,850);
i:=0;
While i<=1440 do
begin
setcolor(2);
line(10+i,850,i,900);
i:=i+1;
end;
end.
Андрей131289
незнакомец
 
Сообщения: 6
Зарегистрирован: 27.11.2011 13:02:56

Re: Объясните новичку.

Сообщение Vadim » 27.11.2011 17:31:09

Андрей131289 писал(а):<1.1>

Первая строка, самая первая буква. Только не в куске текста, что Вы привели, а в программе.
Текста программы нет - подсказать невозможно.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Объясните новичку.

Сообщение informat » 28.11.2011 06:23:43

Андрей131289 писал(а):Подскажите пожалуйста что за ошибка
<1.1> Error: Illegal Expression
Graph прописан выше в самой програме;

Procedure doroga;
var i:integer;
begin
setcolor(6);
line(0,850,1440,850);
i:=0;
While i<=1440 do
begin
setcolor(2);
line(10+i,850,i,900);
i:=i+1;
end;
end.


Да. Нужен весь текст.
Написанное здесь уже содержит ошибку.
Процедура не может заканчиваться точкой.
Аватара пользователя
informat
новенький
 
Сообщения: 62
Зарегистрирован: 27.10.2010 09:44:20
Откуда: http://informat.name

Re: Объясните новичку.

Сообщение Андрей131289 » 28.11.2011 14:41:38

Спасибо, что посмотрели процедуру! Хорошо, что есть такой форум...Одному тяжело учить. Чуть позже напишу всю програму

Добавлено спустя 1 час 28 минут 47 секунд:
Вот вся програма... Жду критики ))

Program Mashunka;
uses crt,graph;
var detect,mode,i:integer;
begin
clrscr;
initgraph(detect,mode,'');
setbkcolor(7);
procedure doroga;
var i:integer;
begin
setcolor(6);
line(0,850,1440,850);
i:=0;
While i<=1430 do
begin
setcolor(2);
line(10+i,850,i,900);
i:=i+1;
end;
end;
procedure Znak;
begin
setcolor(0);
bar(1280,300,1300,850);
setcolr(15);
bar(1180,50,1400,300);
settextstyle(0,0,3);
setcolor(4);
outtextxy(1180,175,'START');
end;
procedure mashunca;
var i:integer;
begin
i:=10;
While i<=750 do
begin
setcolor(0);
circle(90+i,750,100);
circle(490+i,750,100);
line(190+i,750,390+i,750);
line(590+i,750,690+i,750);
line(690+i,750,690+i,600);
line(690+i,650,40+i,600);
line(690+i,600,440+i,450);
line(440+i,450,90+i,450);
line(440+i,450,440+i,600);
line(90+i,450,-10+i,750);
line(240+i,450,240+i,600);
i:=i+10;
end;
end;
end.
Андрей131289
незнакомец
 
Сообщения: 6
Зарегистрирован: 27.11.2011 13:02:56

Re: Объясните новичку.

Сообщение sign » 28.11.2011 18:05:26

Код: Выделить всё
Program Mashunka;
uses crt,graph;

var i:integer;
     detect, mode: SmallInt;

  procedure doroga;
  var i:integer;
  begin
    setcolor(6);
    line(0,850,1440,850);
    i:=0;
    While i<=1430 do begin
      setcolor(2);
      line(10+i,850,i,900);
      i:=i+1;
    end;
  end;

  procedure Znak;
  begin
    setcolor(0);
    bar(1280,300,1300,850);
    setcolor(15);
    bar(1180,50,1400,300);
    settextstyle(0,0,3);
    setcolor(4);
    outtextxy(1180,175,'START');
  end;

  procedure mashunca;
  var i:integer;
  begin
    i:=10;
    While i<=750 do begin
      setcolor(0);
      circle(90+i,750,100);
      circle(490+i,750,100);
      line(190+i,750,390+i,750);
      line(590+i,750,690+i,750);
      line(690+i,750,690+i,600);
      line(690+i,650,40+i,600);
      line(690+i,600,440+i,450);
      line(440+i,450,90+i,450);
      line(440+i,450,440+i,600);
      line(90+i,450,-10+i,750);
      line(240+i,450,240+i,600);
      i:=i+10;
    end;
  end;

begin
  clrscr;
  initgraph(detect, mode, '');
  setbkcolor(7);
end.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Объясните новичку.

Сообщение Андрей131289 » 29.11.2011 00:40:13

Спасибо, за коррективы! Но я от Вас еще не отстану... Не запускается графический режим(а точнее запускается, но сразу же завершается работа модуля Graph) Дайте пожалуйста совет. B компиляторе пишет Ranning "c:\fpc\2.4.4\bin\i386-win32\9.exe "

P.S. Спасибо, что помогаете!
Андрей131289
незнакомец
 
Сообщения: 6
Зарегистрирован: 27.11.2011 13:02:56

Re: Объясните новичку.

Сообщение Vadim » 29.11.2011 03:02:29

Андрей131289
Надо сделать задержку завершения программы. Например, после того, когда все необходимые рисунки нарисованы, поставить волшебное слово ReadLn.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Объясните новичку.[РЕШЕНО]

Сообщение Андрей131289 » 30.11.2011 21:22:40

Спасибо, всегда ставил Readln, а в этот раз как-то вилетело с головы.
Андрей131289
незнакомец
 
Сообщения: 6
Зарегистрирован: 27.11.2011 13:02:56

Пред.След.

Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

Рейтинг@Mail.ru