Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
 Аватар для Illania
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 33

Переделать прогу с использованием рекурсии

16.10.2009, 17:09. Показов 1391. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть несложная программка, выводящая в выходной файл(res.out) троих самых молодых мужчин питерцев (символы m,p в списке) из списка в 10 человек(входной файл dan1.inp). Нужно переделать ее с рекурсивными процедурами. Помогите пожалуйста, если не сложно!
Входной файл dan1.inp:
ivanov t.t. 2000 p m
sidorov r.t. 1980 p m
normanov r.r. 1987 m m
kozlova a.p. 1977 s z
niminova s.t. 1964 p z
krestenko e.v. 1988 n z
sidorenko u.r. 2007 p m
denisova e.s. 1991 m z
malahov p.d. 2002 p m
makarov f.o. 2005 p m


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
56
57
58
59
60
Program pr2;
 
type
 tt=ARRAY[1..10] OF string[29];
var
   h, a, b, i: integer;
   spisok1:tt;
   inp, out: text;
 
procedure Sortirovka(var j, i: integer;var spisok:tt);
          VAR
          q,w: integer;
          place: string;
          BEGIN
               q:=j;
               w:=i;
               FOR q:=1 TO 10 DO
               BEGIN
               FOR w:=q+1 TO 10 DO
               BEGIN
               IF copy(spisok[q],22,4)<copy(spisok[w],22,4) THEN {сравниваем символы года с 22-го по 25-ый}
               BEGIN
 
               place:=spisok[w];
               spisok[w]:=spisok[q];
               spisok[q]:=place;
 
               END;
               END;
               END;
          END;
 
BEGIN
 
   assign(inp,'dan1.inp');
   assign(out,'res.out');
   reset(inp);
   rewrite(out);
  
   FOR i:=1 TO 10 DO
   readln(inp, spisok1[i]);
 
   Sortirovka(a,b,spisok1);
 
   
   FOR i:=1 TO 10 DO
   BEGIN
   IF (copy(spisok1[i],27,1)='p') AND (copy(spisok1[i],29,1)='m') THEN
   BEGIN
        writeln(out, spisok1[i]);
        h:=h+1;
        IF h=3 THEN
        BEGIN
        break;
        END;
   END;
   END;
   close(inp);
   close(out);
END.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.10.2009, 17:09
Ответы с готовыми решениями:

Переделать программу с использованием рекурсии
как сделать с помощью рекурсии? #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;windows.h&gt; int main() { ...

Определить сумму элементов данного массива с использованием цикла и с использованием рекурсии
Привет всем форумчанам! Прошу помочь мне разобраться с рекурсией: Нужно определить сумму элементов данного массива с использованием...

Переделать прогу
Вот дана прога, которая переводит римские числа в арабские: Program Lab_3; Uses crt; Const Rome : array of...

11
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
16.10.2009, 18:40
Цитата Сообщение от Illania Посмотреть сообщение
Нужно переделать ее с рекурсивными процедурами. Помогите пожалуйста, если не сложно!
В смысле сортировку рекурсивно написать, типа "быстрой" сортировки?
0
 Аватар для Illania
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 33
16.10.2009, 18:47  [ТС]
Не обязательно, просто любой фрагмент кода переделать как рекурсивную процедуру
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
16.10.2009, 19:07
Не обязательно, просто любой фрагмент кода переделать как рекурсивную процедуру
Извините, но после столь глубокомысленного изречения, дальше продолжать бесуду не хочется.
А программа Ваша вообще работает?
Вот например в этой строке
ivanov t.t. 2000 p m какие символы стоят на позициях 27 и 29?
0
 Аватар для Illania
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 33
16.10.2009, 19:28  [ТС]
27 - p, 29 - m

Добавлено через 1 минуту
Я имела ввиду один из циклов переделать в рекурсивную процедуру, ясно, что не любой фрагмент кода
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
16.10.2009, 19:50
Цитата Сообщение от Illania Посмотреть сообщение
27 - p, 29 - m
А вы посчитайте символы в приведенных Вами строкам, в первой всего 20 символов, с чего бы я спрашивал? Вероятно при публикации убрались лишние пробелы, нужно было либо в теги помемтить эти строки, а лучше приложить сам файл (расширенный режим, кнопка в тулбаре в виде канцелярской скрепки). Кроме того
Цитата Сообщение от Illania Посмотреть сообщение
assign(inp,'dan1.inp');
это что за расширение файла? Может .in
А рекурсией проще всего и целесообразнее сортировку сделать, тем более она и так отдельной процедурой, а выдумывать еще процедуру ввода или вывода с рекурсией, это изврат.

Добавлено через 1 минуту
Мне нужно точно знать на какой позиции какой стоит символ, и чтоб все строки были по одному образцу, а не как у Вас получилось в сообщении, поэтому лучше приложите файл.
0
 Аватар для Illania
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 33
16.10.2009, 20:10  [ТС]
Я не знаю, что за расширение inp, но нам препод в политехе так показывал. Можно заменить его на txt, это не принципиально. А как вы могли бы предложить переделать сортировку с рекурсией?
Вложения
Тип файла: txt DAN1.txt (308 байт, 15 просмотров)
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
16.10.2009, 21:36
Файл входной с расширением .in значит input , а выходной .out значит output.
Сделал рекурсивную сортировку, метод "быстрой" сортировки, теории по ней в интернете навалом, немного затупил со строками, да еще по убыванию, но справился.
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
Program pr2;
uses crt;
type
 tt=ARRAY[1..10] OF string[29];
var
   h, a, b, i: integer;
   spisok1:tt;
   inp, out: text;
procedure Sortirovka(l,r:integer);
VAR i,j,m: integer;
    place1:string[4];
    place2:string[29];
begin
i:=l;
j:=r;
m:=(l+r) div 2;
place1:=copy(spisok1[m],22,4);
repeat
 while copy(spisok1[i],22,4)>place1 do inc(i);
 while copy(spisok1[j],22,4)<place1 do dec(j);
 if i<=j then
  begin
   place2:=spisok1[i];
   spisok1[i]:=spisok1[j];
   spisok1[j]:=place2;
   inc(i);
   dec(j);
  end;
until i>j;
if l<j then Sortirovka(l,j);
if i<r then Sortirovka(i,r);
end;
 
BEGIN
clrscr;
   assign(inp,'dan1.in');
   assign(out,'res.out');
   reset(inp);
   rewrite(out);
   FOR i:=1 TO 10 DO
   readln(inp, spisok1[i]);
   Sortirovka(1,10);
   FOR i:=1 TO 10 DO
   IF (copy(spisok1[i],27,1)='p') AND (copy(spisok1[i],29,1)='m') THEN
     BEGIN
      writeln(out, spisok1[i]);
      h:=h+1;
      IF h=3 THEN break;
    END;
   close(inp);
   close(out);
   write('Programma vypolnena!');
   readln
END.
1
 Аватар для Illania
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 33
16.10.2009, 22:11  [ТС]
Спасибо огромное! Теперь мне уже самой осталось разобраться, что тут к чему, ну думаю, что справлюсь!
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
16.10.2009, 22:12
Наберите в Гугле Быстрая сортировка и почитайте 2-3 статьи.
0
 Аватар для Illania
0 / 0 / 0
Регистрация: 12.10.2009
Сообщений: 33
16.10.2009, 22:32  [ТС]
А сортировка Хоора и быстрая сортировка это одно и то же?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
16.10.2009, 22:33
Да.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.10.2009, 22:33
Помогаю со студенческими работами здесь

Нужно переделать прогу!
Нужно переписать код, чтобы не было меток)))) #include&lt;math.h&gt; #include&lt;stdio.h&gt; #include&lt;alloc.h&gt; #include&lt;conio.h&gt; ...

Переделать прогу. Серия
Даны целые числа K, N, а также K наборов целых чисел по N элементов в каждом наборе. Для каждого набора вывести номер его первого...

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

Как переделать прогу из С++ в С#
Только начал изучать C#?Нужно в переделать из С++ Вот прога: #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include...

Как переделать прогу??
Вот программа на языке си++. как её переделать в си??? там надо вроде cout изменить. помогите!условие: вывести 10 случайных чисел в...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru