Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача со строками, помогите исправить ошибку 
V
    Опции темы
Lilium
Дата 7.5.2008, 00:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



Задано М строк символов, которые вводятся с клавиатуры. Каждая строка представляет собой последовательность символов, включающих в себя восклицательные знаки. Заменить в каждой строке воскл. знаки на точки.

Код
program stroka;
var s:string;
i,M:integer;
a:array [1..10] of string;
begin
write ('M');
readln (M);
for i:= 1 to M do
begin
write ('s');
readln (s);
for i:= 1 to lenght(s) do
if s[i]='!' then
s[i]:='.';
writeln (s);
end;
end;
end.


Что-то жутко напутала, т.к. выводит что-то непонятное =)

Это сообщение отредактировал(а) volvo877 - 7.5.2008, 01:06
PM MAIL   Вверх
volvo877
Дата 7.5.2008, 01:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Lilium @  7.5.2008,  00:49 Найти цитируемый пост)
выводит что-то непонятное =)
Не может оно выводить ничего непонятного, оно даже не откомпилируется... 

lenght - нет такого в Паскале...

PM MAIL   Вверх
Lilium
Дата 7.5.2008, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



Я ошиблась, нужно length
PM MAIL   Вверх
volvo877
Дата 7.5.2008, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



В таком случае я покажу тебе еще одну ошибку:

Код
...
for i:= 1 to M do { <--- Цикл по i ? }
begin
  write ('s');
  readln (s);
  for i:= 1 to length(s) do { <--- Еще один??? Нельзя... Поменяй здесь переменную цикла }
    if s[i]='!' then
    s[i]:='.';
    writeln (s);
  end;
end;
...


Это сообщение отредактировал(а) volvo877 - 7.5.2008, 01:32
PM MAIL   Вверх
Данкинг
Дата 7.5.2008, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



А в Паскале аналога "StringReplace" нет?


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
volvo877
Дата 7.5.2008, 01:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Нет... Мало ли, чего где нет...
PM MAIL   Вверх
Dobermann
Дата 7.5.2008, 03:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: нет
Всего: 0



Код

program stroka;
var   s: string;
    i,N:integer;
begin
  readln(N);
  //  ЧЕРЕЗ ENTER ВВОДИШЬ ПО ОДНОМУ СИМВОЛУ
  for i:= 1 to N do
  begin
      readln(s[i]);
      if s[i]='!' then
      s[i]:='.';
  end;
  for i:=1 to n do
    write(s[i]:2);
    readln
end.

PM   Вверх
volvo877
Дата 7.5.2008, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Для тех, кто в танке: задание было таким
Цитата(Lilium @  7.5.2008,  00:49 Найти цитируемый пост)
Задано М строк символов, которые вводятся с клавиатуры
, никакого указания на то, что надо вводить каждый символ по отдельности нет...

Код
program stroka;
var 
  s: string;
  i, j, M: integer;
begin
  write ('M'); readln (M);
  for i:= 1 to M do begin
    write ('s = '); readln (s);
    for j := 1 to length(s) do
      if s[j]='!' then s[j]:='.';
    writeln (s);
  end;
end.

PM MAIL   Вверх
Lilium
Дата 7.5.2008, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



Так, ну вот как-то так она у меня получилась, но все равно не выводит итоговые строки с точками

program stroka;
var s,d:string;
i,j,k,M:integer;
a,a1:array [1..10] of string;
begin
write ('M');
readln (M);
for i:= 1 to M do
begin
write ('a[i]');
readln (a[i]);
end;
for i:=1 to M do
begin
s:='';
for k:= 1 to length(a[i]) do
begin
d:=copy (a[i],k,1);
if d<>'!' then
s:=concat (s,d)
else
begin
d:='.';
s:=concat (s,d)
end;
end;
a[i]:=s;
end;
for i:= 1 to M do
begin
writeln ('a1[j]=',a[i]);
end;
end.
где-то напутала с i и j...
PM MAIL   Вверх
volvo877
Дата 7.5.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Во-первых, пользуйся кнопкой "Код"... 
Во-вторых, я привел тебе работающую программу, чем она тебя не устроила?

Ну, и если уж хочется сделать самостоятельно - тогда вопрос на засыпку: зачем нужно для доступа к определенному символу строки использовать Copy, когда можно просто обратиться по индексу?
PM MAIL   Вверх
Lilium
Дата 8.5.2008, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



В вашей программе мне не нравится только то, что она выполняет действия построчно. Т.е, я ввожу одну строку, она меняет знаки и только потом вводим вторую. А мне нужно, чтобы сначала ввели весь массив строк, а потом получили весь массив строк с другими символами...

Это не моя прихоть, а препода, т.к. задача по теме строки и надо использовать операторы из этой темы...
PM MAIL   Вверх
volvo877
Дата 8.5.2008, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Lilium @  8.5.2008,  00:02 Найти цитируемый пост)
задача по теме строки и надо использовать операторы из этой темы
Вот и используй операторы, а не функции и процедуры... Ты ж усложняешь себе же жизнь, и то, что делается элементарно у тебя получается растянутым...

Ну, как знаешь. Вот так?
Код

program stroka;
var
  a: array[1 .. 10] of string;

  s: string;
  i, j, M: integer;
begin
  write ('M = '); readln (M);
  for i := 1 to M do begin
    write ('a[', i, '] = '); readln (a[i]);
  end;

  for i:= 1 to M do begin
    s := '';
    for j := 1 to length(a[i]) do
      if copy(a[i], j, 1) = '!' then s := concat(s, '.')
      else s := concat(s, copy(a[i], j, 1));
    a[i] := s;
  end;

  for i:= 1 to M do begin
    write ('a[', i, '] = ', a[i]);
  end;
end.


PM MAIL   Вверх
Lilium
Дата 8.5.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.5.2008

Репутация: нет
Всего: нет



Оу, ес!!! Вот это то, что надо!!! огромное спасибо!!!!!!!!!!! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.