0 / 0 / 0
Регистрация: 24.10.2009
Сообщений: 4
1

Составить программу для ввода данных о студентах, проживающих в общежитии, и записи этих данных в файл

22.12.2009, 15:57. Показов 4367. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Работа с комбинированными данными:

Необходимо составить программу для ввода данных о студентах, проживающих в общежитии, и записи этих данных в файл. Запись о одном студенте содержит следующие поля: "фамилия", "имя", "отчество", "номер комнаты проживания".
необходимо также написать процедуры/функции которые помогут ответить на следующие вопросы:

1. В какой комнате живет заданный студент;
2. Кто соседи по комнате заданного студента;
3. Какие студенты живут на заданном этаже (комнаты в общежитии нумеруются так, что в третьем разряде номера находится номер этажа. Например, 304 – третий этаж.)


вот примерно как я думаю, о вводе всех необходимых данных
Код:


Код:


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
program students_in_hostel;
uses crt;                                         
type
      MenR=record
        Name,Familiya,Otchestvo:string;
        Komnata:integer;
        end;
      Men=file of MenR;
 
var
      stroka:menR;
      in_f:file of MenR;
      c:char;                                     
      i:byte;                                    
      begin
      clrscr;
      assign(in_f,'result.txt');
      rewrite(in_f);
      writeln('Введите данные,окончание - ESC');
      repeat
      write('Фамилия ');
            readLn(stroka.Familiya);
          write('Имя ');
            readLn(stroka.name);
      write('Отчество ');
            readLn(stroka.Otchestvo);
          write('Комната ');
            readLn(stroka.Komnata);
      write(in_f,stroka);
      c:=readkey;                                  
      until c=#27;
      reset(in_f);                             
      repeat                                      
      write('Nomer zapisi i=');
      readln(i);
      if i>filesize(in_f)then writeln('В файле нет ',i,' записей! Повторите запрос.');
      until (i<=filesize(in_f))and(i>0);
      reset(in_f);
      seek(In_f,i-1);
      read(in_f,stroka);
      writeln(stroka.Familiya,' ',stroka.name,' ',stroka.Otchestvo,' (',stroka.Komnata,' komnata)'); {выводим через пробел все известные данные о студенте}
      close(in_f);
readLn;
end.
помощь бы мне пригодилась в составлении процедур (или функций, но в нашем случае, лучше же все таки процедуры использовать, да?)

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

1. Для третьего задания, - "Какие студенты живут на заданном этаже (комнаты в общежитии нумеруются так, что в третьем разряде номера находится номер этажа. Например, 304 – третий этаж.)
Код:


Код:


Pascal
1
2
3
4
5
6
7
8
9
10
11
Procedure etag(i:integer; var e:integer)
begin
writeln('Введите нужный этаж');
  read(e);
    ??????????????????
      ?????????????????????
    begin
      if stroka.komnata div 100=e then {если номер комнаты поделенный на сто равен введеному e, то выводим данные о студенте}
      writeln(stroka.Familiya,' ',stroka.name,' ',stroka.Otchestvo);
 end;
end;
2. Кто соседи по комнате заданного студента;
Код:


Код:


Pascal
1
2
3
4
5
6
7
8
9
10
11
Procedure sosedy(i:integer; var k:integer)
begin
writeln('Введите номер комнаты');
  read(k);
  ??????????????????????
   ???????????????????????
    begin
      if stroka.komnata=k then     {если один из номеров уже имеющихся у нас в файле совпадает с тем k, что ввели, то выводим информацию об этом студенте}
      writeln(stroka.Familiya,' ',stroka.name,' ',stroka.Otchestvo);
 end;
end;
3. В какой комнате живет заданный студент;
ну это вот немного даже непонятно, нужна процедура что ли, которая найдет по фамилии комнату в которой проживает этот студент?
если так, то примерно там такой код мне кажется будет:

Код:


Код:


Pascal
1
2
3
4
5
begin
   if stroka.Familiya=f then
     writeln(komnata); else 
     writeln('Такой студент не проживает в общежитии'); 
end;
весьма вероятно, что процедуры я оформил совсем неправильно, не вините меня сильно. неправильно пишу, потому что не знаю как правильно, надеюсь поможете

и вот еще что, думаю что когда данные записываем в файл, необязательно делать вывод про i-того студента. можно сразу делать сразу процедуры а они уже в свою очередь будут выводить нужную информацию
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2009, 15:57
Ответы с готовыми решениями:

Составить программу для ввода данных о студентах, проживающих в общежитии, и записи этих данных в файл
Работа с комбинированными данными: Необходимо составить программу для ввода данных о студентах,...

Информация о проживании в общежитии (да/ нет). Вывести на экран информацию о студентах, проживающих в общежитии
Вот такое задание: &quot;Организовать ввод, хранение в массиве, вывод на экран данных о студентах...

Составить программу ввода данных в записи и вывода на экран записей для ВУЗов
Даны 5 записей, каждая из которых имеет 2 поля: ВУЗ и число студентов. Составить программу ввода...

Составить макет данных и написать программу для ввода и реализации печати введенных данных для платёжной ведомости
1. Составить макет данных и написать программу для ввода и реализации печати введенных данных для...

5
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
22.12.2009, 16:33 2
про ввод правильно думаете. когда ввели данные, файл надо бы закрыть
close(in_f)

дальше получается просто выводите одну из записей файла? и reset делаете 2 раза, что в общем-то
лишнее. скорее понадобится процедура вывода всего файла в виде таблицы

насчет заданий тоже в верном направлении идете, только все эти проверки в цикле, перебирая последовательно записи файла :
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function FindRoom(Fam, Im, Otch: string; var in_f: Men): integer;  
var s: MenR; 
begin 
 findRoom := 0; {считаем, что 0-й комнаты не м.б. Если 0 - то студент не найден}
 reset(in_f); 
 while not eof(in_f) do 
 begin 
    read(in_f, s); 
    if (S.Im = Im) and (S.Familiya = Fam) and (S.Otchestvoi = Otch) then 
       {нашли студента по фио - возвращаем номер комнаты и выходим из цикла просмотра файла}
    begin 
         findRoom := s.Komnata;  break; 
    end;
 end;
 close(in_f);   
end;
0
0 / 0 / 0
Регистрация: 24.10.2009
Сообщений: 4
22.12.2009, 18:27  [ТС] 3
то есть, примерно будет вот так выглядеть все это:

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
program students_in_hostel;
uses crt;                                         
type
      MenR=record
        Name,Familiya,Otchestvo:string;
        Komnata:integer;
        end;
      Men=file of MenR;
 
var
      stroka:menR;
      in_f:file of MenR;
      c:char;                                     
      i:byte;                                    
      begin
      clrscr;
      assign(in_f,'result.txt');
      rewrite(in_f);
      writeln('Введите данные,окончание - ESC');
      repeat
          write('Фамилия ');
            readLn(stroka.Familiya);
          write('Имя ');
            readLn(stroka.name);
          write('Отчество ');
            readLn(stroka.Otchestvo);
          write('Комната ');
            readLn(stroka.Komnata);
      write(in_f,stroka);
      c:=readkey;                                  
      until c=#27;
      {reset(in_f); - вот тут я так понимаю, ресет не нужен, да?}                            
      repeat                                      
     
//вот этот блок тогда для вывода, очевидно тоже не нужен, да?
      {write('Nomer zapisi i=');
      readln(i);
      if i>filesize(in_f)then writeln('В файле нет ',i,' записей! Повторите запрос.');
      until (i<=filesize(in_f))and(i>0);
      reset(in_f);
      seek(In_f,i-1);
      read(in_f,stroka);
      writeln(stroka.Familiya,' ',stroka.name,' ',stroka.Otchestvo,' (',stroka.Komnata,' komnata)'); {выводим через пробел все известные данные о студенте}}
 
      {close(in_f); - закрывать файл тогда не нужно я так понимаю, мы с ним же будем работать в функции}
 
// и вот тут пошла наша функция
 
function FindRoom(Fam, Im, Otch: string; var in_f: Men): integer;  
var s:MenR; 
begin 
 findRoom:=0; {считаем, что 0-й комнаты не м.б. Если 0 - то студент не найден}
 reset(in_f); 
 while not eof(in_f) do 
 begin 
    read(in_f, s); 
    if (S.Im = Im) and (S.Familiya = Fam) and (S.Otchestvoi = Otch) then 
       {нашли студента по фио - возвращаем номер комнаты и выходим из цикла просмотра файла}
    begin 
         findRoom := s.Komnata;  break; 
    end;
 end;
 close(in_f);   
end;
readLn;
end.
теперь еще надо бы это все связать (в смысле функцию, с основным вводом данных
и организовать перед функцией, вывод всех введенных данных?
0
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
22.12.2009, 18:55 4
по синтаксису - процедуры и функции пишутся в начале до основной программы, обычно между
var
и
begin основной программы

а вызывать их можно в программе и неоднократно
у Вас наверное надо меню делать, чтоб не обязат-но каждый раз вводить файл с 0.
вроде - 1. создать файл
2. вывод файла
3. поиск студента по ФИО
4. поиск соседей студента
5. список живущих на этаже
6. выход.
ну и в цикле меню, а потом обрабатывать введенный пользователем вариант.
или в начале программы предлагать создать файл или использовать уже существующий, а потом печать всего или поиск или выход.

Добавлено через 21 минуту
ну что-то вроде
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
program students_in_hostel;
uses crt;                                         
type
      MenR=record
        Name,Familiya,Otchestvo:string; 
        Komnata:integer;
        end;
      Men=file of MenR;
 function FindRoom(Fam, Im, Otch: string; var in_f: Men): integer;  
    var s:MenR; 
       begin 
             findRoom:=0; {считаем, что 0-й комнаты не м.б. Если 0 - то студент не найден}
             reset(in_f); 
             while not eof(in_f) do 
             begin 
                  read(in_f, s); 
                  if (S.Name = Im) and (S.Familiya = Fam) and (S.Otchestvoi = Otch) then 
               {нашли студента по фио - возвращаем номер комнаты и выходим из цикла просмотра файла}
                     begin 
                         findRoom := s.Komnata;  break; 
                    end;
              end;
             close(in_f);   
       end;     
 
  procedure CreateFL(var in_f: Men); 
  var
      stroka:menR;  
      c:char;                                     
      i:byte;                                    
  begin 
      rewrite(in_f);
      writeln('Введите данные,окончание - ESC');
      repeat
          write('Фамилия ');  readLn(stroka.Familiya);
          write('Имя ');         readLn(stroka.Name);
          write('Отчество '); readLn(stroka.Otchestvo);
          write('Комната ');  readLn(stroka.Komnata);
          write(in_f,stroka);
      c:=readkey;                                  
      until c=#27;
      close(in_f); 
 end; 
 
 procedure PrintF(var in_f: Men);
 begin 
    reset(in_f);
    clrscr; 
    writeln('Содержимое файла: '); 
    while not eof(in_f) do 
    begin 
       read(in_f, stroka);
      writeln(stroka.Familiya,' ',stroka.name,' ',stroka.Otchestvo,' (',stroka.Komnata,' komnata)'); {выводим через пробел все известные данные о студенте}}
    end;  
   close(in_f); 
 end; 
  {написать еще процедуры поиска соседей и поиска всех по этажу... }
 
  var  in_f:  Men;
      stroka:menR;
      c:char;                                     
      i:byte;                                    
   Fam, Im, Otch: string; Room: integer; 
 
  begin
      clrscr;
      assign(in_f,'result.txt');
      writeln('Создаем файл заново(Y/N) ? '); 
      readln(c); 
      if (c = 'Y') or (c = 'y') then
            CreateFL(in_f);
 
      repeat   
          clrscr; 
          writeln('Выберите вариант: ');
          writeln('1. вывод файла');
          writeln('2. поиск студента по ФИО'); 
          writeln('3. поиск соседей студента');
          writeln('4. список живущих на этаже');
          writeln('5. выход');
          readln(i); 
          case i of 
          1: PrintF(in_f); 
          2: begin writeln('Введите Фамилию, имя, отчество (все с новой строки)');
                      readln(Fam, Im, Otch);
                      room := FindRoom(Fam, Im, Otch, in_f); 
                      if room = 0 then writeln('Not found')
                      else writeln('Student in room ', room);
              end; 
          3: ...........
          4: .........
 
          end;  
      until i >=5 ;       
     readLn;
end.
0
0 / 0 / 0
Регистрация: 02.04.2014
Сообщений: 4
08.04.2014, 13:42 5
Dnnn, поможите с задачей?
0
1063 / 130 / 34
Регистрация: 09.10.2009
Сообщений: 271
09.04.2014, 17:47 6
ту задачу, что у автора темы была, полагаю, он давно доделал ) куски кода есть, берите, пользуйтесь )
а я уж лет 15 на паскале и лет 7 на дельфи не пишу.
0
09.04.2014, 17:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.04.2014, 17:47
Помогаю со студенческими работами здесь

Написать программу для работы с базой данных, содержащей записи со сведениями о студентах
Написать программу для работы с базой данных, содержащей записи со сведениями о студентах: ФИО,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru