Убедительная просьба ко всем, кто выкладывает исходники: 1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы
Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!
Прежде чем задать вопрос, воспользуйтесь учебником
Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36
Не получается запустить программу не поможешь? в начале еще такая ерунда была она нужна? Unit ZADACH302; Interface Implementation Begin writeln('Дан файл, содержащий текст на русском языке. Найти слово, встречающееся в каждом предложении, или сообщить, что такого слова нет.'); End.
Код:
Program pas15291;
Uses zadach302.pas; {* Эту строку можно удалить *} Const {* Постоянные значения *} gap = [' ', ',' , ':' , '(' , ')' , ';' ]; eo_sentence = ['?', '!', '.']; Var {* Необходимые переменные *} s : char; txt : text; current_word : String; iterative_word : String; word : Array [1..15] Of Array [1..15] Of String; find : boolean; i : integer; j : integer; k : integer; l : integer; n : integer; Begin assign(txt, 'c:txt.txt'); {* Привязка переменной txt к файлу 'c:txt.txt' *} reset(txt); {* Подготовка переменной txt для чтения из файла *} iterative_word := ''; current_word := ''; i := 1; j := 1; k := 1; n := 0; find := false; While Not(EOF(txt)) Do Begin read(txt, s); If Not(s In gap) And Not(s In eo_sentence) Then current_word := current_word + s Else Begin word[i, j] := current_word; j := j + 1; current_word := ''; End; If (s In eo_sentence) Then Begin i := i + 1; j := 0; End; l := i - 1; End; For k := 1 To 15 Do {* Увеличиваем k от 1 до 15 с шагом 1 *} Begin For j := 1 To 15 Do {* Переменная j увеличивается с 1 до 15 *} If (find = false) And (word[1, j] = word[2, k]) And (word[1, j]'') Then Begin iterative_word := word[1, j]; find := true; End;
End; If find = true Then Begin For i := 1 To 15 Do {* Увеличиваем i от 1 до 15 с шагом 1 *} Begin For j := 1 To 15 Do {* Увеличиваем j от 1 до 15 с шагом 1 *} If word[i, j] = iterative_word Then n := n + 1; End;
Junior
Статус: Не в сети Регистрация: 09.09.2011 Откуда: Донецк
Помогите с задачей, пожалуйста.
Сформувати квадратну матрицю порядку n за заданим зразком: n 0 0 . 0 0 0 n-1 n 0 . 0 0 0 n-2 n-1 n . 0 0 0 ........... 2 3 4 . n-1 n 0 1 2 3 . n-2 n-1 n
Код:
const N=3; var A: array[1..N,1..N] of integer; i,j,k : integer; begin for j:=1 to N do k:=n; for i:=N downto i do begin if i<=j then Begin A[i,j]:= k; k:=k-1; End; if i>j then A[i,j]:= 0; if i < N then Write (A[i,j],' '); if i = N then Writeln (A[i,j],' '); end; readln; end.
Доброго времени суток. Помогите доделать программу. Условие: Напишите процедуру/функцию, которая все цифры в слове, заменяет на первую букву этого слова. Доп. условия:
Если в слове нету букв, то слово просто переписывается.
Если в слове нету цифр, то слово просто переписывается.
Слово может состоять из всех знаков, пробел разделяет слова.
Программа должна переделывать слова во всех строках, если текст имеет несколько строк.
Если файл с текстом пуст, то программа должна показать соответствующее сообщение, о невозможности создание результатного файла.
Длина строки не больше 255 символов. Если строка длинне, то оставшиеся символа игнорировать.
Вот, что я пытался сделать:
Код:
uses crt; var f,g:text; i:byte; s:string; begin clrscr; assign(f,'text1.txt');; reset(f); assign(g,'text2.txt'); rewrite(g);while not eof(f) do begin readln(f,s); for i:=1 to length(s) do if s[i] in ['0','1','2','3','4','5','6','7','8','9'] then s[i]:='m'; writeln(g,s); end; close(f); close(g);write('Файл text1 переписан в файл text2); readln end.
Но не всё получилось. Это программа просто заменяет цифры на букву. Есть несколько вопросов.
Как сделать, чтобы программа заменяла цифры на первую букву этого слова?
Как сделать, чтобы программа предлагала мне самому выбрать название результатного файла?
Как сделать, чтобы программа предлагала выбрать файл, с которого будет читать текст?
Member
Статус: Не в сети Регистрация: 20.03.2011 Откуда: Москва
dwade 1) if s[i] in ['0','1','2','3','4','5','6','7','8','9'] then s[i]:='m'; <=> if s[i] in ['0'..'9'] then s[i]:='m'; 2)
Цитата:
Как сделать, чтобы программа заменяла цифры на первую букву этого слова?
Делаем нарезку до пробела, сохраняя в буферную строку bufstring:=bufstring+s[i], потом смотрим в этой строке. если bufstring[i] in ['0'..'9'] то bufstring[i]:=bufstring[1]; 3) сначала все выгружаешь строку, в конце пишешь Writeln('input filename'); Readln(filename); Assign(f,filename); ... 4)то же самое, только в начале. Еще можно проверить на FileExists, или это уже Object Pascal, не помню уже.
_________________ I would tell you a joke about UDP, but you probably wouldn't get it.
Junior
Статус: Не в сети Регистрация: 09.07.2009 Откуда: РФ
dwade Что то вроде этого:
Код:
begin readln(f,s); Fchr:=s[0]; for i:=1 to length(s) do begin if ((i>0) and(not(s[i]=' ') and (s[i-1]=' '))) then Fchr:=s[i] else if s[i] in ['0'..'9'] then s[i]:=Fchr; writeln(g,s); end; end;
Тут возникла ещё 1 проблема. Задача: Из однонаправленного списка удалить элемент, указанного номера. Программу написал, но у меня она игнорирует одну процедуру, а именно самую главную - выбрать номер элемента, который нужно удалить. Все процедуры работают, а 1 просто пропускает\игнорирует.
Код:
program sukurti_sarasa; uses crt; type sar = ^el; el = record duom : integer; kitas : sar; end; procedure Sukurti_sar ( var pr, pab : sar ); var g : sar; x : integer; begin pr := nil; pab := nil; writeln('Ñîçäà¸ì ñïèñîê. Ââåäèòå öåëûå ÷èñëà.'); writeln('Æåëàÿ çàêîí÷èòü, ââåäèòå 0.'); readln ( x ); while x <> 0 do begin if pr = nil then begin new( g ); g^.duom := x; g^.kitas := nil; pr := g; pab := g; readln( x ); end else begin new( g ); g^.duom := x; g^.kitas := nil; pab^.kitas := g; pab := g; readln( x ); end end; writeln('Ñïèñîê óñïåøíî ñîçäàí'); end; Procedure DelElemPos(var spis1:sar;posi:integer); var i:integer; tmp:sar; begin if posi<1 then exit; if spis1=nil then begin Write('‘¯¨á®ª ¯ãáâ'); exit end; i:=1; tmp:=spis1; while (tmp<>nil) and (i<>posi) do begin tmp:=tmp^.kitas; inc(i) end; if tmp=nil then begin Writeln('«¥¬¥*â* á ¯®à浪®¢ë¬ *®¬¥à®¬ ' ,posi, ' *¥â ¢ ᯨ᪥.'); writeln('‚ ᯨ᪥ ¢á¥£® ' ,i-1, ' í«¥¬¥*â*(®¢).'); exit end; DelElemPos(spis1,posi); Writeln('«¥¬¥*â ã¤*«ñ*.'); end; procedure Spausdinti( pr : sar ); var s : sar; begin writeln('Âûâîäèì ñïèñîê:' ); s := pr; while s <> nil do begin write( s^.duom, ' '); s := s^.kitas; end; writeln; end; procedure Naikinti_sar( var pr, pab : sar ); var s : sar; begin writeln('Óäàëÿåì ñïèñîê ñ êîíöà.'); while pr <> nil do begin s := pr; if pab <> pr then begin while s^.kitas <> pab do s := s^.kitas; writeln(' Óäàëÿåì ', s^.kitas^.duom); pab := s; dispose( s^.kitas ); end else begin writeln(' Óäàëÿåì ïåðâûé: ', s^.duom); dispose( s ); pr := nil; pab := nil; end; end; end; var pradzia, pabaiga : sar; begin Sukurti_sar ( pradzia, pabaiga ); Spausdinti ( pradzia ); Naikinti_sar ( pradzia, pabaiga); readln; end.
Скорее всего неправильно написана процедура удаления. Помогите пожалуйста написать процедуру удаления элемента из списка по номеру, который вводится с клавиатуры.
Member
Статус: Не в сети Регистрация: 20.03.2011 Откуда: Москва
dwade писал(а):
Psilon, dlvtd спасибо.
Тут возникла ещё 1 проблема. Задача: Из однонаправленного списка удалить элемент, указанного номера. Программу написал, но у меня она игнорирует одну процедуру, а именно самую главную - выбрать номер элемента, который нужно удалить. Все процедуры работают, а 1 просто пропускает\игнорирует.
спойлер
Код:
program sukurti_sarasa; uses crt; type sar = ^el; el = record duom : integer; kitas : sar; end; procedure Sukurti_sar ( var pr, pab : sar ); var g : sar; x : integer; begin pr := nil; pab := nil; writeln('Ñîçäà¸ì ñïèñîê. Ââåäèòå öåëûå ÷èñëà.'); writeln('Æåëàÿ çàêîí÷èòü, ââåäèòå 0.'); readln ( x ); while x <> 0 do begin if pr = nil then begin new( g ); g^.duom := x; g^.kitas := nil; pr := g; pab := g; readln( x ); end else begin new( g ); g^.duom := x; g^.kitas := nil; pab^.kitas := g; pab := g; readln( x ); end end; writeln('Ñïèñîê óñïåøíî ñîçäàí'); end; Procedure DelElemPos(var spis1:sar;posi:integer); var i:integer; tmp:sar; begin if posi<1 then exit; if spis1=nil then begin Write('‘¯¨á®ª ¯ãáâ'); exit end; i:=1; tmp:=spis1; while (tmp<>nil) and (i<>posi) do begin tmp:=tmp^.kitas; inc(i) end; if tmp=nil then begin Writeln('«¥¬¥*â* á ¯®à浪®¢ë¬ *®¬¥à®¬ ' ,posi, ' *¥â ¢ ᯨ᪥.'); writeln('‚ ᯨ᪥ ¢á¥£® ' ,i-1, ' í«¥¬¥*â*(®¢).'); exit end; DelElemPos(spis1,posi); Writeln('«¥¬¥*â ã¤*«ñ*.'); end; procedure Spausdinti( pr : sar ); var s : sar; begin writeln('Âûâîäèì ñïèñîê:' ); s := pr; while s <> nil do begin write( s^.duom, ' '); s := s^.kitas; end; writeln; end; procedure Naikinti_sar( var pr, pab : sar ); var s : sar; begin writeln('Óäàëÿåì ñïèñîê ñ êîíöà.'); while pr <> nil do begin s := pr; if pab <> pr then begin while s^.kitas <> pab do s := s^.kitas; writeln(' Óäàëÿåì ', s^.kitas^.duom); pab := s; dispose( s^.kitas ); end else begin writeln(' Óäàëÿåì ïåðâûé: ', s^.duom); dispose( s ); pr := nil; pab := nil; end; end; end; var pradzia, pabaiga : sar; begin Sukurti_sar ( pradzia, pabaiga ); Spausdinti ( pradzia ); Naikinti_sar ( pradzia, pabaiga); readln; end.
Мой вам совет: 1) Делать программы в консольном режиме Дельфи XE2 (Если надо я вам в пм кину), где ни крокозябр нет, и интерфейс удобнее, сравнивая с дельфи 7, с турбопаскалем я вообще молчу. 2) Поправить крокозябры вроде описанных выше "writeln('Ñîçäà¸ì ñïèñîê. Ââåäèòå öåëûå ÷èñëà.');" 3) давать нормальные имена переменным, желательно на английском, я нифига не понимаю, что делает процедуру Sukurti_sar от параметров pradzia, pabaiga, не заглядывая в код. Мало ли, кто будет сопровождать ваш код в дальнейшем, привыкайте к интернационализации своего кода. 4) Пожалуйста форматируйте текст, а то стену читать нереально.
Я бы с удовольствием помог, но разбираться в этом слишком долго. Приведите в порядок текст и вам гораздо быстрее и с большим удовольствием помогут, чем разбираясь в этом месиве.
P.S. 5) большой объем кода убирайте под спойлер
_________________ I would tell you a joke about UDP, but you probably wouldn't get it.
Psilon, спасибо за советы. Вот программа, которую я написал:
спойлер
Код:
program spisok; uses crt; type TList = ^el; el = record danie : integer; next : TList; end;
procedure create_list ( var nacalo , konec : TList ); var g : TList; x : integer; begin nacalo := nil; konec := nil; writeln('Создаём список. Введите целые числа.'); writeln('Желая закончить, введите 0.'); readln ( x ); while x <> 0 do begin if nacalo = nil then begin new( g ); g^.danie := x; g^.next := nil; nacalo := g; konec := g; readln( x ); end else begin new( g ); g^.danie := x; g^.next := nil; konec^.next := g; konec := g; readln( x ); end end; writeln('Список успешно создан.'); end;
procedure print_list( nacalo : TList ); var s : TList; begin writeln('Вводим список:' ); s := nacalo; while s <> nil do begin write( s^.danie, ' '); s := s^.next; end; writeln; end;
procedure remove_list( var nacalo, konec : TList ); var s : TList; begin writeln('Удаляем список с конца.'); while nacalo <> nil do begin s := nacalo; if konec <> nacalo then begin while s^.next <> konec do s := s^.next; writeln(' Удаляем ', s^.next^.danie); konec := s; dispose( s^.next ); end else begin writeln(' Удаляем первый: ', s^.danie); dispose( s ); nacalo := nil; konec := nil; end; end; end;
Мне нужно в неё вставить ещё одну процедуру, а именно процедуру удаления элемента из списка по индексу, который вводится с клавиатуры. Помогите написать её, а то я не знаю как.
Member
Статус: Не в сети Регистрация: 20.03.2011 Откуда: Москва
dwade получайте, готовый код, правда там кучу всего дорабатывать надо (например, если вместо числа вводят буквы прога будет просто вылетать):
код
Код:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res} uses system.sysutils; type TList = ^el; el = record danie : integer; next : TList; prev : TList; end;
var a:(Create,Print,Remove,SelectDel,Exit); b:char;
procedure create_list ( var nacalo , konec : TList ); var g : TList; x : integer; begin nacalo := nil; konec := nil; writeln('Создаём список. Введите целые числа.'); writeln('Желая закончить, введите 0.'); readln( x ); while x <> 0 do begin if nacalo = nil then begin new( g ); g^.danie := x; g^.next := nil; g^.prev := nil; nacalo := g; konec := g; readln( x ); end else begin new( g ); g^.danie := x; g^.next := nil; konec^.next := g; g^.prev:=konec; konec := g; readln( x ); end; end; writeln('Список успешно создан.'); end;
procedure print_list( nacalo : TList ); var s : TList; begin writeln('Вводим список:' ); s := nacalo; while s <> nil do begin write( s^.danie, ' '); s := s^.next; end; writeln; end;
procedure remove_list( var nacalo, konec : TList ); var s : TList; begin writeln('Удаляем список с конца.'); while nacalo <> nil do begin s := nacalo; if konec <> nacalo then begin while s^.next <> konec do s := s^.next; writeln(' Удаляем ', s^.next^.danie); konec := s; dispose( s^.next ); end else begin writeln(' Удаляем первый: ', s^.danie); dispose( s ); nacalo := nil; konec := nil; end; end; end;
var nacalo1 , konec1 : TList;
procedure SelectiveDel(var nacalo:Tlist); var counter,i:Integer; target:TList; begin writeln('Введите номер удаляемого элемента'); readln(counter); for i := 1 to counter-2 do nacalo:=nacalo^.next; target:=nacalo^.next; nacalo^.next:=target^.next; nacalo:=nacalo^.next; nacalo^.prev:=target^.prev; while nacalo^.prev<>nil do nacalo := nacalo^.prev; dispose(target); end;
begin a:=exit; repeat writeln('List operations: Create=C|Print=P|Remove=R|SelectiveDelete=S|Exit=Any other key'); readln(b); b:=uppercase(b)[1]; a:=Exit; case b of 'C': a:=create; 'P': a:=print; 'R': a:=remove; 'E': a:=exit; 'S': a:=SelectDel; end; case a of Create: create_list ( nacalo1 , konec1 ); Print: print_list ( nacalo1 ); Remove: remove_list ( nacalo1 , konec1 ); SelectDel: SelectiveDel(nacalo1); end; until a=Exit; Writeln('Для выхода нажмите Enter'); readln; end.
Там могут быть некоторые проблемы с библиотеками (у меня стоит XE2), так что экзешник на всяк скину еще: http://rghost.ru/36955524
А этого можно избежать уже примерно так:
код
Код:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res} uses system.sysutils; type TList = ^el; el = record danie : integer; next : TList; prev : TList; end;
var a:(Create,Print,Remove,SelectDel,Exit); b:char;
procedure create_list ( var nacalo , konec : TList ); var g : TList; x : integer; buf:string; flag:boolean; begin nacalo := nil; konec := nil; flag:=true; writeln('Создаём список. Введите целые числа.'); writeln('Желая закончить, введите любую букву и/или нажмите enter.'); try readln( x ); except writeln('Список не был создан'); flag:=false; end; if flag then begin repeat if nacalo = nil then begin new( g ); g^.danie := x; g^.next := nil; g^.prev := nil; nacalo := g; konec := g; readln( buf ); end else begin new( g ); g^.danie := x; g^.next := nil; konec^.next := g; g^.prev:=konec; konec := g; readln( buf ); end; try x:=StrToInt(buf); except break; end; until false; writeln('Список успешно создан.'); end; end;
procedure print_list( nacalo : TList ); var s : TList; begin writeln('Вводим список:' ); s := nacalo; while s <> nil do begin write( s^.danie, ' '); s := s^.next; end; writeln; end;
procedure remove_list( var nacalo, konec : TList ); var s : TList; begin writeln('Удаляем список с конца.'); while nacalo <> nil do begin s := nacalo; if konec <> nacalo then begin while s^.next <> konec do s := s^.next; writeln(' Удаляем ', s^.next^.danie); konec := s; dispose( s^.next ); end else begin writeln(' Удаляем первый: ', s^.danie); dispose( s ); nacalo := nil; konec := nil; end; end; end;
var nacalo1 , konec1 : TList;
procedure SelectiveDel(var nacalo:Tlist); var counter,i:Integer; target:TList; begin writeln('Введите номер удаляемого элемента'); readln(counter); for i := 1 to counter-2 do nacalo:=nacalo^.next; target:=nacalo^.next; nacalo^.next:=target^.next; nacalo:=nacalo^.next; nacalo^.prev:=target^.prev; while nacalo^.prev<>nil do nacalo := nacalo^.prev; dispose(target); end;
begin a:=exit; repeat writeln('List operations: Create=C|Print=P|Remove=R|SelectiveDelete=S|Exit=Any other key'); readln(b); b:=uppercase(b)[1]; a:=Exit; case b of 'C': a:=create; 'P': a:=print; 'R': a:=remove; 'E': a:=exit; 'S': a:=SelectDel; end; case a of Create: create_list ( nacalo1 , konec1 ); Print: print_list ( nacalo1 ); Remove: remove_list ( nacalo1 , konec1 ); SelectDel: SelectiveDel(nacalo1); end; until a=Exit; Writeln('Для выхода нажмите Enter'); readln; end.
http://rghost.ru/36958029 хотя у вас односвязные списки должны быть, тогда надо процедуру немного переделать, нужно передавать 2 параметра (начала и конца), присвоить концу начало а потом работать похожим образом. Попробуйте для тренировки сами переделать. Но на моей практике односвязный список это куча геморроя без пользы. Двусвязный, как видно выше, гораздо удобнее. Хотя если преподаватель упертый и вы его не переубедите немного изменить задание (с бесполезного на простое) то придется вам подумать. Подсказку, как переделать, я дал
_________________ I would tell you a joke about UDP, but you probably wouldn't get it.
dwade получайте, готовый код, правда там кучу всего дорабатывать надо (например, если вместо числа вводят буквы прога будет просто вылетать):
код
Код:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res} uses system.sysutils; type TList = ^el; el = record danie : integer; next : TList; prev : TList; end;
var a:(Create,Print,Remove,SelectDel,Exit); b:char;
procedure create_list ( var nacalo , konec : TList ); var g : TList; x : integer; begin nacalo := nil; konec := nil; writeln('Создаём список. Введите целые числа.'); writeln('Желая закончить, введите 0.'); readln( x ); while x <> 0 do begin if nacalo = nil then begin new( g ); g^.danie := x; g^.next := nil; g^.prev := nil; nacalo := g; konec := g; readln( x ); end else begin new( g ); g^.danie := x; g^.next := nil; konec^.next := g; g^.prev:=konec; konec := g; readln( x ); end; end; writeln('Список успешно создан.'); end;
procedure print_list( nacalo : TList ); var s : TList; begin writeln('Вводим список:' ); s := nacalo; while s <> nil do begin write( s^.danie, ' '); s := s^.next; end; writeln; end;
procedure remove_list( var nacalo, konec : TList ); var s : TList; begin writeln('Удаляем список с конца.'); while nacalo <> nil do begin s := nacalo; if konec <> nacalo then begin while s^.next <> konec do s := s^.next; writeln(' Удаляем ', s^.next^.danie); konec := s; dispose( s^.next ); end else begin writeln(' Удаляем первый: ', s^.danie); dispose( s ); nacalo := nil; konec := nil; end; end; end;
var nacalo1 , konec1 : TList;
procedure SelectiveDel(var nacalo:Tlist); var counter,i:Integer; target:TList; begin writeln('Введите номер удаляемого элемента'); readln(counter); for i := 1 to counter-2 do nacalo:=nacalo^.next; target:=nacalo^.next; nacalo^.next:=target^.next; nacalo:=nacalo^.next; nacalo^.prev:=target^.prev; while nacalo^.prev<>nil do nacalo := nacalo^.prev; dispose(target); end;
begin a:=exit; repeat writeln('List operations: Create=C|Print=P|Remove=R|SelectiveDelete=S|Exit=Any other key'); readln(b); b:=uppercase(b)[1]; a:=Exit; case b of 'C': a:=create; 'P': a:=print; 'R': a:=remove; 'E': a:=exit; 'S': a:=SelectDel; end; case a of Create: create_list ( nacalo1 , konec1 ); Print: print_list ( nacalo1 ); Remove: remove_list ( nacalo1 , konec1 ); SelectDel: SelectiveDel(nacalo1); end; until a=Exit; Writeln('Для выхода нажмите Enter'); readln; end.
Там могут быть некоторые проблемы с библиотеками (у меня стоит XE2), так что экзешник на всяк скину еще: http://rghost.ru/36955524
А этого можно избежать уже примерно так:
код
Код:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res} uses system.sysutils; type TList = ^el; el = record danie : integer; next : TList; prev : TList; end;
var a:(Create,Print,Remove,SelectDel,Exit); b:char;
procedure create_list ( var nacalo , konec : TList ); var g : TList; x : integer; buf:string; flag:boolean; begin nacalo := nil; konec := nil; flag:=true; writeln('Создаём список. Введите целые числа.'); writeln('Желая закончить, введите любую букву и/или нажмите enter.'); try readln( x ); except writeln('Список не был создан'); flag:=false; end; if flag then begin repeat if nacalo = nil then begin new( g ); g^.danie := x; g^.next := nil; g^.prev := nil; nacalo := g; konec := g; readln( buf ); end else begin new( g ); g^.danie := x; g^.next := nil; konec^.next := g; g^.prev:=konec; konec := g; readln( buf ); end; try x:=StrToInt(buf); except break; end; until false; writeln('Список успешно создан.'); end; end;
procedure print_list( nacalo : TList ); var s : TList; begin writeln('Вводим список:' ); s := nacalo; while s <> nil do begin write( s^.danie, ' '); s := s^.next; end; writeln; end;
procedure remove_list( var nacalo, konec : TList ); var s : TList; begin writeln('Удаляем список с конца.'); while nacalo <> nil do begin s := nacalo; if konec <> nacalo then begin while s^.next <> konec do s := s^.next; writeln(' Удаляем ', s^.next^.danie); konec := s; dispose( s^.next ); end else begin writeln(' Удаляем первый: ', s^.danie); dispose( s ); nacalo := nil; konec := nil; end; end; end;
var nacalo1 , konec1 : TList;
procedure SelectiveDel(var nacalo:Tlist); var counter,i:Integer; target:TList; begin writeln('Введите номер удаляемого элемента'); readln(counter); for i := 1 to counter-2 do nacalo:=nacalo^.next; target:=nacalo^.next; nacalo^.next:=target^.next; nacalo:=nacalo^.next; nacalo^.prev:=target^.prev; while nacalo^.prev<>nil do nacalo := nacalo^.prev; dispose(target); end;
begin a:=exit; repeat writeln('List operations: Create=C|Print=P|Remove=R|SelectiveDelete=S|Exit=Any other key'); readln(b); b:=uppercase(b)[1]; a:=Exit; case b of 'C': a:=create; 'P': a:=print; 'R': a:=remove; 'E': a:=exit; 'S': a:=SelectDel; end; case a of Create: create_list ( nacalo1 , konec1 ); Print: print_list ( nacalo1 ); Remove: remove_list ( nacalo1 , konec1 ); SelectDel: SelectiveDel(nacalo1); end; until a=Exit; Writeln('Для выхода нажмите Enter'); readln; end.
http://rghost.ru/36958029 хотя у вас односвязные списки должны быть, тогда надо процедуру немного переделать, нужно передавать 2 параметра (начала и конца), присвоить концу начало а потом работать похожим образом. Попробуйте для тренировки сами переделать. Но на моей практике односвязный список это куча геморроя без пользы. Двусвязный, как видно выше, гораздо удобнее. Хотя если преподаватель упертый и вы его не переубедите немного изменить задание (с бесполезного на простое) то придется вам подумать. Подсказку, как переделать, я дал
Psilon, большое спасибо за помощь. Вот только почему у меня показывает:
Код:
system.sysutils;
Код:
Can't find unit SYSTEM
Также хотел спросить. Вы сделали, чтоб процедуры вызывались буквами клавиш. А чтоб они просто сами вызывались, то нужно как-то так:
Member
Статус: Не в сети Регистрация: 20.03.2011 Откуда: Москва
Еще раз говорю, я программирую в Rad studio XE2, там библиотеки по-другому называются немного. И не во всем они хороши (например если бы был обработчик readkey, как в дельфи 7 или турбо паскале, то было бы гораздо лучше: можно было бы настроить выход по эскейпу и прочие интересные штуки, ну и в конце readkey>>readln (в последней строке)). Но не все коту масленица, в остальном система замечательна (а если не работать в консоле а в ООП ваще шик). Так что все из-за различия версий...
_________________ I would tell you a joke about UDP, but you probably wouldn't get it.
Народ выручайте Задача: Составить программу преобразующую во входном тексте (до 60 символом длиной) точку на слово ТЧК, а запятую на ЗПТ, сцепленые пробелы на один пробел и подсчитывающую в преобразованном тексте количество символов, исключая пробелы. Результат не выводит.....поправьте если сможете срочняк надо...
program A3; uses crt; const znaki:array[1..3]of char=('.',',',' '); zn=['.',',',' ']; yn=['y','Y','n','N']; var a:array[1..60]of char; i,j:word; b,tchk,zpt:char; c:byte; begin writeln('avto zapolnenie massiva? y/n'); readln(b); if not(b in yn) then begin writeln('vveden neverniy simvol',b); writeln('avto zapolnenie massiva? y/n'); readln(b); end else if (b='y') or (b='Y') then begin i:=1; randomize; while i<60 do begin c:=1+random(3); for j:=1 to c do begin a[i]:=char(122-random(25)); inc(i); end; if c <>3 then for j:=c+1 to 3 do begin a[i]:=' '; inc(i); end; a[i]:=znaki[c]; inc(i); end; end else for i:=1 to 60 do read (a[i]); clrscr; writeln('ishodniy massiv'); for i:=1 to 60 do write (a[i]); writeln; writeln('rezultat'); i:=1; while i<=59 do if (a[i]=' ') then begin while a[i]=' ' do inc(i); if (a[i] in zn) then begin write(a[i]); inc(i); end else write(' '); end; while i<=59 do if (a[i]='.') then begin a[i]:=tchk; inc(i); end; if (a[i]=',') then begin a[i]:=zpt; inc(i); end else begin write(a[i]); inc(i); end; readln; end.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения