Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 401
от 16.06.2007, 11:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 252, Экспертов: 63
В номере:Вопросов: 4, Ответов: 6


Вопрос № 90827: Уважаемые эксперты, помогите расставить begin и end; во фрагменте программы: reset(f); while not eof(f) do read(f,s); Tmp:=S+' '; While Pos(' ',Tmp)<>0 do begin p:=Pos(' ',Tmp); S:=Copy(Tmp,1,p-1); T...
Вопрос № 90840: Привет профи.Помогите пожалуйста,мне нужно сделать вот такую програму: сделать программу перевода букв алфавита с больших в маленькие.Использовать процедуру для латинского и русского языков. Перевести "Индивидуальное задание к лабораторной р...
Вопрос № 90844: Уважаемые эксперты! Вот у меня ещё такая задачка, которую я решить не могу ( Суть вот в чем: сделать программу, которая позволяет попунктно (согласно запросу) выводить на экран монитора статти 55 и 56 , которые находятся в текстовых файлах s...
Вопрос № 90850: Есть ли в Паскале аналог фунции strchr из С? Заранее благодарен!...

Вопрос № 90.827
Уважаемые эксперты, помогите расставить begin и end; во фрагменте программы:
reset(f);
while not eof(f) do
read(f,s);
Tmp:=S+' ';
While Pos(' ',Tmp)<>0 do
begin
p:=Pos(' ',Tmp);
S:=Copy(Tmp,1,p-1);
Tmp:=Copy(Tmp,p+1,Length(Tmp)-p);
l:=Length(S);
if l=1 then mas[1]:=s;
if l=2 then mas[2]:=s;
if l=3 then mas[3]:=s;
if l=4 then mas[4]:=s;
if l=5 then mas[5]:=s;
if mas[1]<>'' then writeln(f1,mas[1]) else writeln(f1);
if mas[2]<>'' then writeln(f2,mas[2]) else writeln(f2);
if mas[3]<>'' then writeln(f3,mas[3]) else writeln(f3);
if mas[4]<>'' then writeln(f4,mas[4]) else writeln(f4);
if mas[5]<>'' then writeln(f5,mas[5]) else writeln(f5);
end;
close(f);
Пожалуйста не изменяйте ничего в написанной программе, она должна работать,
просто я совсем запутался в циклах while ... do что не могу правильно поставить
составной оператор Begin end;, но знаю где он должен находится.

Условие такое (если вам поможет разобраться):
Пусть дан текстовый файл. Максимальная длина слова в этом файле равнв пяти символам.
Создайте пять файлов. Каждой строке входного файла соответствует одна строка в каждом
из пяти файлов, в которые переписаны через пробел слова соответствующей длины: в
первом файле-слова длины 1 и т.д. Если слов длины k нет, то соответствующая строка
должна быть пустой.

P.S. Ни в коем случае не изменяйте программу.
Код ниже.

Приложение:

Отправлен: 10.06.2007, 15:09
Вопрос задал: Eisenheim (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Градов Юрий Михайлович
Здравствуйте, Eisenheim!
Великолепное правило - обозначать на листинке открытие и закрытие begin и end отступами и с новой строки, тогда никогда не запутаетесь. Например:
begin
While n<>0 do
begin
for i:=1 to 100 do
begin
n:=n*i;
..........
n:=n-k;
end;
end;
end.

Измененный код смотрите в приложении (перенесено из мини-форума по просьбе эксперта).
[Edited by Gh0stik]

Приложение:

---------
Глаза боятся - руки делают!

Ответ отправил: Градов Юрий Михайлович (статус: Студент)
Ответ отправлен: 10.06.2007, 15:38
Оценка за ответ: 5
Комментарий оценки:
Тема!


Вопрос № 90.840
Привет профи.Помогите пожалуйста,мне нужно сделать вот такую програму:
сделать программу перевода букв алфавита с больших в маленькие.Использовать процедуру для латинского и русского языков. Перевести "Индивидуальное задание к лабораторной работе 3" и "Borland international".
P.S. пишите пожалуйсто всё , потомучто я нуб (
Отправлен: 10.06.2007, 16:25
Вопрос задал: S.A.O. (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Tribak
Здравствуйте, S.A.O.!
Вот код:
program www;
uses crt;
var
i:integer;
s1,s2:string;

function pere(c:char):char;
var
z:char;
begin
z:=c;
if (ord(c)<91) and (ord(c)>64) then z:=chr(ord(c)+32);
if (ord(c)>127) and (ord(c)<144) then z:=chr(ord(c)+32);
if (ord(c)>143) and (ord(c)<160) then z:=chr(ord(c)+80);
pere:=z;
end;
begin
clrscr;
readln(s1);
for i:=1 to length(s1) do
s2:=s2+pere(s1[i]);
writeln(s2);
readln;
end.
Для перевода используется функция pere, она берет букву и анализирует ее код, от 65 до 90 идут заглавные латинские буквы, она к их номеру добавляет 32 и получаються теже буквы, но строчные. С русскими буквами сложнее, строчные буквы разбиты на 2 части, а-п и р-я, а заглавные рядом, поэтому для русских букв функция анализирует стоит ли до П наша буква или после и взависимости от этого выбирает сколько добавить к коду символа чтоб получить строчную букву, +32 либо +80
chr-возращает по номеру символ
ord-возращает по символу его номер
Ответ отправил: Tribak (статус: 2-ой класс)
Ответ отправлен: 10.06.2007, 17:32
Оценка за ответ: 5
Комментарий оценки:
Огромное спасибо. Мне самому стало всё ясно.

Отвечает: Градов Юрий Михайлович
Здравствуйте, S.A.O.!
var st: string;
i: integer;

begin
ClrScr;
Write('Input string: ');
Readln(st);
for i:=1 to Length(st) do
begin
if st[i] in ['A'..'Z','А'..'Я'] then st[i]:=Chr(Ord(st[i])+32);
end;
Writeln(st);
ReadKey;
end.
---------
Глаза боятся - руки делают!
Ответ отправил: Градов Юрий Михайлович (статус: Студент)
Ответ отправлен: 10.06.2007, 17:55
Оценка за ответ: 5
Комментарий оценки:
Спасиб. То что ответ такой маленький , эт канешно приветсвуется!


Вопрос № 90.844
Уважаемые эксперты! Вот у меня ещё такая задачка, которую я решить не могу (
Суть вот в чем:
сделать программу, которая позволяет попунктно (согласно запросу) выводить на экран монитора статти 55 и 56 , которые находятся в текстовых файлах st55 и st56 . (суть написаного в файлах не важна).
Отправлен: 10.06.2007, 16:46
Вопрос задал: S.A.O. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Градов Юрий Михайлович
Здравствуйте, S.A.O.!

uses crt;
var st: string;
F: TextFile; {в Pascal нет такого типа}
F: Text;

begin
ClrScr;
Write('Input st.№: ');
Readln(st);
if st[2]<>'t' then st:='t'+st;
if st[1]<>'s' then st:='s'+st;
st:=st+'.txt';
Assign(F,st);
{$I-}
Reset(F);
{$I+}
if IOResult = 0 then
begin
While not Eof(F) do
begin
Readln(F,st);
Writeln(st);
end
CloseFile(F);{в Pascal нет такой процедуры}
Close(F);
end else Writeln('File access error');
ReadKey;
end.

Конечно выше перечисленные ошибки, не будут ошибками в Delphi, но вопрос был задан в тематику Pascal!
[Edited by Gh0stik]
---------
Глаза боятся - руки делают!
Ответ отправил: Градов Юрий Михайлович (статус: Студент)
Ответ отправлен: 10.06.2007, 17:17
Оценка за ответ: 5
Комментарий оценки:
Спасибо! )


Вопрос № 90.850
Есть ли в Паскале аналог фунции strchr из С?
Заранее благодарен!
Отправлен: 10.06.2007, 18:16
Вопрос задал: Torrens (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Ерёмин А.А.
Здравствуйте, Torrens!
Для нахождения первого вхождения подстроки в строку существует функция Pos():
Pos('подстрока','строка');
А вот для нахождения последнего вхождения, например, функции нет, но её несложно написать (см. вопрос №89614).
Удачи!
---------
Нет правила без исключений. Правило без исключений - исключение из правил.
Ответ отправил: Ерёмин А.А. (статус: Профессор)
Россия, Тула
WWW: Программирование на DELPHI
----
Ответ отправлен: 10.06.2007, 18:25
Оценка за ответ: 5

Отвечает: Gh0stik
Здравствуйте, Torrens!

Конечно есть это Function Pos(Substr : String; S : String) : Byte;

Выдержка из справки:
Pos (функция)
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
Ищет подстроку в строке.

Объявление:
Function Pos(Substr : String; S : String) : Byte;

Режим:
Windows, Real, Protected

Замечания:
Параметры Substr и S - строковые выражения. Pos ищет первое вхождение строки
Substr в строку S и возвращает целочисленное значение, которое является
индексом первого символа Substr внутри S. Если строка Substr не найдена, то
Pos возвращает нуль.


Good LUck!!!
---------
Господь Бог - это всего лишь сверхмощный генератор случайных чисел, в соответствии с которыми сочетаются события на Земле. Генератор случайных чисел - и только.
Ответ отправил: Gh0stik (статус: Профессор)
Украина, Славянск
Организация: Славянский государственный педагогический университет (Кафедра алгебры)
ICQ: 289363162
----
Ответ отправлен: 10.06.2007, 18:26
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное