Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.75/95: Рейтинг темы: голосов - 95, средняя оценка - 4.75
 Аватар для and1
4 / 4 / 0
Регистрация: 27.10.2009
Сообщений: 67

Определение количества абитуриентов, проживающих в городе Минске

30.10.2009, 23:03. Показов 21599. Ответов 123

Студворк — интернет-сервис помощи студентам
Всем доброго времени суток. Есть задание:
Используя динамические списки, написать программу формирования ведомости абитуриентов, сдавших вступительные экзамены в институт.

В программе должны присутствовать следующие процедуры:

1. Формирование динамического списка с элементами, содержащими следующие поля:
Ф.И.О. абитуриента, постоянное место жительства, оценки по физике, математике и русскому языку.
2. Вывод списка на экран;
3. Добавление элемента в список;
4. Удаление элемента из списка;
5. Поиск элемента списка по соответствующему полю;
6. Определение количества абитуриентов, проживающих в городе Минске и сдавших экзамены со средним баллом не ниже 4. Вывести их фамилии в алфавитном порядке.
7. Запись в файл и загрузка из файла.

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

Как другие писать не буду напишите мне программу и тому подобное, сам всегда программирование делал и делать буду... Вопрос вот в чем: с чего тут начинать, список этот к клавиатуры вводить или если разу фаил сделать то сразу из файла данные брать... Плиз подскажите....
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.10.2009, 23:03
Ответы с готовыми решениями:

Определить количество абитуриентов, проживающих в г Минске
Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О., адрес, оценки. Определить количество абитуриентов,...

Определить количество абитуриентов, проживающих в городе
Определить кол-во абитуриентов, проживающих в городе Грязовец и фамилии которых начинаються с буквы <П>. Ввод информации должен...

Определить количество абитуриентов, проживающих в г. Минске и сдавших экзамены со средним баллом
Добрый вечер,помогите с программой: Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит: Ф.И.О., адрес,...

123
 Аватар для and1
4 / 4 / 0
Регистрация: 27.10.2009
Сообщений: 67
12.11.2009, 00:15  [ТС]
Студворк — интернет-сервис помощи студентам
что-то совсем я в списках запутался скажите такой список можно сформировать вообще или я не в ту сторону шагаю:
Pascal
1
2
3
4
5
6
7
8
9
link = ^kom;
   kom  = record
             fio : string[30];
           adres : string[50];
             mat : integer;
             fiz : integer;
             rus : integer;
            next : link;
          end;
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
12.11.2009, 00:28
and1, можно а почему нет. просто тут нужно делать все по порядку, тогда и не запутаешься.
0
 Аватар для and1
4 / 4 / 0
Регистрация: 27.10.2009
Сообщений: 67
12.11.2009, 00:54  [ТС]
Цитата Сообщение от Inadequate Посмотреть сообщение
and1, можно а почему нет. просто тут нужно делать все по порядку, тогда и не запутаешься.
если не сложно примером наградить, туго списки идет с указателями

Добавлено через 10 минут
ладно пойду спать утро вечером мудренее....
0
Retired
7727 / 2559 / 671
Регистрация: 17.10.2009
Сообщений: 5,100
12.11.2009, 00:59
and1, я вам уже выкладывал в теме подобную работу... Почитайте еще раз внимательнее...
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
12.11.2009, 04:07
and1, А зачем Вы сразу начинаете с чего-то сложного? Вы начните с простого описания списка, например списка чисел:
Pascal
1
2
3
4
5
6
7
Type
 Tspisok=^vs;
 vs=record
    data:integer;
    next:Tspisok { в данном случае можно было написать:
    next:^vs; всё должно было бы быть в порядке}
  end;
Следующим шагом для Вас станет объявить переменную:
Pascal
1
2
3
4
5
var
  spisok,nach:Tspisok; {переменная spisok - будет рабочей переменной, 
  именно она будет "перемещаться" в памяти, 
  а nach -будет указывать на первый элемент списка, 
  что-бы нам не потерять данные из списка}
Ну а далее организуем заполнение нашего списка числами от 1 до 10:
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
begin
  for i:=1 to 10 do {Не забудьте объявить i в разделе var}
  begin
    { вот теперь возможны два варианта выделения памяти
      либо Getmem(tmp,sizeof(vs));
      либо new(tmp^.next);
      Следует запомнить что использовать надо какую-нибудь одну из них}
    if i=1 then
    begin
      New(spisok);
      nash:=spisok {надо "придумать" как запомнить первый элемент списка}
    end
    else
    begin
      New(spisok^.next); {для списков, стеков, деревьев и т.д. использую её, 
      т.к. у нас переменная next сразу связывается с адресом в памяти,
      где выделилась очередная переменная}
      {Но хочется заметить, что сам указатель "spisok" никуда не сместился,
       так что надо его "передвинуть" на новый элемент}
      spisok:=spisok^.next;
    end;
    spisok^.next:=nil; {Вот это очень важное действие! 
    Никогда не забывайте обнулить указатель на "следующий элемент"
    (здесь имеется ввиду предназначение данного указателя,а не сам элемент),
    не то может кончиться это всё плачевно}
    spisok^.data:=i; {собственно заносим сами данные}
    { рассмотрим строку "spisok^.data": 
     ^ этот знак указывает, что мы работаем с адресами памяти
      . указывает, что мы работает с записями(record)
      ну а дальше у нас переменные идут, тут всё ясно}
  end;
Ну и осталось просмотреть наши данные и освободить выделенную память:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  spisok:=nach; {"Ставим" наш указатель на первый элемент списка}
  {Я надеюсь Вы помните, что сейчас указатель 
  spisok^.next указывает на второй элемент списка}
  while spisok<>nil do {Пока список не будет указывать в "никуда",}
  begin                              {т.е. Nil="никуда","пустота"}
    write(spisok^.data, ' ');
    spisok:=spisok^.next {произошёл переход на следующий элемент}
  end;
  Writeln;
  {тепер следует освободить память, которую мы заняли под наш список}
  while nach<>Nil do
  begin
    spisok:=nach;
    nach:=nach^.next;
    dispose(spisok) {именно dispose, т.к. при выделении я использовал New.
    Если бы при выделении я использовал GetMem, то при освобождении
    следовало бы использовать FreeMem}
  end;
  readln
end.
Если после таких разъяснений вам останется что-то не понятно, то спрашивайте более точечно.

Примите во внимание, что написанные строки не компилировались.
0
3319 / 1381 / 110
Регистрация: 28.04.2009
Сообщений: 4,822
12.11.2009, 07:41
вот тебе мой пример БД.


{---Модуль---}

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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
unit base;
   INTERFACE
  Uses crt;
        type spisok=record
            nom:string;
            marka:string;
            famil:string;
            cvet:string;
              end;
FT= file of spisok;
    const parol='vova';
    Var a:ft;
        i,q,z:integer;
        s:real;
        d:string;
   Procedure Sozdanie (var a:ft);  {процедура создания списка}
   Procedure vyvod (var a:ft);     {процедура вывода списка}
   procedure delete (var a:ft);     {процедура удаленя}
   Procedure poisk (var a:ft);     {процедура поиска по номеру}
 
 
    IMPLEMENTATION
 
 {---------процедура создания списка--------}
 
Procedure Sozdanie (var a:ft);
Var i,j:integer;
    zk:spisok;
    ch:char;
begin
rewrite (a);
j:=1;
 while j<>10 do
          begin
          write ('Введите номер автомобиля ');
          readln (zk.nom);
          write ('Введите марку ');
          readln (zk.marka);
          write ('Введите фамилию');
          Readln (zk.famil);
          write ('Введите цвет автомобиля');
          readln (zk.cvet);
          write (a,zk);
          writeln ('Если конец записи нажмите 10');
      writeln ('Для продолжения нажмите любую цифру');
          readln (j);
          end;
close (a);
end;
 
{-------процедура вывода списка--------}
 
Procedure vyvod (var a:ft);
Var i:integer;
    zk:spisok;
begin
reset (a);
 writeln ('==================================================');
 writeln ('| №    |   Марка*     |   Фамилия     |   Цвет  |');
 writeln ('==================================================');
  while not eof(a) do
   begin
    read (a,zk);
    write ('|',zk.nom:6,'|');
    write ('|',zk.marka:9,'|');
    write ('|',zk.famil:6,'|');
    write ('|',zk.cvet:9,'|');
    writeln;
    writeln ('--------------------------------------------------');
   end;
 close (a);
end;
 
{----процедура удаления-------{у меня она правда Не корректно работает}}
 
procedure delete (var a:ft);
Var n,m:longint;
      i:byte;
      mas:array [1..20] of spisok;
begin
 i:=1;
 reset(a);
 writeln ('Введите номер записи для удаления');
 readln(n);
 m:=filesize(a)-n;
 seek (a,n);
 while not eof(a) do
           begin
            read (a,mas[i]);
            i:=i+1;
           end;
   close (a);
   reset (a);
   seek (a,n-1);
   truncate (a);
   close (a);
   reset (a);
   seek (a,n-1);
   for i:=1 to m do
    write (a,mas[i]);
end;
 
{----------процедура поиска по номеру--------}
 
Procedure poisk (var a:ft);
var i:integer;
    zk:spisok;
    name:string;
begin
reset (a);
 writeln ('Введите номер поиска* ');
 readln (name);
 writeln ('Список с заданным номером');
 writeln ('=================================');
 writeln ('| #| Марка*| Фамилия | Цвет|');
 writeln ('=================================');
 while not eof(a) do
 begin
  read (a,zk);
  if zk.nom=name then
  begin
    write ('|',zk.nom:6,'|');
    write ('|',zk.marka:9,'|');
    write ('|',zk.famil:6,'|');
    write ('|',zk.cvet:9,'|');
    writeln;
    writeln ('-------------------------------');
  end;
 end;
close(a);
end;
    END.


и сама программа

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
uses crt,base;
var ch:char;
 
begin
clrscr;
{--------ВВОд пароля-------}
 {       for q:=1 to 3 do
   begin
   textcolor(red);
        write('Введите пароль');
 
        readln(d);
      if d=parol then break
         else if q<>3 then
         begin
    writeln; writeln('Не верный пароль');
    continue;
    end;
    writeln;
    writeln('Вы исчерпали лимит ввода, программа заблокирована');
    writeln('Нажмите ENTER');
    readln;
    halt end;
     GotoXY(35,10);
    writeln('Правильно');
    readln;}
{----------создание меню---------} 
repeat;
 clrscr;
 assign(a,'fff');
 window(1,1,80,5);
     clrscr;
     TextColor(lightgreen);
        gotoxy(37,1);
     
writeln ('     МЕНЮ     ');
     gotoxy (1,2);
writeln ('F1:Создание');
        gotoxy(13,2);
writeln ('F2:Вывод списка*');
        gotoxy(30,2);
writeln ('F3:Удаление из списка*  ');
        gotoxy(52,2);
writeln ('F4:Поиск по номеру');
        gotoxy(72,2);
writeln ('ESC:Выход');
 
  ch:=readkey;
  case ch of
  #59:sozdanie (a);   {клавиша F1}
  #60:vyvod (a);      {клавиша F2}
  #61:delete(a);      {клавиша F3}
  #62:poisk (a);      {клавиша F4}
  #27:exit;           {клавиша ESC}
  end;
  until ch=#27;
  clrscr;
end.
0
Почетный модератор
 Аватар для Puporev
64320 / 47616 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
12.11.2009, 07:49
vovka, У человека проблемы со списками как структурами данных, на которые у Вас даже намека нет. То что Вы написали, просто назвали списком, но это не является списком, как структура данных.
0
 Аватар для and1
4 / 4 / 0
Регистрация: 27.10.2009
Сообщений: 67
12.11.2009, 11:49  [ТС]
vovka согласен мне списки нужны а не бд, так что трохи не в ту сторону, через бд тут делать нех....

Добавлено через 4 минуты
lexus_ilia, спс с цифрами разобрался и делал до этого такие програмки, не понятно именно заполнение вот такого списка, поэтому и нужен пример так как найти в нете не могу (
Pascal
1
2
3
4
5
6
7
8
9
link = ^kom;
   kom  = record
             fio : string[30];
           adres : string[50];
             mat : integer;
             fiz : integer;
             rus : integer;
            next : link;
          end;
0
 Аватар для Dnnn
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
12.11.2009, 13:32
при чем тут инет? и чем оно отличается от списка с целыми числами, кроме количества полей?
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
type link = ^kom;
       kom  = record
             fio : string[30]; adres : string[50];
             mat : integer;   fiz : integer; rus : integer;    
             next : link;
          end;
var spisok,nach:link; z: kom;  i, n: integer;
....
begin...
 - можно ввести кол-во элементов списка и заводить их потом в цикле 
 write('ВВедите кол-во элементов списка: '); readln(n);
 nach := nil; spisok:= nil;
 for i:=1  to n do
 begin writeln('Ввод ', i, ' элемента списка: ');
         writeln(' FIO ', z.fio);  writeln(' Adres ', z.adres);  
         write(' Оценки (мат, физика, русс-й) через пробел: '); readln(z.mat, z.fiz, z.rus);
         z.next := nil;  
         - все, это z добавляйте в список, выше уже писали
         if nach = nil then 
         begin new(nach); nach^ := z; spisok := nach; 
         end
         else new(spisok^.next); spisok:=spisok^.next; 
               spisok^ := z;
         end;
 end;
.................
1
 Аватар для and1
4 / 4 / 0
Регистрация: 27.10.2009
Сообщений: 67
12.11.2009, 21:20  [ТС]
Вывод списка у меня получился такой или можно как-то по другому??
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
spisok:=nach;
i:=0;
if spisok=nil then writeln('Список пуст!')
else
begin
  writeln('В листе содержится');
  while spisok<>nil do
  begin
      i:=i+1;
      writeln(i,') ',spisok^.fio,' ',spisok^.adres,' ',spisok^.mat,' ',spisok^.fiz,' ',spisok^.rus);
      spisok:=spisok^.next;
  end;
end;
0
0 / 0 / 0
Регистрация: 06.08.2014
Сообщений: 2
12.11.2009, 21:47
Можно и такой вывод....

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
procedure show;
var cur:Tlink;
          begin
          cur:=first;
          writeln(str:60);
          while cur<>nil do
                begin
                writeln(cur^.a.fio:30, cur^.a.x:3, cur^.a.y:3, cur^.a.z:3);
                cur:=cur^.u;
                end;
          writeln;
          end;

У меня вопрос другой: как можно определить куда вставлять в списке элемент( мне нада отсортировать по среднему балу студентов)....процедуры вставки до, после, в конец или начало я написа....а вот в зависимости чего их выбирать я что-то не догоняю...Зарание спасибо.
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
13.11.2009, 01:00
Цитата Сообщение от goof Посмотреть сообщение
как можно определить куда вставлять в списке элемент
Объясните зачем определять куда вставлять? Не проще ли сначало заполнить список, а потом его отсортировать?
0
 Аватар для and1
4 / 4 / 0
Регистрация: 27.10.2009
Сообщений: 67
13.11.2009, 01:43  [ТС]
подскажите в чем ошибка? при компиляции пишет ожидался оператор:
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
procedure print(nach : link);
var
  spisok:link;
  i:integer;
begin
spisok:=nach;
 i:=0;
 if spisok=nil then writeln('Список пуст!')
 else
 begin
   writeln('|------------------------------------------------------------------------------|');
   writeln('|Пор.|   Фамилия Имя Отчество  | Адрес постоянного места| Оценки по предметам: |');
   writeln('| №  |      абитуриента        |        жительства      |Матем.|Физика|Рус. яз.|');
   writeln('|--------------------------------------------------------------------=---------|');
   while spisok<>nil do
   begin
     i:=i+1;
     write('| ',i,')');
     gotoXY(6,whereY);write('| ',spisok^.fio);
     gotoXY(32,whereY);write('| ',spisok^.adres);
     gotoXY(57,whereY);write('|  ',spisok^.mat);
     gotoXY(64,whereY);write('|  ',spisok^.fiz);
     gotoXY(71,whereY);writeln('|   ',spisok^.rus,'    |');
     spisok:=spisok^.next;
   end;
 end;
end; { print }
и курсор стоит после слова procedure

Добавлено через 36 минут
Все сам разобрался end не все посчитал сори за панику
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
13.11.2009, 01:48
and1, Да ничего, ничего. Вы только как напишет готовую программу, выложите её, пусть все глянут.А то 4 страницы и из них можно лёгким движением сделать полторы, а так будет логическое окончание темы. Да и для остальных тоже приятно и полезно будет посмотреть на работу списков, бд, файлов.
0
 Аватар для and1
4 / 4 / 0
Регистрация: 27.10.2009
Сообщений: 67
13.11.2009, 02:57  [ТС]
не вопрос, выложу осталось посуте пару пунктов доделать, непонятно вот что: сделал создание списка и вывод его через процедуры и счас при выводе списка теряется первая строка даже и не знаю что не так сделал хотя вроде бы ничего не менял вот код:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
uses crt;
type link = ^kom;
       kom  = record
               fio : string[30];
             adres : string[50];
               mat : integer;
               fiz : integer;
               rus : integer;
              next : link;
          end;
 var
  spisok, nach : link;
  z : kom;
  i, n, menu : integer;
  
{Ввод списка с клавиатуры}
procedure create(var spisok, nach:link; var z : kom);
begin
   write('Введите кол-во элементов списка: ');
   readln(n);
   if n=0 then writeln('В списке не может быть 0 студентов!')
   else
   for i:=1  to n do
  begin
     writeln('Ввод ', i, ' элемента списка: ');
     write('Фамилия Имя Отчество: ');
     readln(z.fio);
     write('Адрес проживания: ');
     readln(z.adres);
     write('Оценки (мат, физика, русс-й) через пробел: ');
     readln(z.mat, z.fiz, z.rus);
     z.next := nil;
   if nach = nil then
   begin
     new(nach);
     nach^ := z;
     spisok := nach;
   end
   else
   begin
     new(spisok^.next);
     spisok:=spisok^.next;
     spisok^ := z;
   end;
  end;
end;{ create }
 
{вывод списка на экран }
procedure print(nach : link);
var
  spisok : link;
  i : integer;
begin
 clrscr;
 spisok:=nach;
 i:=0;
 if spisok=nil then writeln('Список пуст!')
 else
 begin
   write('|------------------------------------------------------------------------------|');
   write('|Пор.|   Фамилия Имя Отчество  | Адрес постоянного места| Оценки по предметам: |');
   write('| №  |      абитуриента        |        жительства      |Матем.|Физика|Рус. яз.|');
   write('|--------------------------------------------------------------------=---------|');
   while spisok<>nil do
   begin
     i:=i+1;
     write('| ',i,')');
     gotoXY(6,whereY);write('| ',spisok^.fio);
     gotoXY(32,whereY);write('| ',spisok^.adres);
     gotoXY(57,whereY);write('|  ',spisok^.mat);
     gotoXY(64,whereY);write('|  ',spisok^.fiz);
     gotoXY(71,whereY);writeln('|   ',spisok^.rus,'    |');
     spisok:=spisok^.next;
   end;
 end;
end; { print }
 
begin
  clrscr;
  nach := nil;
  spisok:= nil;
  menu:=1;
  while menu<>0 do
  begin
    writeln;
    writeln('1 - Формирование списка.');
    writeln('2 - Вывод списка на экран.');
    writeln('0 - Выход');
    writeln('Введите пунк меню');
    readln(menu);
    case menu of
      1 : begin
            clrscr;
            create(spisok,nach,z);
          end;
      2 : begin
            print(spisok);
          end;
      end; {case}
  end; {while}
end.
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
13.11.2009, 03:30
Сразу могу сказать с чем у Вас могут быть проблемы в дальнейшем:
1) В процедуре создания списка, вы спрашиваете количество, а это не очень приемлимо. Ну посудите, а вдруг я не знаю сколько у меня в стопке листков формата А4 студентов, а мне надо их просто вводить? Так что для разрешения данной ситуации обычно используются циклы repeat ... until где перед until выводится строка, например:
Pascal
1
  writeln('Bbl }l{elaete prodol}l{ut'' vvod dannblx? Y/N');
берётся переменная типа char и этой переменной присваивается введённый символ и цикл организуется пока эта переменная не станет равна N, либо (я обычно именно так делаю), пока не будет нажата любая клавиша помимо (Y y #13 (enter) )
Pascal
1
  c:=readkey; {для readkey не забываем подключать crt}
2)Я Вам писал, что следует обнулять указатель при создании нового элемента, а Вы меня не послушали, а зря, если привыкните так делать и начнёте писать на языке С, то можете сильно поплатиться. Это ведь не сложно дописать две строчки (в if'e и else)
0
 Аватар для and1
4 / 4 / 0
Регистрация: 27.10.2009
Сообщений: 67
13.11.2009, 03:35  [ТС]
то есть вывод верно написан, проблема именно с вводом данных?
0
 Аватар для lexus_ilia
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
13.11.2009, 04:16
Я не компилировал и не проверял Ваш код, я указываю на явные вещи, которые могут косвенно влиять на результат выполнения программы.
0
 Аватар для Dnnn
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
13.11.2009, 10:57
Цитата Сообщение от and1 Посмотреть сообщение
то есть вывод верно написан, проблема именно с вводом данных?
ввод работает в принципе. на while или repeat until цикл конечно лучше, думаю, сами переделаете

фактическим параметром при вызове печати д.б. указатель nach, в этом ошибка, те напишите
case ...
2 : begin
print(nach);
......
в этой программе получается перем. spisok промежуточная, а собственно указатель на 1 эл-т списка хранится в nach - ее и передавайте везде.

Добавлено через 17 минут
goof, насчет сортировки списков. можно и в исходном как-то вроде массива сортировать, например, простыми вставками - начиная со 2 эл-та искать место привязки в предыдушей части списка.
а можно например второй список создать и добавлять по очереди в него элементы с сохранением упорядоченности. т.е. пусть есть список с указ-м на 1 эл-т first - неупорядоченный, исходный. в элементе этого списка есть поле ball , по которому упорядочиваем и указ-ль на след. next :
(НЕ ПРОВЕРЯЛА!)
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
procedure AddInSortSpisok(z: ....; var first2:....);
{Добавление одного эл-та z в отсортированный список с указ-м first2 с сохранением упорядоченности}
var p, pr, n: ukazateli ; 
begin
... new(n); n^ := z; {новый эл-т}
    p := first2; pr := nil;
    while p<>nil and p^.ball<z.ball do {ищем место привязки по баллу }
    begin pred := p; p:= p^.next;  
    end;
    {вставка, привязка на нужное место "между" p и pr}
    n^.next := p; 
    if pr = nil {будет первый эл-т в списке} then 
       first2 := n
    else pr^.next := n; 
end;
....
first2 := nil;  {новый упорядоченный список}
 t:= first;      
 while t<> nil do {двигаемся по исходному списку}
 begin z := t^;
         AddInSortSpisok(z, var first2);
         t := t^.next;
 end;
...
0
 Аватар для and1
4 / 4 / 0
Регистрация: 27.10.2009
Сообщений: 67
13.11.2009, 15:01  [ТС]
простите за глупость детскую, но уже крыша едет потиху, не понимаю почему не дает вводить никакого символа а сразу идет цикл с начала, хотя вроде должна кнопка нажиматся:
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
procedure create(var spisok, nach:link; var z : kom);
var
  a : char;
  i, n : integer;
begin
  clrscr;
  repeat
    write('Фамилия Имя Отчество: ');
    readln(z.fio);
    write('Адрес проживания: ');
    readln(z.adres);
    write('Оценки (мат, физика, русс-й) через пробел: ');
    readln(z.mat, z.fiz, z.rus);
    z.next := nil;
    if nach = nil then
    begin
      new(nach);
      nach^ := z;
      spisok := nach;
      nach^.next:=nil;
    end
    else
    begin
      new(spisok^.next);
      spisok:=spisok^.next;
      spisok^ := z;
      spisok^.next:=nil;
    end;
    writeln('Вы желаете продолжить ввод данных? Y/N ');
    a := readKey;
  until a = 'n'
end;{ create }
уже написал и простой пример по readkey не понимаю что я не так делаю....
Pascal
1
2
3
4
5
6
7
8
Program Ex3_Repeat;
Uses Crt;
Var Ch:Char;
Begin
Repeat
  Ch:=ReadKey; Write(Ch);
Until Ch='j'
End.
Добавлено через 7 минут
вроде бы и понятно как работает, и простая то программка работает а в процедуре не работает, подскажите я в отчаянии
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.11.2009, 15:01

Вывести абитуриентов, проживающих в г.Минске и сдавших экзамены со средним баллом не ниже 8.
Задание такое 10. Ведомость абитуриентов, сдавших вступительные экзамены в университет, содержит Ф.И.О., адрес, оценки. Вывести...

Определить количество абитуриентов, проживающих в городе Киеве
Задана ведомость абитуриентов, сдавших вступительные экзамены в университет. В каждой строке данной ведомости записано фамилию абитуриента,...

Определение общего количества больных в городе через t часов
Задание на картинке

Распечатать данные о студентах, проживающих в городе
3)Составить программу создания и обработки списка объектов. Информацию о каждом объекте оформить в программе в виде записи. Совокупность...

Вывести фамилию студентов проживающих в одном городе
Имеется информация о 200 студентах:ФИО, город, номер дома, улица.Вывести фамилию студентов проживающих в одном городе(городов всего 20)


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru