Страница 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 писал(а):Что-то я не подумал, поторопился...но так ведь то же считается?

Да нет все верно, просто всегда нужно стремится к меньшему числу переменных и к более короткому коду, но это приходит с опытом (я вот иногда простую задачу решу так, что просто стыдно показывать :oops: а опыта, хоть и любительского, но все же около 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

В данном случае вы не понимаете абсолютно правильно. :D

Это опечатка в примере.

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 с текстом:
Код: Выделить всё
2
4
6
8

И программа как в Главе 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
Код: Выделить всё
S:=0;

Во-вторых, удалить что-то из текстового файла нельзя.
Но можно скопировать из одного файла все номера, кроме удаляемого, в другой файл. А потом из этого другого файла скопировать все в первый. Так получится удаление. Сделайте ради упражнения. В реальных БД так, конечно, не делается, там используют не текстовые файлы, а файлы прямого доступа. Но эта тема выходит за рамки "песен".