Страница 1 из 11
Разбор примеров из книги
Добавлено: 21.05.2011 11:06:14
Paster Fob
Понятно...
Попробовал решить первое задание в главе 23 из раздела "А вам слабо?",сделал.А вот смысл второго задания,не понял.вот оно.
Напишите функцию для определения позиции буквы в заданной строке.Функция должна вернуть позицию первой такой буквы или ноль,если буквы в строке нет.Напишите программу для проверки функции.
Первое предложение понятно,а вот дальше,что означает строка
Функция должна вернуть позицию первой такой буквы или ноль,если буквы в строке нет
Про ноль понятно,а первую часть предложения,никак понять не могу.
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 21.05.2011 11:25:07
Odyssey
Это значит, что если в строке нужно найти букву "z", и таких букв в строке несколько (например "abzcdzefzg"), то программа должна вернуть позицию первой буквы "z" (т.е. в данном примере 3, а не 6 или 9).
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 22.05.2011 10:56:44
Paster Fob
Ну тогда понятно.В книге нет ответа на эту задачу,вот что у меня получилось:
Код: Выделить всё
function poisk(str:string;ch:char):integer;
var i,n:integer;
begin
for i:=1 to length(str) do
if str[i]=ch then
begin
n:=i;
break;
end
else n:=0;
poisk:=n;
end;
var s:string;
begin
writeln('введите строку');
readln(s);
writeln(poisk(s,'a'));
readln
end.
Так надо было сделать?
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 22.05.2011 11:08:36
Oleg_D
Ага. Только без переменной n можно обойтись.
----------
Код: Выделить всё
function poisk(str:string;ch:char):integer;
var i : integer;
begin
poisk:=0;
for i:=1 to length(str) do
if str[i]=ch then
begin
poisk:=i;
break;
end
end;
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 22.05.2011 11:43:17
Paster Fob
Что-то я не подумал,поторопился...но так ведь то же считается?
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 22.05.2011 12:32:10
Maxizar
Paster Fob писал(а):Что-то я не подумал, поторопился...но так ведь то же считается?
Да нет все верно, просто всегда нужно стремится к меньшему числу переменных и к более короткому коду, но это приходит с опытом (я вот иногда простую задачу решу так, что просто стыдно показывать

а опыта, хоть и любительского, но все же около 3 лет. Так что Программирование, это та область где можно совершенствоваться практически бесконечно). Так что Вы молодец, ваш энтузиазм просто радует.
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 03.09.2011 17:34:40
Valeriy
С процедурами немного разобрался, а вот с функциями что-то не очень.
В этом примере функция вызывается дважды, не понимаю с какой целью?
Код: Выделить всё
function Max(arg1, arg2 : integer) : integer;
begin
if arg1 > arg2
then Max:= arg1
else Max:= arg2
end;
var A,B:integer;
begin
A:= Max( 20, 10 ); { A = 20 }
Writeln( Max( A, B ) ); { печатается большее из A и B }
readln
end.
Я изменил строку - Writeln( Max( A, B ) );
на - Writeln(A);
Результат получился одинаковый, но функция вызывается уже один раз.
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 04.09.2011 04:12:37
pda
Valeriy писал(а):В этом примере функция вызывается дважды, не понимаю с какой целью?
Особенно, если учесть, что значение B неопределено.

Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 04.09.2011 16:06:47
Максим
ValeriyВ данном случае вы не понимаете абсолютно правильно.

Это опечатка в примере.
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 04.09.2011 17:06:42
Valeriy
Максим писал:
В данном случае вы не понимаете абсолютно правильно.
Это опечатка в примере.
Где именно опечатка?
Подскажите пожайлуста.
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 04.09.2011 17:41:17
Oleg_D
Valeriy писал(а):Где именно опечатка?Подскажите пожайлуста.
Да, именно, где?
На стр. 149 есть фрагменты кода:
--------
Код: Выделить всё
Созданная нами функция может вызываться так.
A:= Max( 20, 10 ); { A = 20 }
Writeln( Max( A, B ) ); { печатается большее из A и B }
Вызов функции можно использовать как фактический параметр в её
собственном вызове, то есть организовать вложенные вызовы, например.
A:= Max ( Max( 20, 10 ), 40 ); { A = 40 }
A:= Max ( Max( 20, 10 ), Max( 200, 100 ) ); { A = 200 }
Но это фрагменты, а не законченная программа.
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 04.09.2011 19:56:26
Valeriy
Вроде бы понял.
В книге даны два варианта вызова функции:
A:= Max( 20, 10 );
или
Writeln( Max( A, B ) );
А я решил что они оба одновременно входят в текст програмы.
Значит програма должна выглядеть либо так:
Код: Выделить всё
function Max(arg1, arg2 : integer) : integer;
begin
if arg1 > arg2
then Max:= arg1
else Max:= arg2
end;
var A:integer;
begin
A:= Max( 20, 10 );
Writeln(A);
readln
end.
либо так:
Код: Выделить всё
function Max(arg1, arg2 : integer) : integer;
begin
if arg1 > arg2
then Max:= arg1
else Max:= arg2
end;
var A,B:integer;
begin
A:=20;
B:=10;
Writeln( Max( A, B ) );
readln
end.
Спасибо!
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 04.09.2011 22:17:25
Oleg_D
Ага, годится.
Для кратости в книге часто приводятся фрагменты кода, а не полноценные программы.
Разумеется, что переменные надо объявлять и инициализировать.
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 31.01.2012 17:26:20
Valeriy
Подскажите пожайлуста!
Есть файл - C:\File.txt с текстом:
И программа как в Главе 29 (Полицейская база данных, версия 1),только я
её упростил. Она ищет цифру которую вы вводите.
Код: Выделить всё
var N,S: integer;
F: text;
begin
write('Введите номер - ');
readln(N);
Assign(F,'C:\File.txt');
Reset(F);
while not Eof(F) and (S<>N) do begin
readln(F,S);
end;
if S=N
then writeln('Есть такой номер')
else writeln('Нет такого номера');
close(F);
readln
end.
А как сделать так чтобы она эту цифру удаляла?
Заранее спасибо.
Re: "Песни о Паскале" - для школьников и начинающих
Добавлено: 31.01.2012 17:52:11
Oleg_D
Во-первых, в Вашей программе есть маленькая неточность: перед WHILE надо инициализировать переменную S
Во-вторых, удалить что-то из текстового файла нельзя.
Но можно скопировать из одного файла все номера, кроме удаляемого, в другой файл. А потом из этого другого файла скопировать все в первый. Так получится удаление. Сделайте ради упражнения. В реальных БД так, конечно, не делается, там используют не текстовые файлы, а файлы прямого доступа. Но эта тема выходит за рамки "песен".