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

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

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

 
 Ответить  Открыть новую тему 
> Описание строки в Function, При создании модуля как описать string?
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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


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

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

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


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


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


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

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

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


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

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

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


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






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

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


Бывалый
***

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

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


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


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

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



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


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


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





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

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


--------------------
Доброго времени суток.
:nnn:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


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

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

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


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

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


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






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

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


Новичок
*

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

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


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

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

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


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


Гость






Цитата
Не понял что-то...
Объясняю: ты привел задание, в котором говорится, что функция должна получать 2 (два) параметра - строку и число. Внимание, вопрос: Что принимает твоя функция из поста №12?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

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

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


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


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


Гость






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

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

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

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


Новичок
*

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

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


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


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

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

 





- Текстовая версия 2.09.2025 0:15
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name