IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Описание строки в Function, При создании модуля как описать string?
Shults99
сообщение 19.09.2005 9:54
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  0  +


Уважаемые гуру!
Есть трабла - помогите разобраться!
При создании модуля (имя.tpu) используется блок, где есть string.
Код
function RightBlank(S1,L,i:integer):integer;
begin
Writeln('Vvedite stroku S1');
readln(S1);
Writeln('Vvedite dlinu stroki L ( chislo do 20)');
readln(L);

begin
       while i<L
       do for i:=1 to L
       do Write(S1[i]);

end;

     readln;

end;


При нажатии Make (F9) выдается сообщение:

- Error 121: Invalid qualifier. -

Как её объявить правильно в этой строке (или ещё где?):
Код
function RightBlank(S1,L,i:integer):integer;

Задача такого типа
С целью формирования модуля XXX составить следующие блоки-утилиты:
1)функцию aaa
2)функцию bbb
3)процедуру ссс
Испытайте эти блоки в составе модуля XXX, также сохраните эти блоки в одноименных файлах.

Щас создаю блок ааа.


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
kent
сообщение 19.09.2005 10:33
Сообщение #2


Пионер
**

Группа: Пользователи
Сообщений: 50
Пол: Мужской
Реальное имя: Андрей

Репутация: -  1  +


Так как S1 у тебя строка так её нужно и описывать как строку:
Код
function RightBlank(S1 : String; L,i : integer) : integer;
begin
Writeln('Vvedite stroku S1');
readln(S1);
Writeln('Vvedite dlinu stroki L ( chislo do 20)');
readln(L);

begin
       while i<L
       do for i:=1 to L
       do Write(S1[i]);

end;

     readln;

end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.09.2005 10:35
Сообщение #3


Гость






Shults99, можно вопрос?
Что вообще должна делать функция RightBlank, и что возвращать?
 К началу страницы 
+ Ответить 
GoodWind
сообщение 19.09.2005 14:06
Сообщение #4


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


а зачем спрашивать пользователя о длине строки ? blink.gif
и зачем передавать в функцию значение S1 если оно все равно изменится сразу же после входа в нее (остальных параметров это, кстати, тоже касается) blink.gif


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Guest
сообщение 19.09.2005 15:00
Сообщение #5


Гость






2 kent
) Эт понятно.., но ошибка как раз и выдается тогда, когда я вписываю описание string... Паскаль вообще эти символы выделяет другим цветом и потом просит запятую после S1 и перед String, а не двоеточие, как будто это перечисление переменных. В том то и проблема, что в function при создании модуля *.tpu я не могу дать описание типа String - вот и хочу узнать - можь строки как то в function и в модулях *.tpu как-то по-другому описываются?

2 volvo
Прога не в unite работает нормально (ниже). А когда хочешь её запихать в модуль ввиде function - выдает ошибку (см. выше).

Задание
С целью формирования модуля XXX составить следующие блоки-утилиты:
а) Функцию RightBlank(S,L), возвращающую строку длины L, началом которой является строка S, а далее пробелы.
б)
в)
...
Испытайте эти блоки в составе модуля XXX, также сохраните эти блоки в одноименных файлах.

Код

program prog23;
var
S1:string[20];
L,i:integer;
begin
Writeln('Vvedite stroku S1');
readln(S1);
Writeln('Vvedite dlinu stroki L ( chislo do 20)');
readln(L);

begin
       while i<L
       do for i:=1 to L
       do Write(S1[i]);

end;

     readln;

end.
 К началу страницы 
+ Ответить 
GoodWind
сообщение 19.09.2005 15:13
Сообщение #6


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


то-есть rightBlank нечто вроде trim - только пробелы не отрезаются, а возвращается номер буквы, после которой идут _только_ пробелы ?

Цитата
Испытайте эти блоки в составе модуля XXX, также сохраните эти блоки в одноименных файлах.

а разве можно одинаково называть модуль и фнкцию внутри него blink.gif


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 19.09.2005 15:24
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


А я понял, что так нужно:
function RightBlank(var S:string):integer;
var
S1 :string[20];
i :integer;
begin
Writeln('Vvedite stroku S1'); readln(S1);
Writeln('Vvedite dlinu stroki L ( chislo do 20)'); readln(L);

if length(S1)>=L then S:=copy(S1,1,L)
else
begin
S:=S1;
for i:=1 to L-length(S1) do S:=S+' ';
end;

RightBlank:=L;
end;

Т.е. если обрезка большая, то мы добавляем пробелы к S1 справа, чтоб все строки были под одну гребенку smile.gif (одной длины)


--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Guest
сообщение 19.09.2005 15:26
Сообщение #8


Гость






GoodWind
Чет не нашел в Паскале trim..

Модуль и функцию я одинаково не называю :o
 К началу страницы 
+ Ответить 
Дож
сообщение 19.09.2005 15:26
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 179
Пол: Мужской

Репутация: -  1  +


Цитата
- Error 121: Invalid qualifier. -


Цитата
Неверный квалификатор

Возможные причины сообщения:



  • вы пытаетесь индексировать переменную, которая не является массивом


  • вы пытаетесь указать поля в переменной, которая не является записью


  • вы используете в качестве указателя переменную, которая не является указателем.





Я могу предположить только одно- ты используешь запрещенные символы в назв переменной( [ ] ^ @ . )
А вообще скажи че-нить поконкретнее, а то приводишь рабочие коды и говоришь, что нечто измененное не работает...

Сообщение отредактировано: Дож - 19.09.2005 15:27


--------------------
Доброго времени суток.
:nnn:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hiv
сообщение 19.09.2005 15:28
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 660
Пол: Мужской
Реальное имя: Михаил

Репутация: -  11  +


Но все равно бы сделал так:
function RightBlank(S:string; L:integer):string;
var
S1 :string;
i :integer;
begin
if length(S)>=L then S1:=copy(S,1,L)
else
begin
S1:=S;
for i:=1 to L-length(S) do S1:=S1+' ';
end;

RightBlank:=S1;
end;



--------------------
Никогда не жадничай. Свои проблемы с любовью дари людям!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GoodWind
сообщение 19.09.2005 15:39
Сообщение #11


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


Цитата
Чет не нашел в Паскале trim..

это не Паскалевая функция... даже не помню в каких языках она есть... кажется в FoxPro smile.gif
trim это обрезка ведущих пробелов. бывают TrimRight, TrimLeft, TrimAll


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shults99
сообщение 19.09.2005 19:52
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  0  +


Ответы, кому интересно было

Код
program prog23;
uses utils;
var
S1,S2:string[20];
L,i,n,H,T:integer;
begin
Writeln('Vvedite deistviya, kotorye hotite vipolnit');
begin


Beep(H,T);
RightBlank(S1);

End;
End.


модуль

Код

unit utils;
interface
Uses Crt;

procedure Beep(H,T:integer);
function RightBlank(S1:string):integer;

Implementation

procedure Beep;

Begin

Sound(H);        { Zvuk c visotoi H Hz }
Delay(T);        { Na T millisekund }
NoSound;           { Viklucheniye dynamika }

End;

function RightBlank(S1:string):integer;
var
{S1:string[20];}
i,L:integer;
begin
Writeln('Vvedite stroku S1');
readln(S1);
Writeln('Vvedite dlinu stroki L ( chislo do 20)');
readln(L);

begin
       while i<L
       do for i:=1 to L
       do Write(S1[i]);

end;

     readln;

end;

End.


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.09.2005 19:56
Сообщение #13


Гость






Shults99, ну и как это связано с заданием?
Цитата(Guest @ 19.09.2005 15:00)
Задание
С целью формирования модуля XXX составить следующие блоки-утилиты:
а) Функцию RightBlank(S,L), возвращающую строку длины L, началом которой является строка S, а далее пробелы.

Ты же хотя бы свои-то посты читай !!! angry.gif
 К началу страницы 
+ Ответить 
Shults99
сообщение 19.09.2005 20:53
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  0  +


volvo
Не понял что-то... Да все равно, как она называется, эта функция! Она использует строку (S1 или S - без разницы) и использует переменную L - все больше ничего не надо. То, что там ещё процедура Beep - это из той части задания, которую я сделал сам до этого.
Или я не так понял?

Кстати, всем спасибо за участие.

hiv
thnks, но я все же использовал свой вариант.


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.09.2005 20:59
Сообщение #15


Гость






Цитата
Не понял что-то...
Объясняю: ты привел задание, в котором говорится, что функция должна получать 2 (два) параметра - строку и число. Внимание, вопрос: Что принимает твоя функция из поста №12?
 К началу страницы 
+ Ответить 
Shults99
сообщение 19.09.2005 21:08
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  0  +


Ответ:
1) Строку
Writeln('Vvedite stroku S1');
readln(S1);


2) Число
Writeln('Vvedite dlinu stroki L ( chislo do 20)');
readln(L);


.. извините, если тупой, но что значит "функция должна получать 2 (два) параметра"? Возвращать 2 параметра?

.."С целью формирования модуля XXX составить следующие блоки-утилиты:
а) Функцию RightBlank(S,L), возвращающую строку длины L, началом которой является строка S, а далее пробелы...." - Вроде все сходиться.


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shults99
сообщение 19.09.2005 21:15
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  0  +


Смутно начинаю предполагать, что RightBlank(S,L) и RightBlank(S) - разные вещи, но что тогда надо сделать для RightBlank(S,L) не понимаю..


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.09.2005 21:20
Сообщение #18


Гость






Да пойми, что твоя функция должна получать ОДНОВРЕМЕННО и строку, и число, иначе в ней смысла-то нету... Вот таким должно быть определение функции:
Function RightBlank(s1: string; L: integer): string;

А у тебя она как описана? Принимает один параметр, ТОЛЬКО строку:
function RightBlank(S1:string):integer;
Нестыковка... А где число? Оно должно передаваться, а не запрашиваться у пользователя внутри функции...

Цитата
что тогда надо сделать для RightBlank(S,L) не понимаю..

См. пост №10 - hiv уже все сделал...
 К началу страницы 
+ Ответить 
Shults99
сообщение 19.09.2005 21:35
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 48
Пол: Мужской

Репутация: -  0  +


Дошло. Прикреплю вариант hiva к ответу просто текстовым файлом,
но переделывать не буду. Вот убивайте меня - не буду. У нас 12 часов ночи, у меня радость победы - а препады пусть идут в пень.
Всё.
rolleyes.gif


--------------------
__________________________
Мой диплом ПГС
http://nashidiplomy.googlepages.com
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 19.07.2025 15:36
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"