Центр рейнджеров "Млечный путь"

Тусовка => Обо всем => Начало: SID от 03.03.2009 21:31:01



Название: Паскаль
Отправлено: SID от 03.03.2009 21:31:01
Народ ай нид хелп. Вобщем такая трабла, я немного пропустил тему про процедуры и функции и теперь вообще не понимаю этой темы. Проги пишем на Турбо паскале 7. Обьясните плс по возможности на примере какой-нить задачи


Название: Паскаль
Отправлено: Падшая шэдова от 03.03.2009 22:39:26
{объявление функции}
{ключевое_слово имя (параметр: тип_параметра): возвращаемый_тип;}
function Max (a, b: integer): integer;
begin
{чтобы функция вернула значение, ей "нужно что-то присвоить"}
if a>b then Max:=a else Max:=b;
end;

{объявление процедуры}
{то же, что и фунция, но ничего не возвращает}
procedure Print (a: integer);
begin
writeln ('Переданное значение в процедуру a = ',a);
end;

{объявляем переменные}
var x, y, z: integer;

begin
writeln ('Введите x и y:');
readln (x, y);
{вызываем функцию, то, что она вернёт запишем в переменную}
z := max (x, y);
{вызываем процедуру}
Print (z);
{если введём x=3, y=4, то на выходе получим строку
"Переданное значение в процедуру a = 4"}
{Есть ещё передачи переменных по ссылке, констант и прочая "кодерская ерунда", но не думаю, что тебе это понадобится}
end.


Название: Паскаль
Отправлено: SID от 05.03.2009 17:31:44
Падшая шэдова А можешь обьяснить на примере вот такой задачи: Дано координаты трех точек на плоскости. Определить, какая из них лежит дальше от начала координат. Для определения длины отрезка написать функцию(координаты можно задавать свои)


Название: Паскаль
Отправлено: Something от 10.03.2009 17:27:02
Дано координаты трех точек на плоскости. Определить, какая из них лежит дальше от начала координат. Для определения длины отрезка написать функцию(координаты можно задавать свои)
Может поздно, но вдруг еще кому кому понадобится.


Название: Паскаль
Отправлено: Падшая шэдова от 10.03.2009 18:42:00
Для таких вопросов вообще тема КНП существует. Вот.

Решение одобряю.


Название: Паскаль
Отправлено: SeWar от 10.03.2009 19:19:51
О мои мозгиии... :wall:


Название: Паскаль
Отправлено: Axiton от 13.03.2009 19:26:11
Как в Паскале по-русски писать (версия 7.1)? А то только на английском пока получается...


Название: Паскаль
Отправлено: Падшая шэдова от 13.03.2009 20:18:24
Акси. И ты туда же. :)

Вообще, впервые слышу о 7.1. Это с надстрокой какой-то? Последняя версия Паскаля, официально выпущенная Borland'ом, была 7.0.

Ответ на вопрос:
1. Никак. Просто отавить всё как есть.
2. Открыть после работы в Паскале исходный код программы в любом редакторе, поодерживающий печать в DOS-кодировке. По-моему, даже Far подойдёт. И писать кирилицей в этом самом редакторе.
3. Использовать коды кирилицы и писать в Паскале последовательности в виде #x, где x - число, соответствующее нужному тебе символу в таблице DOS-кодировки.


Название: Паскаль
Отправлено: kleho от 14.03.2009 09:18:01
Можно ещё воспользоваться русификатором rk.com, переключение двумя шифтами. В архиве сам rk и батник для запуска.


Название: Паскаль
Отправлено: Axiton от 16.03.2009 16:17:49
Акси. И ты туда же.
Ну так тема для Паскаля вроде :)

Вообще, впервые слышу о 7.1. Это с надстрокой какой-то?
Это была первая версия, которую нашёл поисковик.

Можно ещё воспользоваться русификатором rk.com, переключение двумя шифтами. В архиве сам rk и батник для запуска.
А для какой версии он работает?


Название: Паскаль
Отправлено: kleho от 17.03.2009 00:20:01
А для какой версии он работает?
Для любой :)

Это не "русификатор паскаля", а "русификатор всего в ДОСе". После запуска rk оставляет в памяти резидентную часть и отслеживает нажатия клавиш, так что его можно использовать для любых досовских программ, например тех же C/C++ от борладна, надо только батник подправить.


Название: Паскаль
Отправлено: Axiton от 17.03.2009 14:58:13
Хм, его в каком-то определённом месте запускать надо? У меня, увы, паскаль по-прежнему рюсскый не понимай.  :(


Название: Паскаль
Отправлено: zavron_lb от 17.03.2009 15:23:03
Я просто сохраняю и из фара пишу что нужно. А коли такая необходимость появляется раз в сто лет, то ничего дополнительного и не держу.


Название: Паскаль
Отправлено: Нарком от 17.03.2009 16:35:23
До меня (сейчас вдруг ;)) дошло почему большинство юзеров пользут паскаль. Его ж по-старинке преподают в институтах!
Я ж тоже когда-то прогуливал проходил его :)


Название: Паскаль
Отправлено: Something от 17.03.2009 16:53:12
До меня (сейчас вдруг ;)) дошло почему большинство юзеров пользут паскаль. Его ж по-старинке преподают в институтах!
Угу. После него Дельфы осваивать намного проще.


Название: Паскаль
Отправлено: zavron_lb от 17.03.2009 17:30:23
Кажется, я что-то делаю не так. Паскаль "осваивал" в школе, после самостоятельного баловства с Дельфями. В универе преподают Си.


Название: Паскаль
Отправлено: Something от 17.03.2009 17:42:24
В универе преподают Си.
У нас и С++ и Дельфы.


Название: Паскаль
Отправлено: kleho от 17.03.2009 20:00:34
Хм, его в каком-то определённом месте запускать надо? У меня, увы, паскаль по-прежнему рюсскый не понимай.  :(
Просто распаковать в папку с паскалем и запустить батник, он уже сам паскаль запустит. Правда если экзешник паскаля называется не turbo.exe, то надо батник поправить, поставить нужное имя файла.


Кажется, я что-то делаю не так. Паскаль "осваивал" в школе, после самостоятельного баловства с Дельфями. В универе преподают Си.
Ну кому как повезло :)

Я тоже в школе паскаль изучал, а вот многие мои знакомые в школе максимум QBasic проходили, а у некоторых вообще все уроки информатики ограничивались MS Word и paint.


Название: Паскаль
Отправлено: Падшая шэдова от 20.03.2009 02:19:55
А нам, как оказалось, препадают вообще всё. И C, и Pascal, и PHP, и ASM... И всё в разных курсах.

Я вообще начинал с QBasic'a, в школе начался Pascal. Попутно записался на курсы по Delphi. Успешно их завершив, начал ковырятся самостоятельно. Закончив увлекаться Delphi, углубился в Pascal (ещё более высокоуровневое программирование), начал совмещать. Потом вообще самостоятельно с нуля пошёл в PHP. И вот, что я скажу. Не важно на каком языке писать, главное правильно мыслить. :)

Акси, а тема КНП на что? ;)


Название: Паскаль
Отправлено: zavron_lb от 20.03.2009 12:09:19
А нам, как оказалось, препадают вообще всё. И C, и Pascal, и PHP, и ASM... И всё в разных курсах.
У нас вроде тоже всякое будет, я про настоящий момент говорил.


Название: Паскаль
Отправлено: Нарком от 20.03.2009 13:32:49
Не важно на каком языке писать, главное правильно мыслить.
Это точно!
Только дело в том, что паскаль/дельфи в некотором роде мешают этому. В то время как история всех языков движется в направлении универсализации, абстракции, лучшему восприятию на крайняк - дельфя стоит в стороне. Неправильные акценты (классический пример - определение переменных) могут формировать неправильную логику мышления.

офф:
О! я достиг баланса духа: карма=известность :)))


Название: Паскаль
Отправлено: Падшая шэдова от 20.03.2009 16:49:01
Как раз строгая типизация помогает сформулировать задачу таким образом, чтобы потом не возникало ошибок, связанных с неправильным проектированием. А обилие текста в Pascal'е мне не мешает. Мне так читать гораздо проще. :)

Правда предопределённость переменных порой мешает, да...


Название: Паскаль
Отправлено: RangerDimidr0 от 20.03.2009 17:33:07
О! я достиг баланса духа: карма=известность ))

Подпортил малину  :evil:


Название: Паскаль
Отправлено: Ostap_Blender от 20.03.2009 17:35:06
Почти уровнял :p


Название: Паскаль
Отправлено: Нарком от 20.03.2009 17:43:58
Правда предопределённость переменных порой мешает, да...
Не, тут я про другое, про синтаксис. В си "int x" - делается упор на тип, в паскале "x:int" - на имя. По сути - мелочь, но из таких неприятных мелочей и состоит весь паскаль.
 
Если ты имел в виду инициализацию, т.е. заданные нулевые значения переменных, то это не свойство языка. Она (вроде бы) отключается в опциях компиллятора.


Название: Паскаль
Отправлено: Axiton от 20.03.2009 18:48:26
Правда если экзешник паскаля называется не turbo.exe, то надо батник поправить, поставить нужное имя файла.
Понял, спасибо. :yes:

а у некоторых вообще все уроки информатики ограничивались MS Word и paint.
Я в их числе. :) Даже этих уроков почти не было.


Название: Паскаль
Отправлено: SergR от 20.03.2009 22:48:13
Я в их числе.  Даже этих уроков почти не было.
А к информатике, это какое отношение имеет?


Название: Паскаль
Отправлено: Axiton от 21.03.2009 01:30:48
А к информатике, это какое отношение имеет?
Когда я учился в школе, к информатике относили всё, что хоть какое-то отношение имело к компьютеру. :)


Название: Паскаль
Отправлено: SergR от 23.03.2009 10:56:02
Когда я учился в школе, к информатике относили всё, что хоть какое-то отношение имело к компьютеру.
Когда я учился в школе, не у нас, мы это проскочили, но классом ниже начали преподавать информатику, без компьютеров. :lol:


Название: Паскаль
Отправлено: RangerDimidr0 от 23.03.2009 11:28:03
Когда я учился в школе, к информатике относили всё, что хоть какое-то отношение имело к компьютеру.
Когда я учился в школе, не у нас, мы это проскочили, но классом ниже начали преподавать информатику, без компьютеров. :lol:
Логика и её законы, это преподавали, не? В ЕГЭ по информатике сейчас такого "добра" полным-полно :)
Ну ещё, может быть, системы счисления практиковали там у вас...


Название: Паскаль
Отправлено: SergR от 23.03.2009 11:35:52
Логика и её законы, это преподавали, не?
Без понятия. Я ж говорю, классом ниже, мы проскочили. :)


Название: Паскаль
Отправлено: Ostap_Blender от 24.03.2009 18:15:13
А вот у нас на уроках информатики учат форматировать дискеты...


Название: Паскаль
Отправлено: SergR от 24.03.2009 18:20:52
А вот у нас на уроках информатики учат форматировать дискеты...
Серьёзно? :eek: Они ж используются только в ускоспециализированных устройствах.


Название: Паскаль
Отправлено: Something от 24.03.2009 18:32:56
А вот у нас на уроках информатики учат форматировать дискеты...
Оу... А мы в Вакрафт учились играть. :p


Название: Паскаль
Отправлено: Нарком от 24.03.2009 19:21:41
А вот у нас на уроках информатики учат форматировать дискеты...
Лобзиком?


Название: Паскаль
Отправлено: Axiton от 26.03.2009 22:57:51
Как сделать, чтобы при вводе какого поля в базу данных, пользователь мог ввести только буквы? Например, чтобы вместо фамилии нельзя было цифры или спецсимволы записать?

Добавлено:
И как сделать, чтобы новый файл базы данных создавался не с заданным названием, а название вводилось с клавиатуры?


Название: Паскаль
Отправлено: Падшая шэдова от 27.03.2009 01:22:46
Базы данных в Паскале? А что за модуль используется?

В любом случае, придётся проверять ручками, удовлетворяет ли тебя введённое значение. Особого ("красивого и простого") на ограничение текущего ввода нет.


Название: Паскаль
Отправлено: Нарком от 27.03.2009 10:26:56
Axiton
У тебя (ща буду умничать ;)) неправильная постановка вопроса. Ввод данных в бд производится с помощью неких программных компонентов (напр. DBGrid, cxGrid), которые и определяют возможности обработки вводимых значений. Т.е. все зависит от того какой у тебя компонент и его версия. Без этого ничего сказать нельзя.
 
Про файл бд - тож самое. Все зависит только от типа бд (interbase, paradox, mssql, oracle...) который ты умолчал :)
 
 


Название: Паскаль
Отправлено: Axiton от 27.03.2009 19:26:59
А что за модуль используется?
Стандартные, crt и graph.

Особого ("красивого и простого") на ограничение текущего ввода нет.
А как сделать это "некрасиво"? :)

Про файл бд - тож самое. Все зависит только от типа бд (interbase, paradox, mssql, oracle...) который ты умолчал
Тема паскалю посвящена. :shy: Обычный файл данных, *.dat.

Ввод данных в бд производится с помощью неких программных компонентов
Единственный программный компонент - написанный на паскале файл exe. :) Указанные в скобках слова мне ни о чём не говорят. :(


Название: Паскаль
Отправлено: Падшая шэдова от 27.03.2009 20:08:19
Да, ты определённо имел ввиду "записи" (record).

А как сделать это "некрасиво"?
М... Как вариант - читаешь строку, введённую пользователем. Затем посимвольно её проверяешь (читай: пробегаешь строку в цикле до конца), входит ли каждый проверяемый символ в тот диапазон, куда входят просто числа. После первого несовпадения - выдаёшь ошибку и "не принимаешь" такой ввод. Если можно принимать знаковое число, то также можешь сделать допущение, что первый знак в строке - минус. Ну и если нужно число с точкой - то поэкспериментируй. Тоже посимвольная проверка. ;)


Название: Паскаль
Отправлено: Axiton от 27.03.2009 20:49:09
Падшая шэдова
Спасибо, попробую.

А по поводу ввода пользователем названия файла есть идеи?:)


Название: Паскаль
Отправлено: Падшая шэдова от 28.03.2009 00:04:31
Читаешь строку, введённую пользователем. Потом просто открываешь файл с таким именем. :)
 
var fname: string;
...
readln (fname);
assign (input, fname);
reset (input);
{так же делаем, когда нужно задать файл вывода... :)}
{при таком способе работы требуется проверять ошибки ввода/вывода, если {$I-}/{$I+} у тебя в конспектах не встречается - обращайся ;) }
...
close (input);


Название: Паскаль
Отправлено: RangerDimidr0 от 28.03.2009 09:35:57
readln (fname); assign (input, fname); reset (input); {так же делаем, когда нужно задать файл вывода... }

Только одно маленькое "но" для файла вывода: вместо reset(input) следует писать rewrite(output).
Хотя... не мне вам объяснять :)


Название: Паскаль
Отправлено: Падшая шэдова от 28.03.2009 23:37:02
Ну, само собой. :)


Название: Паскаль
Отправлено: Axiton от 29.03.2009 22:32:53
Читаешь строку, введённую пользователем. Потом просто открываешь файл с таким именем.
Благодарю. :) :yes: А как сделать, чтобы файл создавался с расширением .dat?


Название: Паскаль
Отправлено: Падшая шэдова от 30.03.2009 00:31:58
Ну как... Rewrite пытается создать создать файл и именем, которое ты указал. Оно может быть совершенно любым. Хоть "abra.cadabra". Если тебе нужо обязательно, чтобы файл был с расширением "*.dat", то проверь последние 4 символа, чтобы они были ".dat". Если нет - то "допиши" их за пользователя сам.


Название: Паскаль
Отправлено: Нарком от 30.03.2009 13:22:11
Axiton
А, ну я тебя понял :) Мы в совсем разных областях.


Название: Паскаль
Отправлено: Axiton от 30.03.2009 13:50:40
Падшая шэдова, т.е., как я понял, расширение файла должен пользователь прописывать? :unwit:


Название: Паскаль
Отправлено: Падшая шэдова от 30.03.2009 14:27:23
Ну типа того. Pascal'ю абсолютно всё равно, какое имя файла ты будешь исользовать. Главное, чтобы он смог его создать или найти.


Название: Паскаль
Отправлено: Axiton от 30.03.2009 14:43:29
А нельзя сделать так, чтобы пользователь вводил только название файла, а расширение dat добавлялось автоматически?

Кстати, при переименовании файла расширение надо заново вводить?


Название: Паскаль
Отправлено: Axiton от 30.03.2009 15:04:47
Всё, с именем разобрался полностью. Спасибо. :yes:

Как вариант - читаешь строку, введённую пользователем. Затем посимвольно её проверяешь (читай: пробегаешь строку в цикле до конца), входит ли каждый проверяемый символ в тот диапазон, куда входят просто числа.
Можно вот это поподробнее? Как проверить строку посимвольно?

На данный момент ввод ФИО выглядит вот так:

repeat
   writeln;
   writeln('Enter FIO of the architector');
   readln(s.fio);
    if length(s.fio)=0 then
      writeln('FIO is not written');
until length(s.fio)>0;


Название: Паскаль
Отправлено: zavron_lb от 30.03.2009 16:18:31
Как проверить строку посимвольно?
Фором. Если s — строка, то s[i] — i-тый символ. В паскале вроде нумерация с единицы, так что с единицы до длины, но точно уже не помню.


Название: Паскаль
Отправлено: Axiton от 13.04.2009 19:05:17
А как потом открыть файл, название которого введено пользователем?

assign(f, fname); ?


Название: Паскаль
Отправлено: zavron_lb от 13.04.2009 21:51:45
Деф здесь (http://srclan.org/forum/index.php?topic=833.msg30827#msg30827) написал. Если с проверкой — воткнуть это под условие соответственно.


Название: Паскаль
Отправлено: Axiton от 13.04.2009 21:57:53
zavron_lb
Это, как я понял, создание. Просто там процедура дозаписи в файл, программа может уже и не знать какое имя было введено пользователем при создании файла.


Название: Паскаль
Отправлено: zavron_lb от 13.04.2009 22:20:10
Не, это как раз открытие. А если строку с названием как-то проверяешь, то где-то она у тебя уже записана.

Или я тебя совсем не понимаю. :3


Название: Паскаль
Отправлено: kleho от 14.04.2009 11:33:10
Axiton
Просто создай файл настроек и храни там нужное тебе имя.


Название: Паскаль
Отправлено: batollo от 14.04.2009 13:52:50
А вот у нас на уроках информатики учат форматировать дискеты...
Серьёзно? :eek: Они ж используются только в ускоспециализированных устройствах.
 
Ээээ... Чиво? 0_0
 
 
 Насчет Паскаля в школе - я бы вырывал руки.
В универе - тоже самое.

ИМХО, Qbasic'a для понимания сути программирования хватает за глаза, к тому же там ненужно углубляться в эти идиотские синтаксические тонкости.
Алсо, паскаль-таки скорее жив, чем мертв, в отличии от бейсика.

А вот есть у меня лаба:

Program lab3;
{User enters some value and then program prints all numerics under this value}
var
N : integer;
i : integer;
Code: integer;
userprint : string;
label
1;
begin
1: WriteLn('Enter N value from 0 to 32767');
ReadLn(userprint);
Val(userprint, N, Code);
if Code <> 0 then
begin
WriteLn('Error! Try again.');
goto 1;
end;

if N < 0 then
begin
WriteLn('Error! Try again.');
goto 1;
end;

for i := N-1 downto 1 do WriteLn(i);

WriteLn('Enter any char and then press Enter to end problem');
ReadLn;
end.

Если вводишь не число или число меньше 0 - приходится вводить снова.
А как сделать так, что бы при вводе, скажем, "00000000009" юзера снова заставляли вводить нормальное число?


Название: Паскаль
Отправлено: zavron_lb от 14.04.2009 14:02:25
Если первый символ в строке ноль, посылать юзера.

Или даже лучше будет вообще все символы проверить, и пропускать только если первый символ от единицы до девяти, а остальные — хотя бы цифры.


Название: Паскаль
Отправлено: batollo от 14.04.2009 15:05:25
Общими усилиями с zavron_lb упростили до:

Program lab3;
uses crt;
var
N,i,code: integer;
userprint : string;
begin
ClrScr;
repeat
WriteLn('Enter N value from 0 to 32767');
ReadLn(userprint);
Val(userprint, N, Code);
until (code=0) and (userprint[1]<>'0') and (N>0);

for i := N-1 downto 1 do WriteLn(i);

WriteLn('Enter any char and then press Enter to end problem');
ReadLn;
end.

Может и пригодится кому, хз.


Название: Паскаль
Отправлено: SergR от 14.04.2009 15:34:36
Ээээ... Чиво? 0_0
А где они ещё используются? В компьютерах они уже не нужны, есть более надёжные и ёмкие девайсы.


Название: Паскаль
Отправлено: batollo от 14.04.2009 16:46:55
А где они ещё используются? В компьютерах они уже не нужны, есть более надёжные и ёмкие девайсы.
Они используются у меня дома как загрузочные =)


Название: Паскаль
Отправлено: SergR от 14.04.2009 16:48:35
Они используются у меня дома как загрузочные =)
Неужели у тебя нет загрузочного СД? Я дискеты на компе давно не юзал.


Название: Паскаль
Отправлено: batollo от 14.04.2009 16:50:59
Неужели у тебя нет загрузочного СД? Я дискеты на компе давно не юзал.
Есть. Но порой и дискеты тоже рулят.
Например, у меня тут сидиром накрылся.
Что мне оставалось делать? =)


Название: Паскаль
Отправлено: SergR от 14.04.2009 16:54:28
Например, у меня тут сидиром накрылся.
Одновременно с хардом? Иначе зачем тебе бы с дискеты грузиться?


Название: Паскаль
Отправлено: batollo от 14.04.2009 16:57:45
Одновременно с хардом?
Одновременно с виндой.


Название: Паскаль
Отправлено: SergR от 14.04.2009 17:00:41
Одновременно с виндой.
И ты устанавливал Винду с дискет??? :eek: :lol:


Название: Паскаль
Отправлено: batollo от 14.04.2009 17:21:10
И ты устанавливал Винду с дискет???
Да еклмн, я её восстанавливал. =)


Название: Паскаль
Отправлено: Падшая шэдова от 14.04.2009 23:40:11
2Акси.

Assign - ставит в соответствие файловому потоку f файл fname. Только лишь ставит в соответствие и ничего больше.

После этого нужно сделать одну из вещей (лишь одну, всё остальное выдаст ошибку):
а) Reset - ищет файл и открывает его для чтения, ставит курсор чтения в начало файла. Если файл не найден или защищён от чтения - выдаст ошибку.
б) Rewrite - если файл существует, то сотрёт его с диска. После чего создаёт новый файл с этим же названием, открывает его для записи. Если файл невозможно удалить или не возможно создать файл с таким именем - то выдаст ошибку.
в) Append - если файл существует, то открывает файл для записи, при этом курсор записи ставить в конец файла. Если файла не существует, то создаст его, откроет для записи.

Все ошибки храняться в IOResult. Если контроль ошибок отключён ({$I-}), то ошибка не кладёт программу.

Ещё вопросы? :)


Название: Паскаль
Отправлено: batollo от 15.04.2009 04:51:22
Все ошибки храняться в IOResult
Точнее, коды ошибок.
Если IOResult = 0 - ошибок нет.

{$I-}
А я-то думаю, что я ставлю "-" перед $I и не работает?.. >_<


Название: Паскаль
Отправлено: Axiton от 20.05.2009 20:41:04
А как вывести строку разных спецсимволов самым экономичным способом?
Писать долго и нудно что-нибудь типа "#205 #205 #205 #205 #205 #205 #205" нельзя, жалуется на слишком длинную строку.
Нажать на ALT и ввести код символа (тогда ведь должен нужный символ напечататься?) тоже не получается. Вместо этого открывается какой-то Windows List...


Название: Паскаль
Отправлено: batollo от 20.05.2009 22:10:33
Что-то не очень понял. Ну да ладно.


Название: Паскаль
Отправлено: Падшая шэдова от 20.05.2009 22:53:05
#xx - это и есть самый экономичный символ. Жалуется на длинную строку - по пробуй разделить на несколько маленьких. Если много одинаковых символов - выводи циклом.