Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 16
1

Построить линейный список из символов. Удалить из него запятые

12.01.2019, 16:08. Показов 2191. Ответов 16
Метки нет (Все метки)

Помогите сделать задачу на паскале:
Построить линейный список из символов. Удалить из него запятые. Используется текстовый файл, в котором записана строка символов
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.01.2019, 16:08
Ответы с готовыми решениями:

Построить линейный список из входной последовательности чисел. Удалить из него все отрицательные числа
Построить линейный список из входной последовательности чисел. Удалить из него все отрицательные...

Составить линейный список и удалить из него все буквы "К"
Используя динамические переменные, составить линейный список и удалить из него все буквы "К".

Дана строка символов. Удалить в ней все запятые
Дана строка любых символов. Удалить в ней все запятые.

Построить очередь из символов. Удалить из него цифры.
Данное задание реализовать в виде очереди. Все основные действия необходимые для решении задачи...

16
4607 / 2305 / 2204
Регистрация: 10.12.2014
Сообщений: 8,807
12.01.2019, 17:49 2
Лучший ответ Сообщение было отмечено Johnny3t как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
const
  inFile  = 'input.txt';
  outFile = 'output.txt';
  
type
  tList = ^pList;
  pList = record
    c : Char;
    x : tList;
  end;
  
var
  f : File of Char;
  First, Last, Cur, Tmp : tList;
begin
  First := nil;
  Assign(f, inFile);
  Reset(f);
  while Not EOF(f) do
    begin
      New(Cur);
      Read(f, Cur^.c);
      if First = nil then
        First := Cur
      else
        Last^.x := Cur;
      Last := Cur;
    end;
  Close(f);
  while (First <> nil) and (First^.c = ',') do
    begin
      Tmp := First;
      First := First^.x;
      Dispose(Tmp);
    end;
  Cur := First;
  while Cur^.x <> nil do
    if Cur^.x^.c = ',' then
      begin
        Tmp := Cur^.x;
        Cur^.x := Tmp^.x;
        Dispose(Tmp);
      end
    else
      Cur := Cur^.x;
  Assign(f, outFile);
  Rewrite(f);
  Cur := First;
  while Cur <> nil do
    begin
      Write(f, Cur^.c);
      Cur := Cur^.x;
    end;
  Close(f);
end.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5982 / 3561 / 2502
Регистрация: 22.11.2013
Сообщений: 10,116
Записей в блоге: 1
12.01.2019, 17:57 3
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Reset(f); p:=@list;
while not EoLn(f) do begin
  New(p^); with p^^ do begin Read(f,data); p:=@next; end;
end; p^:=nil;
Close(f);
 
WriteLn('L ='); t:=list;
while t<>nil do begin
  Write(t^.data); t:=t^.next;
end; WriteLn;
 
p:=@list;
while p^<>nil do with p^^ do
  if data=',' then begin
    t:=p^; p^:=next; Dispose(t);
  end else p:=@next;
 
WriteLn('L''='); t:=list;
while t<>nil do begin
  Write(t^.data); t:=t^.next;
end; WriteLn;
 
while list<>nil do begin
  t:=list; list:=list^.next; Dispose(t);
end;
1
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 16
12.01.2019, 19:33  [ТС] 4
Не может почему найти файл с расширением .txt, пишет ошибку, но когда делаю .pas, всё работает. ругается на 18-ю строку Reset(f); Паскаль вообще умеет открывать .txt?
0
Модератор
8613 / 4291 / 2955
Регистрация: 17.08.2012
Сообщений: 13,637
13.01.2019, 03:29 5
Не может найти, говорите? А файл-то есть? Вы создали с помощью текстового редактора (например, "Блокнот") файл с названием "input.txt" и с соответствующим содержимым, и поместили его в папку с программой?

Вообще, паскалю фиолетово, какой файл открывать. Всё зависит от программиста.

Насчёт "Блокнота": если у Вас в системе включена опция "Скрывать расширения для зарегистрированных типов файлов", то создайте файл с именем "input", а не "input.txt", расширение ".txt" само добавится. Иначе получится файл с именем "input.txt.txt".
0
4607 / 2305 / 2204
Регистрация: 10.12.2014
Сообщений: 8,807
13.01.2019, 06:48 6
Цитата Сообщение от Johnny3t Посмотреть сообщение
Не может почему найти файл с расширением .txt
Но в задании написано:
Цитата Сообщение от Johnny3t Посмотреть сообщение
Используется текстовый файл, в котором записана строка символов
Вот его то и нужно использовать!
0
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 16
13.01.2019, 14:09  [ТС] 7
Цитата Сообщение от Cyborg Drone Посмотреть сообщение
Не может найти, говорите? А файл-то есть? Вы создали с помощью текстового редактора (например, "Блокнот") файл с названием "input.txt" и с соответствующим содержимым, и поместили его в папку с программой?
Да конечно, всё сделал. В некоторых примерах я видел, что полностью путь в файлу прописывается, тоже пробовал, все-равно ругается, что не может найти. И файл в папке, ну среда же видит файл input.pas, а вот .txt нет. Операционка расширения не скрывает и всё правильно написал. input.txt.

Добавлено через 5 минут
Цитата Сообщение от JuriiMW Посмотреть сообщение
Вот его то и нужно использовать!
Да, но к сожалению пока не получается, с другой стороны не сказано, что файл должен быть с форматом .txt, а в учебнике Ю. Федоренко по паскалю в разделе "Текстовые файлы" он везде использует файлы с расширением .pas и пишет, что они являются текстовыми т.к. их можно открыть через блокнот и они не являются программой, а просто последовательностью символов. Ладно покопаюсь еще, если не получится, то попробуют так объяснить преподавателю. Спасибо большое за помощь!!!
0
4607 / 2305 / 2204
Регистрация: 10.12.2014
Сообщений: 8,807
13.01.2019, 14:16 8
Ну а что вам мешает использовать какие вы хотите файлы?
Ничего!
Всё, что хотите.
Ну или на что хватит фантазии.
0
Модератор
8613 / 4291 / 2955
Регистрация: 17.08.2012
Сообщений: 13,637
13.01.2019, 22:03 9
Johnny3t, такого быть не может, паскалю расширение файла совершенно по барабану. Вероятно, у Вас установлен неподходящий для операционки диалект паскаля. Такое может быть, если у Вас установлен Turbo (или Borland) Pascal + DOS Box или Turbo Pascal School Pak. Не столько оттого, что они под DOS (проблемы с длинными именами файлов и моделью памяти), а оттого, что никак не информируют операционку о своём присутствии, и при чтении из папок, на которые операционка наложила ограничения по чтению и / или записи возникают проблемы с доступом к файлам, в том числе, и к файлам с определённым расширением. В этом случае попробуйте сохранить проект куда-нибудь, где операционка особо не лютует. Например, создайте какую-нибудь папку с именем не длиннее 8 латинских символов на диске d:\ (если он у Вас есть), и настройте среду на работу с этой папкой. И туда же текстовый файл положите, естественно. А лучше выкиньте турбо и поставьте FPC или сразу Lazarus, они практически полностью совместимы с Turbo / Borland Pascal.
0
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 16
19.01.2019, 10:00  [ТС] 10
Подскажите еще пожалуйста, что означает, когда переменные идут друг за другом через точку? Например First^.c или readln(b.cm);, где b - переменная типа запись, cm - integer?
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
5982 / 3561 / 2502
Регистрация: 22.11.2013
Сообщений: 10,116
Записей в блоге: 1
19.01.2019, 10:20 11
Цитата Сообщение от Johnny3t Посмотреть сообщение
когда переменные идут друг за другом через точку?
До точки -- переменная-запись, после точки -- поле этой записи.
Не путать с квалифицированным именем, когда до точки имя модуля, а после из этого модуля имя процедуры/функции/переменной и т.п., например, System.WriteLn.
0
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 16
19.01.2019, 10:59  [ТС] 12
Цитата Сообщение от JuriiMW Посмотреть сообщение
while Cur^.x <> nil do
* * if Cur^.x^.c = ',' then
* * * begin
* * * * Tmp := Cur^.x;
* * * * Cur^.x := Tmp^.x;
* * * * Dispose(Tmp);
* * * end
* * else
* * * Cur := Cur^.x;
* Assign(f, outFile);
* Rewrite(f);
* Cur := First;
* while Cur <> nil do
* * begin
* * * Write(f, Cur^.c);
* * * Cur := Cur^.x;
* * end;
* Close(f);
end.
вот эта часть преподавателя смутила, мол, нужно сделать, чтобы не сами данные x перезаписывались а ссылками по указателям
0
4607 / 2305 / 2204
Регистрация: 10.12.2014
Сообщений: 8,807
19.01.2019, 11:20 13
В цикле while данные и не перезаписываются, а тупо выкидываются из списка и уничтожаются!
0
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 16
19.01.2019, 11:28  [ТС] 14
Сейчас подойду переспрошу еще раз...
Как я понял вот тут происходит поиск в цикле пока не закончится содержимое first и пока не будут найдены все запятые...
Цитата Сообщение от JuriiMW Посмотреть сообщение
while (First <> nil) and (First^.c = ',') do
* * begin
* * * Tmp := First;
* * * First := First^.x;
* * * Dispose(Tmp);
* * end;
* Cur := First;
а тут что?
Цитата Сообщение от JuriiMW Посмотреть сообщение
while Cur^.x <> nil do
* * if Cur^.x^.c = ',' then
* * * begin
* * * * Tmp := Cur^.x;
* * * * Cur^.x := Tmp^.x;
* * * * Dispose(Tmp);
* * * end
0
4607 / 2305 / 2204
Регистрация: 10.12.2014
Сообщений: 8,807
19.01.2019, 11:36 15
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Первый цикл убирает запятые из начала списка, а второй — во всём остальном списке.
Ведь текст может быть такой «,,,,,,,,,,,,,,,,». Каков тогда должен быть список после удаления запятых?
1
0 / 0 / 0
Регистрация: 12.01.2019
Сообщений: 16
19.01.2019, 11:45  [ТС] 16
Всё спасибо))) теперь окончательно разобрался))) Она просмотрела что х это не просто переменная а это и есть ссылка))
0
4607 / 2305 / 2204
Регистрация: 10.12.2014
Сообщений: 8,807
19.01.2019, 12:36 17
Чтобы не писать длинные next и pred, я обычно пишу по одной букве x и p — neXt и Pred…

Так гораздо проще и конструкции гораздо меньше.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2019, 12:36

В последовательности символов удалить все запятые до первой точки
Задачка такая Необходимо в последовательности символов удалить все запятые до первой точки, а...

Линейный список. Удаление простых чисел из него
Построить линейный список из входной последовательности чисел. Удалить из него все простые числа ...

В заданном предложении удалить все запятые. Напечатать исходный и преобразованный тексты, а также число удаленных символов.
В заданном предложении удалить все запятые. Напечатать исходный и преобразованный тексты, а также...

Ввод символов в линейный список
Народ,наткнулся на этом форуме вот на этот код,нужна помощь,нужно,чтоб вместо числовых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.