Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2014, 23:02   #1
Таня Хорошая
Пользователь
 
Аватар для Таня Хорошая
 
Регистрация: 15.04.2014
Сообщений: 12
По умолчанию Учет пропусков (Паскаль)

Здравствуйте, мне необходима помощь в создании программы, которая учитывает пропуски 32-х человек в течении месяца и осуществляет:
1) ввод данных за месяц в файл(это я уже сделала);
2.1) вывод данных за все время;
2.2) за определенный день;
2.3) за период времени;
3.1) вывод среднего количества за все время;
3.2) среднее за определенный промежуток времени.

Вот и сама программа из пункта 1:
Код:
Program Tanya;
Type
  Progul=record
     Date:string[10];
     Fio:string[128];
     Kol:string;
  End;
var student: array [1..32] of progul;
    i,m:integer;
    f:text;
begin
assign(f,'e:\liudi.txt');
  rewrite(f);
    for i:=1 to 32 do
    begin
      writeln('vvedite imea i familiu');
      readln(student[i].Fio);
        for m:=1 to 31 do
        begin
          writeln('vvedite datu');
          readln(student[i].Date); 
          writeln('vvedite kol-vo propuskov');
          readln(student[i].Kol); 
          writeln(f,'fio','  ','  ',student[i].Fio,'  ','data','  ',student[i].Date,'  ','propuski','  ',student[i].Kol);
          end;
    end;
    close(f);
  readln;
end.
Таня Хорошая вне форума Ответить с цитированием
Старый 01.05.2014, 23:37   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Типа такого:
Код:
Program Tanya;
Type
  Progul=record
     Date:string[10];
     Fio:string[128];
     Kol:string;
  End;
var student: array [1..32] of progul;
    i,m:integer;
    f:text;

procedure q; {2.1) вывод данных за все время;}
var t:string;
begin
 readln(t);
 reset(f); 
        for m:=1 to 31 do        begin 
          readln(f,student[i]); 
           writeln(f,'fio','  ','  ',student[i].Fio,'  ','data','  ',student[i].Date,'  ','propuski','  ',student[i].Kol);
        end;
 close(f); 
end;

procedure w; {2.2) за определенный день;}
var t:string;
begin
 readln(t);
 reset(f); 
        for m:=1 to 31 do        begin 
          readln(f,student[i]); 
          if student[i].Date=t then  
           writeln(f,'fio','  ','  ',student[i].Fio,'  ','data','  ',student[i].Date,'  ','propuski','  ',student[i].Kol);
        end;
 close(f); 
end;

procedure r; {2.3) за период времени;}
var t,e:string;
begin
 readln(t);readln(e);
 reset(f); 
        for m:=1 to 31 do        begin 
          readln(f,student[i]); 
          if (student[i].Date>=t)and(student[i].Date>=e) then  
           writeln(f,'fio','  ','  ',student[i].Fio,'  ','data','  ',student[i].Date,'  ','propuski','  ',student[i].Kol);
        end;
 close(f); 
end;

procedure t; {3.1) вывод среднего количества за все время;}
var t:string; sr
begin
 sr:=0;
 reset(f); 
        for m:=1 to 31 do        begin 
          readln(f,student[i]); 
           sr:=sr+student[i].Kol;
        end;
 close(f);  write(sr/31);
end;




procedure y; {3.2) среднее за определенный промежуток времени.}
var t,e:string;
begin
 readln(t);readln(e);
 reset(f); 
        for m:=1 to 31 do        begin 
          readln(f,student[i]); 
          if (student[i].Date>=t)and(student[i].Date>=e) then  
          sr:=sr+student[i].Kol;
        end;
 close(f);  write(sr/31);
end;

begin
assign(f,'e:\liudi.txt');
  rewrite(f);
    for i:=1 to 32 do
    begin
      writeln('vvedite imea i familiu');
      readln(student[i].Fio);
        for m:=1 to 31 do
        begin
          writeln('vvedite datu');
          readln(student[i].Date); 
          writeln('vvedite kol-vo propuskov');
          readln(student[i].Kol); 
          writeln(f,'fio','  ','  ',student[i].Fio,'  ','data','  ',student[i].Date,'  ','propuski','  ',student[i].Kol);
          end;
    end;
    close(f);

 q;w;r;t;y;

  readln;
end.
Только я бы дату не делал строкой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2014, 09:53   #3
Таня Хорошая
Пользователь
 
Аватар для Таня Хорошая
 
Регистрация: 15.04.2014
Сообщений: 12
По умолчанию

Cпасибо за помощь!
Дату я сделала строкой потому что необходимо было определять ещё и месяц, то есть выглядить это будет так: "10.03".
И ещё... когда компилирую программу (а я работаю в паскале ABC), мне выводят ошибку в строке:
Код:
readln(f,student[i]);
Пишут "нельзя считывать данные этого типа"..
Таня Хорошая вне форума Ответить с цитированием
Старый 02.05.2014, 10:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Блин точно.
Код:
procedure t; {3.1) вывод среднего количества за все время;}
var t:string; sr:integer; p:Progul;
begin
 sr:=0;
 reset(f); 
        for m:=1 to 31 do        begin 
          readln(f,p.date,p.fio,p.kol); 
           sr:=sr+p.Kol;
        end;
 close(f);  write(sr/31);
end;
Ну и везде так по образу и подобию сделай.
Цитата:
Дату я сделала строкой потому что необходимо было определять ещё и месяц, то есть выглядить это будет так: "10.03".
Лучше бы сделала типом
Код:
TDat = record
 day,month,year:byte;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2014, 10:18   #5
Таня Хорошая
Пользователь
 
Аватар для Таня Хорошая
 
Регистрация: 15.04.2014
Сообщений: 12
По умолчанию

Но только если я изменю сейчас Date - выйдет куча ошибок, я запуталась(
Таня Хорошая вне форума Ответить с цитированием
Старый 02.05.2014, 11:21   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну потому что нужно раньше было продумать структуру данных )
Теперь конечно придется менять программу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2014, 23:06   #7
Таня Хорошая
Пользователь
 
Аватар для Таня Хорошая
 
Регистрация: 15.04.2014
Сообщений: 12
По умолчанию

Итак, я попыталась изменить и встретилась с очередными трудностями
Поможете исправить ошибочку?
Код:
Program Tanya;
Type
  Progul=record
     
     Fio:string[128];
     Kol:string;
  End;
  TDat = record
 day,month:byte;
end;
var student: array [1..32] of progul;
    date: array [1..100] of TDat;
    i,m:integer;
    f:text;


procedure w; {2.2) за определенный день;}
var t:string; sr:integer; p:Progul; d:TDat;
m:integer;
begin
 readln(t);
 reset(f); 
        for m:=1 to 31 do        begin 
          readln(f,d.day,d.month,p.fio,p.kol); 
          if student[i].Date=t then  
           writeln(f,'fio','  ','  ',student[i].Fio,'  ','data','  ',student[i].Date,'  ','propuski','  ',student[i].Kol);
        end;
 close(f); 
end;
Сама ошибка вот где:
Код:
 if student[i].Date=t then  ...
Таня Хорошая вне форума Ответить с цитированием
Старый 02.05.2014, 23:15   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Во-первых: Угадывать текст твоей ошибки это в бюро телепатии на втором этаже.
Во-вторых: Я правильно понимаю - ты не знаешь чем отличается один тип данных от другого, так?
Смотри:
Код:
var t:string;
и
Код:
  TDat = record
 day,month:byte;
end;
Строку нельзя сравнивать с записью. Строку вообще нельзя так просто без преобразования сравнивать с любым другим типом
А значит нужно что?...
Подсказываю: сделать переменную такого же типа, и ввести с помошью readln соответственно.
Смотри:
Было:
Код:
t:string;
и
Код:
Date:string
Смекаешь о чем я?
Еще раз повторю: Сравниваемые переменные должны быть одного типа.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2014, 23:15   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
 student[i].Date
массив student состоит из записей progul, в которой нет date
а date, это массив (можно написать date[i].имя поля.
Но как его можно сравнивать со строкой?!!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.05.2014, 23:29   #10
Таня Хорошая
Пользователь
 
Аватар для Таня Хорошая
 
Регистрация: 15.04.2014
Сообщений: 12
По умолчанию

Да, смекаю.
Этот момент я обозначила через плюс (надеюсь, что правильно):
Код:
if ((d.day)+(d.month))=t then ...
И ещё хотела спросить, а можно ли сделать так, чтоб информация считывалась уже из существующего файла? Чтоб не вводить..
Таня Хорошая вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автозаполнение пропусков в тесте ancorom Помощь студентам 1 23.12.2013 09:28
ИС Учет ПК и ПО на C# aliendeath Фриланс 0 05.05.2013 16:50
Assembler Подсчитать количество пропусков в ASCIIZ- строке Alexsandr Помощь студентам 0 03.02.2013 21:26
программы для печати удостоверений (пропусков) lungge Фриланс 3 15.11.2012 12:21
Найти студента который имеет среднее количество пропусков. LUKICH Фриланс 1 01.06.2010 09:15