• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Файл

  • Автор темы Alexsey1991
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

Alexsey1991

Дан текстовый файл f.Удалить из файлы все слова,которые состоят из одних и тех же букв.
Вот что я написал!!Ошибок нет но не удаляет!!!!
код:
Код:
var
f:text;
s:array[1..100] of string;
k,i,a,b,v:integer;
found:boolean;
begin
assign(f,'file.txt');
reset(f);
while not eof (f) do
begin
k:=k+1;
read(f,s[k]);
end;
for i:=1 to k-1 do
for a:=i+1 to k do
begin
for b:=1 to length(s[i]) do
for v:=1 to length(s[a]) do
begin
if s[i][b] = s[a][v] then
found:=true
else found:=false;
end;
if found=true then
s[i]:='';
s[a]:='';
end;
close(f);
end.

Посоветуйте что надо делать???Или хотя бы как!!!
 
D

Dock1100

наскока я понял то вы только считываете из файла и коректируете считаное,а потом обратно в файл коректировку не заносите(масив s запишите в файл)

P.S. Правильно оформляйте код, так более четабельно и красивей
 
H

hosm

А вы задание поняли, количество и порядок букв должны учитываться?
Удалить из файлы все слова,которые состоят из одних и тех же букв.
получается, каждое слово в файле в отдельной строке?
В варианте исх. данных:
aaab
ab
abaa
bab
1) должен остаться пустой файл (т.к. используются одинаковые буквы a и b )
2) или
ab
bab
(с учетом кол-ва)
3) или весь исходный файл (с учетом кол-ва и порядка букв)?
В зависимости от этого и правьте код...

А вот это не совсем понятно - потерян begin-end?
if found=true then
s:='';
s[a]:='';
 
H

hosm

нет не в каждой строке разное расположение!!!
хм... не поняла, это ответ на какой из моих вопросов?
вопрос a) - про то, что каждое слово в одной строке (т.е. слово = строка)
вопроос б) - какой из вариантов является правильным решением для заданных исходных данных?
мне лично задание пока не понятно, вы так и не рассказали, а хотите, чтоб мы исправили.
ошибка скорее всего, в этом блочке:
if s = s[a][v] then
found:=true
else found:=false;

Я могу попытаться написать, что вы делаете:
здесь вы сравниваете 1-й символ одной строки (например, а) со всеми другой и, только если они полностью одинаковы (2-я строка типа аааааа) или последний символ строки равен 1-му символу первой строки (например, 2-я строка типа bbbbbbbba), то у Вас found:=true. Если вторая строка вида abb, то у Вас found станет false при b=1 при просмотре 2-го и т.д. символа 2-й строки (v=2, 3,...). Где логика?
и аналогичная фигня написана для сравнения 2-го символа первой строки, и т.д.

Добавлено: гы) или может, вообще надо удалять слова вида: aaaaaaaaaaaaaaaaa bbbbbbbbb cc?
 
D

Dock1100

А не проще сделать так:
Делаем масив интегера для запоминания где побелы
делаем два масива стринга один копия файла, другой правим
А потом проверяем символы между пробелами тоесть слова на одинаковость и вырезаем
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!