Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.06.2010, 16:10   #11
Blueyeska
Пользователь
 
Регистрация: 28.04.2010
Сообщений: 11
По умолчанию

Правильно ли я понимаю, что процедуры -функция должны выглядеть так как в прикреплённых файлах?

Мне ещё нужно решить две вот такие задачи:

1. В строках s1 и s2 записаны два слова, состоящие из букв английского алфавита. Написать процедуру-функцию, определяющую, может ли первое слово быть построено из букв второго слова. Здесь число вхождений каждой буквы в первое слово ограничено числом ее вхождений во второе слово.

2. В строках s1 и s2 записаны два слова, состоящие из букв английского алфавита. Написать процедуру-функцию, определяющую, является ли первое слово перестановкой (с повторениями того же состава) букв второго слова.


Может, поможете?
Вложения
Тип файла: txt Новый текстовый документ.txt (195 байт, 129 просмотров)
Тип файла: txt Новый текстовый документ (2).txt (134 байт, 141 просмотров)
Тип файла: txt Новый текстовый документ (3).txt (161 байт, 119 просмотров)

Последний раз редактировалось Stilet; 02.06.2010 в 16:24.
Blueyeska вне форума Ответить с цитированием
Старый 02.06.2010, 16:22   #12
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

В Паскале существуют стандартные функции для работы со строками, они находятся в модуле strings. Например, функция pos(подстрока, строка) возвращает позицию первого символа подстроки в строке. Т.е. pos('el', 'Hello!') возвращает 2. Если подстрока не включена в строку, функция возвращает ноль.
Если вы получили задание на работу со строками, экзаменаторы в 90% случаев ждут от вас именно знания стандартных функций работы со строками - упомянутой pos, функции copy(строка, i, j), функции lenght(строка) и функции delete. И будь вы хоть 1000 раз крутым прогером, большинство преподов будет требовать от вас "стандартного" ответа.

С использованием упомянутых стандартных функций третья из ваших функций реализуется так

Func3 (s : string; i : word):word - возвращает номер позиции последней литеры i-го слова строки s

Код:
function Func3(s:string; i:word):word;
var str:string;
var j, n, m:word;
begin
str=copy(s,1,length(s));//копируем исходную строку(чтобы не затереть ее)
//последняя литера i-го слова располагается на одну позицию раньше i-го пробела
//так что ищем i-тый пробел
m:=0;
for j:=1 to i do
       begin
       n:=pos(' ', str);//нашли очередной пробел
       m:=m+n;//в переменную m запоминаем число уже стертых символов
       str:=delete(str,1,n);//стираем начало строки вместе с найденным только что пробелом
       end;
//теперь в переменной m хранится позиция i-го пробела, позиция искомой литеры на 1 меньше
result:=m-1;
end;

Последний раз редактировалось Stilet; 02.06.2010 в 16:25.
Snejnaya вне форума Ответить с цитированием
Старый 02.06.2010, 16:26   #13
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

Код:
str=copy(s,1,length(s))// прикольно а str:=s; не проще написать
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!
DoDge_VipeR вне форума Ответить с цитированием
Старый 02.06.2010, 16:32   #14
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

DoDge_VipeR

проще)) Просто у нас в вузе есть преподы, которые требуют использовать "текущую тему" на 100%, даже если это не рационально.
Например, вычислять значение простейшего интеграла разложением в ряд, потому что проходим ряды. Вот и привычка сформировалась.

1) Func1 (s : string):word - возвращает количество слов в строке s - фактически число слов равно числу пробелов+1 т.е

Код:
function Func1(s:string):word;
var n, i:word;//n-позиция пробела, i-счетчик слов
var end_str=false:boolean
begin
str=s;//копируем строку
i:=0;
while(end_str=false) do//пока в строке остаются пробелы
       begin
       n=pos('' ', str);//позиция пробела
       if (n=0) then end_str=true //если в строке больше нет пробелов, прекращаем цикл
      else delete(str,1,n) //в противном случае удаляем первое слово строки вместе с пробелом
       i:=i+1;//увеличиваем счетчик слов на 1
       end;
result:=i;
end;
2. Func2 (s : string; i : word):word - возвращает номер позиции, с которой начинается i-ое слово строки s.
Т.е. возвращает номер i-1 пробела, увеличенный на 1. Задача почти такая же, как задача 3

Код:
function Func2(s:string; i:word):word;
var str:string;
var j, n, m:word;
begin
str=s;//копируем исходную строку(чтобы не затереть ее)
//если i=1, то функция возвращает 1
if(i=1) then result:=1 
else
begin // иначе ищем (i-1)-тый пробел
m:=0;
for j:=1 to (i-1) do
       begin
       n:=pos(' ', str);//нашли очередной пробел
       m:=m+n;//в переменную m запоминаем число уже стертых символов
       str:=delete(str,1,n);//стираем начало строки вместе с найденным только что пробелом
       end;
//теперь в переменной m хранится позиция (i-1)-го пробела, позиция искомой литеры на 1 больше
result:=m+1;
end;
end;
From Stilet: Почему код не форматируем читабельно? горчичника захотелось? Их есть у меня.

Последний раз редактировалось Stilet; 04.06.2010 в 12:23.
Snejnaya вне форума Ответить с цитированием
Старый 04.06.2010, 11:34   #15
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
str=s;//копируем исходную строку(чтобы не затереть ее)
А вот это вообще лишнее!!! Нужно знать какие параметры и как передаются в процедуры и функции... В данном случае Вы, уважаемая, будете работать уже с копией строки, так как передаваемый параметр определен как параметр-значение...
Перемешивай дело с бездельем и не сойдешь с ума...

Последний раз редактировалось Grag; 04.06.2010 в 11:36.
Grag вне форума Ответить с цитированием
Старый 04.06.2010, 11:53   #16
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

Я и собираюсь работать с копией строки. В этой программе требуется возвращать только позицию символа, а что, если потребуется вернуть еще и сам символ? А строка уже затерта?
Snejnaya вне форума Ответить с цитированием
Старый 04.06.2010, 11:59   #17
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Мдя уж... Ты не поняла мою мысль... Дело в том, что передавая строку как параметр-значение, ты в процедуре/функции уже создаешь ее копию и работаешь именно с копией... Так зачем внутри процедуры/функции создавать еще переменную и ей присваивать параметр-значение, создавая дубликат уже имеющейся копии... Масло-масляное, как говорится...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 04.06.2010, 12:10   #18
Snejnaya
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 219
По умолчанию

Ты меня тоже не понял

Дело в том, что передавая строку как параметр-значение, ты в процедуре/функции уже создаешь ее копию и работаешь именно с копией...

Это не дает мне затереть глобальную переменную, которую я передаю из основной программы. А "первоначальная копия" прекрасно затирается. Я привела конкретный пример

Func3 (s : string; i : word):word - возвращает номер позиции последней литеры i-го слова строки s

пусть нужно вернуть не номер позиции, а саму литеру. Где функция возьмет эту литеру, если она затерла s? Побежит искать глобальную переменную?
Snejnaya вне форума Ответить с цитированием
Старый 04.06.2010, 12:25   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А "первоначальная копия"
Что за "первоначальная копия" Пока что я как и Grag не вижу никакого смысла в операторе str=s; ибо то что передано в параметре как ты уже выразилась
Цитата:
передавая строку как параметр-значение, ты в процедуре/функции уже создаешь ее копию и работаешь именно с копией...
Вот если бы у тебя стояло
Код:
Func3 (var s : string; i : word):word
Тогда да.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.06.2010, 12:30   #20
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

2 Снежная... Есть разные алгоритмы поиска...
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строки Паскаль Antonio_getscool Помощь студентам 1 19.12.2009 15:12
Паскаль,строки! DjDeniels-61 Помощь студентам 1 15.11.2009 12:15
Паскаль, строки Паскалька^^ Помощь студентам 7 25.10.2009 15:39