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

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

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

> Удаление повторяющихся элементов массива
сообщение
Сообщение #1


Новичок
*

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

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


Помогите со следующей задачей: в заданном массиве из n литер удалить все повторяющиеся литеры.
Вот что получилось у меня:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
const n=10;
type u=array[1..n] of char;
var x:u;
i,j,l,k:integer;
begin
writeln('vvedite nabor liter');
for i:=1 to n do
read(x[i]);
i:=2;
l:=n;
while i<=l do
begin
for j:=1 to i-1 do
if x[i]=x[j] then
begin
l:=l-1;
for k:=i to n do
x[k]:=x[k+1];
i:=i-1;
end;
inc(i);
end;
for i:=1 to l do write(x[i]);
readln;
readln;
end.

Но она почему то не работает. Вернее не всегда работает. Например если ввести aasdfsyajy то
программа оставит asdjy. Очень прощу помощи.
P.S. Учусь на 1 курсе, так что не знаю что такое процедуры и функции smile.gif . Да и проходим мы сейчас массивы, так что задачу необходимо сделать наподобие как делаю я. Заранее спасибо

Сообщение отредактировано: redeezko -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Но она почему то не работает. Вернее не всегда работает.
Потому что вот этот цикл:
      for j:=1 to i-1 do
if x[i]=x[j] then
begin
l:=l-1;
for k:=i to n do { <--- Вот этот самый }
x[k]:=x[k+1];
i:=i-1;
end;
не должен выполняться дважды при одном и том же j ни в коем случае. А у тебя - выполняется: несмотря на то, что ты уменьшил значение i, Паскаль работает со старым, неизмененным значением (это особенности цикла For в Паскале, начало и конец цикла вычисляются один раз, перед выполнением, а не на каждой итерации), что приводит к удалению лишнего символа.

Будем переписывать, или исправлять? smile.gif

P.S. Хм... Опоздал smile.gif Но объяснение, почему не работало - не помешает все же, я думаю...
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





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