Часовой пояс: UTC + 3 часа




Куратор(ы):   Lord_of_Darkness   



Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 49 из 50<  1 ... 46  47  48  49  50  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 
Прилепленное (важное) сообщение

Убедительная просьба ко всем, кто выкладывает исходники:
1. Обязательно пользуйтесь тэгом code (иначе очень трудно читать)
2. Старайтесь делать отступы

Если вы хотите чтобы вам помогли в написании программы, внятно излагайте задание!

Прежде чем задать вопрос, воспользуйтесь учебником


Возможно, что нужная вам программа уже написана, поэтому советую просмотреть список здесь и здесь

Отредактировано куратором: Lord_of_Darkness. Дата: 07.07.2006 19:36



Партнер
 

Junior
Статус: Не в сети
Регистрация: 30.11.2011
Не получается запустить программу не поможешь?
в начале еще такая ерунда была она нужна?
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;
 
End;
If (find = true) And (l = n) Then
Begin


 

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.



Но не пашет.


 

Junior
Статус: Не в сети
Регистрация: 09.07.2009
Откуда: РФ
Prin53 писал(а):
                  for i:=N downto i do

Prin53 писал(а):
Но не пашет.

Тут должна быть j на месте i, как я понимаю.


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
dlvtd писал(а):
Тут должна быть j на месте i
1. "Тут" 2 i.
2. В этой программе нужно исправлять в нескольких местах (проще написать заново).
3. Судя по заданию и датам, уже не актуально.


 

Junior
Статус: Не в сети
Регистрация: 09.07.2009
Откуда: РФ
maco писал(а):
1. "Тут" 2 i.

Действительно. Не заметил. :?:
maco писал(а):
2. В этой программе нужно исправлять в нескольких местах (проще написать заново).

Короткий вариант.
Код:
for i:=1 to N do
  for j:=i downto 1 do
    begin
       A[j,i]:=N+j-i;
    end;

maco писал(а):
3. Судя по заданию и датам, уже не актуально.

Не факт, но очень может быть.


 

Member
Статус: Не в сети
Регистрация: 04.10.2004
dlvtd писал(а):
Короткий вариант.
Две строчки - лишние :).
Код:
A[i,j]:=N+j-i;
Так ближе к тому, что надо получить :).
P.S. Работает только в том случае, когда элементы массива проинициализированы нулями.


 

Помогите с заданием. Дан массив из N чисел. Определить количество чисел, превышающих число 5. Найти сумму этих чисел.


 

Member
Статус: Не в сети
Регистрация: 07.07.2011
Откуда: Уфа
Фото: 86
Здравствуйте! Помогите решить задачи:

1) Дано целое число. Определить! оканчивается ли оно цифрой 7 :oops:

2) Найти: все двузначные числа, сумма квадратов цифр которых делится на 13; :oops:

Спасибо :-)

_________________
Overclockers.ru forever


 

Куратор темы
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
1.
Код:
if x - 10*trunc(x/10) = 7 then

2. for по x от 10 до 99, сумма по тому же принципу
Код:
sum = (x - 10*trunc(x/10)) {вторая цифра} + trunc(x/10) {первая}

потом sum mod 13 сделать

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Junior
Статус: Не в сети
Регистрация: 29.01.2012
Доброго времени суток.
Помогите доделать программу.
Условие:
Напишите процедуру/функцию, которая все цифры в слове, заменяет на первую букву этого слова.
Доп. условия:
  • Если в слове нету букв, то слово просто переписывается.
  • Если в слове нету цифр, то слово просто переписывается.
  • Слово может состоять из всех знаков, пробел разделяет слова.
  • Программа должна переделывать слова во всех строках, если текст имеет несколько строк.
  • Если файл с текстом пуст, то программа должна показать соответствующее сообщение, о невозможности создание результатного файла.
  • Длина строки не больше 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;

Fchr - тип char


 

Junior
Статус: Не в сети
Регистрация: 29.01.2012
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.


 

Junior
Статус: Не в сети
Регистрация: 29.01.2012
Скорее всего неправильно написана процедура удаления. Помогите пожалуйста написать процедуру удаления элемента из списка по номеру, который вводится с клавиатуры.


 

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) большой объем кода убирайте под спойлер :ok:

_________________
I would tell you a joke about UDP, but you probably wouldn't get it.


 

Junior
Статус: Не в сети
Регистрация: 29.01.2012
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;

var nacalo1 , konec1 : TList;
begin
   create_list ( nacalo1 , konec1 );
   print_list ( nacalo1 );
   remove_list ( nacalo1 , konec1 );
   readln;
end.

Мне нужно в неё вставить ещё одну процедуру, а именно процедуру удаления элемента из списка по индексу, который вводится с клавиатуры. Помогите написать её, а то я не знаю как.

P.S. почему здесь нельзя редактировать сообщения?


 

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(&#39;Создаём список. Введите целые числа.&#39;);
   writeln(&#39;Желая закончить, введите 0.&#39;);
   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(&#39;Список успешно создан.&#39;);
end;

procedure print_list( nacalo : TList );
          var s : TList;
begin
   writeln(&#39;Вводим список:&#39; );
   s := nacalo;
   while s <> nil do
      begin
         write( s^.danie, &#39; &#39;);
         s := s^.next;
      end;
   writeln;
end;

procedure remove_list( var nacalo, konec : TList );
          var s : TList;
begin
   writeln(&#39;Удаляем список с конца.&#39;);
   while nacalo <> nil do
      begin
         s := nacalo;
         if konec <> nacalo
         then
            begin
               while s^.next <> konec do
               s := s^.next;
               writeln(&#39; Удаляем &#39;, s^.next^.danie);
               konec := s;
               dispose( s^.next );
            end
         else
            begin
               writeln(&#39; Удаляем первый: &#39;, 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(&#39;Введите номер удаляемого элемента&#39;);
  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(&#39;List operations: Create=C|Print=P|Remove=R|SelectiveDelete=S|Exit=Any other key&#39;);
   readln(b);
   b:=uppercase(b)[1];
   a:=Exit;
   case b of
   &#39;C&#39;: a:=create;
   &#39;P&#39;: a:=print;
   &#39;R&#39;: a:=remove;
   &#39;E&#39;: a:=exit;
   &#39;S&#39;: 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(&#39;Для выхода нажмите Enter&#39;);
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.


 

Junior
Статус: Не в сети
Регистрация: 29.01.2012
Psilon писал(а):
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(&#39;Создаём список. Введите целые числа.&#39;);
   writeln(&#39;Желая закончить, введите 0.&#39;);
   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(&#39;Список успешно создан.&#39;);
end;

procedure print_list( nacalo : TList );
          var s : TList;
begin
   writeln(&#39;Вводим список:&#39; );
   s := nacalo;
   while s <> nil do
      begin
         write( s^.danie, &#39; &#39;);
         s := s^.next;
      end;
   writeln;
end;

procedure remove_list( var nacalo, konec : TList );
          var s : TList;
begin
   writeln(&#39;Удаляем список с конца.&#39;);
   while nacalo <> nil do
      begin
         s := nacalo;
         if konec <> nacalo
         then
            begin
               while s^.next <> konec do
               s := s^.next;
               writeln(&#39; Удаляем &#39;, s^.next^.danie);
               konec := s;
               dispose( s^.next );
            end
         else
            begin
               writeln(&#39; Удаляем первый: &#39;, 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(&#39;Введите номер удаляемого элемента&#39;);
  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(&#39;List operations: Create=C|Print=P|Remove=R|SelectiveDelete=S|Exit=Any other key&#39;);
   readln(b);
   b:=uppercase(b)[1];
   a:=Exit;
   case b of
   &#39;C&#39;: a:=create;
   &#39;P&#39;: a:=print;
   &#39;R&#39;: a:=remove;
   &#39;E&#39;: a:=exit;
   &#39;S&#39;: 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(&#39;Для выхода нажмите Enter&#39;);
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


Также хотел спросить. Вы сделали, чтоб процедуры вызывались буквами клавиш. А чтоб они просто сами вызывались, то нужно как-то так:
Код:
var nacalo1 , konec1 : TList;
begin
   create_list ( nacalo1 , konec1 );
   print_list ( nacalo1 );
   SelectiveDel(nacalo1);
   remove_list ( nacalo1 , konec1 );
   readln;
end.


Препод у нас странный. Одним даёт односвязной список, другим двусвязной. Не поймёшь его :roll:


 

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.


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 985 • Страница 49 из 50<  1 ... 46  47  48  49  50  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan