Mizuwokiru 181 Опубликовано 2 декабря, 2015 (изменено) В общем, суть проблемы: Есть заранее заполненный словами файл, который считывается программой в начале. Слова записываются в связанный список, состоящий из самого слова, количество его дубликатов и указатель на следующий элемент. Вот что я накодил: program LR3_LinkedList; uses crt; type mystr = string[25]; pnode = ^node; node = record worrd: mystr; count: byte; next: pnode; end; function CreateNode(new_word: mystr): pnode; var new_node: pnode; begin new(new_node); new_node^.worrd := new_word; new_node^.count := 1; new_node^.next := nil; CreateNode := new_node; end; procedure AddBefore(p, new_node: pnode); var temp: node; begin temp := p^; p^ := new_node^; new_node^ := temp; p^.next := new_node; end; function Find(head: pnode; new_word: mystr): pnode; var q: pnode; begin q := head; while (q <> nil) and (new_word <> q^.worrd) do q := q^.next; Find := q; end; function FindPlace(head: pnode; new_word: mystr): pnode; var q: pnode; begin q := head; while (q <> nil) and (new_word > q^.worrd) do q := q^.next; FindPlace := q; end; procedure CoolWrite(str: string); var i: byte; begin Write(str); for i := 1 to 10 do begin Write('.'); Delay(200); end; WriteLn; end; procedure ClearMemory(var p: pnode); var q: pnode; begin while p <> nil do begin q := p; while q^.next <> nil do q := p^.next; dispose(q); end; end; function GetWord(var f: text): mystr; var c: char; begin GetWord:= ''; while not eof(f) do begin read(f, c); if (c <= ' ') and (GetWord <> '') then break else if c > ' ' then GetWord := GetWord + c; end; end; var head, tmpnode, tmpnode2: pnode; f: text; tmpword: mystr; i: byte; begin clrscr; CoolWrite('Открываем файл'); assign(f, 'C:\text.txt'); reset(f); tmpword := GetWord(f); head := CreateNode(tmpword); while not eof(f) do begin tmpword := GetWord(f); if tmpword = '' then break; tmpnode := Find(head, tmpword); // Где-то отсюда выбивает exitcode = 216 if tmpnode^.worrd = tmpword then Inc(tmpnode^.count) else begin tmpnode := FindPlace(head, tmpword); tmpnode2 := CreateNode(tmpword); AddBefore(tmpnode, tmpnode2); end; end; close(f); assign(f, 'C:\result.txt'); rewrite(f); tmpnode := head; while tmpnode <> nil do begin WriteLn(f, tmpnode^.worrd:15, tmpnode^.count:5); tmpnode := tmpnode^.next; end; close(f); readkey; ClearMemory(head); end. Изменено 2 декабря, 2015 пользователем DiQuero Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
fireday2 49 Опубликовано 3 декабря, 2015 (изменено) паскали разные есть "где-то отсюда выбивает", это как так "где-то отсюда" ? то есть не знаешь даже где, как такое может быть? и, имея код ошибки, в чем проблема разобраться в причине ошибки? Изменено 3 декабря, 2015 пользователем fireday2 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mizuwokiru 181 Опубликовано 3 декабря, 2015 паскали разные есть "где-то отсюда выбивает", это как так "где-то отсюда" ? то есть не знаешь даже где, как такое может быть? и, имея код ошибки, в чем проблема разобраться в причине ошибки? 1. Этот код должен по идее запуститься как на FPC, так и на Turbo Pascal/Borland Pascal. 2. Написал я сюда, ибо не было времени искать ошибку, так как помимо этого мне нужно было сделать 10 лаб. 3. "Где-то отсюда" - не так выразился, выбивает на проверке условия (скорее всего что-то не так в обращении к полю записи). Также, у меня там были проблемы с этим новым 3-им паскалем, мб из-за этого все. 4. 216 ошибка на сколько я помню отвечает за обращение к элементу массива по недопустимому номеру, но может быть у него более абстрактное определение, о котором я не знаю. В итоге от твоего поста толку 0. P.S.: Тему можно закрыть, препод код не проверял, лабу сдал Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
fireday2 49 Опубликовано 6 декабря, 2015 1. "по идее" 2. не было времени искать, да ладно, ты всерьез думаешь что у других есть время разбирать твой код и искать ошибку, когда у тебя все на глазах ? 3. "скорее всего", "мб из-за этого". говорит о том, что ты не разобрался в сути проблемы , но поспешил на форум 4. "насколько помню" - не помнишь , не беда, интернет под рукой форум - не волшебная палочка от поста толк есть, если ты его не увидел, это другое дело п.с. поздравляю Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
zhorick8970 0 Опубликовано 24 апреля, 2016 Конкретнее сформулируйте проблему? Я просто больше спец по плюсам Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
fireday2 49 Опубликовано 26 апреля, 2016 Конкретнее сформулируйте проблему? Я просто больше спец по плюсам ты спец по мультиаккам и набиву потосв, да и то посредственный Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты