12492

Составить список учебной группы, включающей n человек

Лабораторная работа

Информатика, кибернетика и программирование

Отчет по лабораторной работе №3 по дисциплине Языки программирования Задание: Составить список учебной группы включающей n человек. Для каждого учащегося указать фамилию дату рождения день месяц год год поступления в ВУЗ экзаменационные оценки за первые два ...

Русский

2013-04-29

657.5 KB

12 чел.

Отчет

по лабораторной работе №3

по дисциплине

Языки программирования

Задание:

Составить список учебной группы, включающей n человек. Для каждого учащегося указать фамилию, дату рождения (день, месяц, год), год поступления в ВУЗ, экзаменационные оценки за первые два года обучения (2 года по 2 семестра по 4 экзамена в семестре).

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

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

Примечание1: Обеспечить контроль вводимых пользователем данных. Т.е. фамилия начинается с буквы, дата рождения является реальной датой в диапазоне от 1.01.1980 до 31.12.1990, год поступления в ВУЗ=[2000-2010], оценки=[2,3,4,5].

Примечание2: Для облегчения отладки программы, список группы можно хранить в типизированном файле. Тогда программа будет по выбору пользователя реализовывать следующие действия: ввод списка студентов, вывод списка студентов на экран, запись списка в файл, чтение списка из файла, обработка списка.

Вариант №10:

Удалить студентов, получивших в последнюю сессию все оценки 5.


Текст программы на языке «Pascal»:

Часть 1:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,

 EditBtn, StdCtrls, Spin, MaskEdit, Buttons, LCLType, DateUtils;

type

 student=record

   name:string[25];

   birthday:TDate;

   vuz:integer;

   mark:array[1..16] of byte;

 end;

 { TForm1 }

 TForm1 = class(TForm)

   bbSave: TBitBtn;

   bbClose: TBitBtn;

   deBirthDay: TDateEdit;

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   lbNumber: TLabel;

   lbTitle: TLabel;

   leName: TLabeledEdit;

   meMark: TMaskEdit;

   seVuz: TSpinEdit;

   procedure bbCloseClick(Sender: TObject);

   procedure bbSaveClick(Sender: TObject);

   procedure FormClick(Sender: TObject);

   procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);

   procedure FormCloseQuery(Sender: TObject; var CanClose: boolean);

   procedure FormCreate(Sender: TObject);

   procedure Label2Click(Sender: TObject);

   procedure lbNumberClick(Sender: TObject);

   procedure seVuzChange(Sender: TObject);

 private

   { private declarations }

 public

   { public declarations }

   f:file of student;

   k:integer;

 end;

var

 Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Label2Click(Sender: TObject);

begin

end;

procedure TForm1.lbNumberClick(Sender: TObject);

begin

end;

procedure TForm1.bbSaveClick(Sender: TObject);

var

 data:student;

 i:integer;

 lat,rus,rus_m,name_ok,mark_ok:boolean;

begin

 data.Name:=leName.Text;

 data.BirthDay:=deBirthDay.Date;

 data.Vuz:=seVuz.Value;

 if length(meMark.Text)<16 then

   begin

   ShowMessage('Внимание! Недостаточное количество оценок.');

   deBirthDay.SetFocus;

   exit;

   end;

 for i:=1 to 16 do

   data.mark[i]:=StrToInt(meMark.Text[i]);

 lat:=   (length(data.name)>=1) and

         (data.name[1] in ['A'..'Z','a'..'z']);

 rus:=   (length(data.name)>=2) and

         (ord(data.name[1])=208) and

         (ord(data.name[2]) in [144..175]);

 rus_m:= ((length(data.name)>=2) and

         (ord(data.name[1])=208) and

         (ord(data.name[2]) in [176..191])) or

         ((length(data.name)>=2) and

         (ord(data.name[1])=209) and

         (ord(data.name[2]) in [128..143]));

 name_ok:=lat or rus or rus_m;

 if not name_ok then

    begin

      ShowMessage('Внимание! Фамилия должна начинаться с буквы.');

      leName.SetFocus;

      exit;

    end;

   if (YearOf(data.BirthDay)<1980)

   or (YearOf(data.BirthDay)>1995) then

    begin

      ShowMessage('Внимание! Год рождения указан неверно.');

      deBirthDay.SetFocus;

      exit;

    end;

 mark_ok:=true;

   for i:=1 to 16 do

     begin

     if (data.mark[i]>5) or

        (data.mark[i]<2) then

         mark_ok:=false;

     end;

  if not mark_ok then

    begin

      ShowMessage('Внимание! Оценки указаны неверно.');

      meMark.SetFocus;

      exit;

    end;

 write(f,data);

 lbNumber.Caption:=IntToStr(k);

 inc(k);

end;

procedure TForm1.FormClick(Sender: TObject);

begin

end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);

begin

 closefile(f);

end;

procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: boolean);

begin

 CanClose:= Application.MessageBox('Вы уверены?',

            'Внимание!!!',MB_YESNOCANCEL)

            =IDYES;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

 assignfile(f,'students.dat');

 rewrite(f);

 k:=1;

end;

procedure TForm1.bbCloseClick(Sender: TObject);

begin

end;

procedure TForm1.seVuzChange(Sender: TObject);

begin

end;

end.


Часть 2:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

 Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,

 Buttons, LazUTF8;

type

 student=record

   name:string[25];

   birthday:TDate;

   vuz:integer;

   mark:array[1..16] of byte;

 end;

 link=^element;

 element = record

   data:student;

   next:link;

 end;

 { TForm1 }

 TForm1 = class(TForm)

   bbPrintAll: TBitBtn;

   bbVariant: TBitBtn;

   bbClose: TBitBtn;

   mmOutput: TMemo;

   procedure bbPrintAllClick(Sender: TObject);

   procedure bbVariantClick(Sender: TObject);

   procedure FormClose(Sender: TObject; var CloseAction: TCloseAction);

   procedure FormCreate(Sender: TObject);

 private

   { private declarations }

 public

   { public declarations }

 end;

var

 Form1: TForm1;

 first: link;

implementation

{$R *.lfm}

{ TForm1 }

procedure AddFirst(A:link);

begin

 A^.next := first;

 first := A;

end;

procedure AddAfter(A, old:link);

begin

 A^.next := old^.next;

 old^.next := A;

end;

procedure DelFirst;

var

 temp:link;

begin

 temp:=first;

 first:=first^.next;

 Dispose(temp);

end;

procedure DelAfter(old:link);

var

 temp:link;

begin

 temp:=old^.next;

 old^.next:=old^.next^.next;

 Dispose(temp);

end;

Procedure PrintAll(mmOut:TMemo);

var

  a:link;

  i,j:integer;

  str:string;

begin

  mmOut.Lines.Add('№ Ф.И.О.                  Д.рожд.   ВУЗ  Оценки');

  a:=first;

  i:=1;

   while a<>nil do

     begin

       str:=IntToStr(i);

       str:=str+' '+a^.data.name;

     while UTF8Length(str)<25 do str:=str+' ';

       str:=str+DateToStr(a^.data.birthday)+' ';

       str:=str+IntToStr(a^.data.vuz)+' ';

     for j:=1 to 16 do

       str:=str+IntToStr(a^.data.mark[j]);

   mmOut.Lines.Add(str);

   a:=a^.next;

   inc(i);

 end;

end;

procedure TForm1.FormCreate(Sender: TObject);

var

  f:file of student;

  p:link;

begin

  first:=nil;

  AssignFile(f,'students.dat');

  ReSet(f);

    while not (eof(f)) do

      begin

        p:=new(link);

        read(f,p^.data);

        AddFirst(p);

      end;

  CloseFile(f);

end;

procedure TForm1.FormClose(Sender: TObject; var CloseAction: TCloseAction);

begin

 while first<>nil do

   DelFirst;

end;

procedure TForm1.bbPrintAllClick(Sender: TObject);

begin

 PrintAll(mmOutput);

end;

procedure TForm1.bbVariantClick(Sender: TObject);

var

  curr,next_student,pred:link;

  k,j:integer;

begin

  curr:=first;

  pred:=first;

    while curr<>nil do

    begin

      next_student:=curr^.next;

      k:=0;

      for j:=1 to 16 do

      if curr^.data.mark[j]=5 then

         k:=k+1;

      if k=16 then

      begin

        if curr=first then

        DelFirst

        else

        DelAfter(pred);

      end

    else

      pred:=curr;

      curr:=next_student;

  end;

end;

end.


Форма:

Часть 1:

Рис. 1 Создание списка группы.


Часть 2:

Рис. 2 Вывод списка группы.

Рис. 2 Вывод списка после обработки.


 

А также другие работы, которые могут Вас заинтересовать

20259. Полегшена дифузія. Перенос кисню за допомогою Hb i Mb 150.5 KB
  В залежності від конц. При високій конц. Нехай: С – конц. О2 ; Ср – конц.
20260. Модель Ізінга Теорія середнього поля (ще наз наближення Брега-Вільямса) 93.5 KB
  Модель Ізінга Теорія середнього поля ще наз наближення БрегаВільямса. Модельний Гамільтоніан такої системи: 1 де Н – напруженість магнітного поля. Тобто в системі за відсутності магнітного поля існує спонтанна намагнічуваність. Наближення для моделі Ізінга наближення середнього поля.
20261. Дифузія в газах 43 KB
  Дифузія має місце в газах рідинах і твердих тілах причому дифундувати можуть як частинки сторонніх речовин що в них знаходяться так і власні частинки самодифузії якщо речовина неоднорідна. Швидкість дифузії залежить від температури. При дифузії молекули переміщуються з тих частин речовини де їх концентрація більше в ті її частини де вона менше. Основній закон дифузії – закон Фіка: густина дифузійного потоку I пропорційна градієнту концентрації n взятому з протилежним знаком: D – коеф.
20262. Другий віріальний коефіцієнт для різних моделей потенціалу взаємодії 114 KB
  Методом статистичних сум можна отримати рівняння стану: 1 Співвідношення Камерлінг – Онеса: 2 Порівнюючи 1 і 2: другий віріальний коефіцієнт Ідеальний газ: U=0 BT=0 pV=RT Модель твердих сфер: де об’єм молекули де не враховуємо притягання В 2 підставляємо ВТ: b V Модель Сюзерленда: = дорівнює першому доданку з 2. При реальний газ веде себе як ідеальний ТБ ТК критична температура тут ми використали 5 та глибина потенціальної ями Оскільки для моделі...
20263. Теорія Перкуса-Йєвіка 94.5 KB
  Теорія ПеркусаЙєвіка. Теорія ПеркусаЙєвіка – це спроба встановити ще одне рівняння. Теорія ПеркусаЙєвіка використовує умовні корелятивні функції. Нехай існує функціонал який може бути розкладений у ряд Тейлора по варіації в положенні частинки s1 за визначенням: Розглядались такі функціонали: 1 ; приводить до результатів Перкуса Йевіка; 2 ; приводить до результатів ББГКІ 3 .
20264. Теорія Ван-дер-Ваальса (ВдВ) критичних явищ 99.5 KB
  Теорія ВандерВаальса ВдВ критичних явищ. Одне з рівнянь що описує реальні гази – рівняння ВдВ: для 1го моля газу 1 де а і b –сталі пов’язані із силами притягання і відштовхуванням відповідно. Перепишемо 1: При Т1 : ізотерма ВдВ ліва вітка – рідкий стан права – газоподібний.Перехід із рідкого стану в газоподібний і в зворотному напрямку при звичайних умовах відбувається не вздовж ізотерми ВдВ АВСDE а вздовж ізотерми АЕ яка одночасно є і реальною ізотермою.
20265. Просторові кореляційні функції та властивості кореляційних функцій 63 KB
  Тобто якщо для системи відома функція то ми знаємо яке розташування N частинок системи є найбільш ймовірним. Але через математичні складності обчислень потенціальної енергії взаємодії N частинок системи ця задача розв’язана в дуже обмеженому числі випадків. Тому запропонували новий метод: замість функції розподілу густини ймовірностей певних статистичних станів системи Гіббса розглядається набір з N кореляційних функцій різного порядку: унарна кореляційна функція яка характеризує густину ймовірності що одна частинка системи...
20266. Молекулярна структура рідин. Два способи опису молекулярної структури 64 KB
  dV1 dV2 r EMBED Equation.3 EMBED Equation.3 Г Р КР EMBED Equation.3 EMBED Equation.
20267. Поглинання звуку у в’язкопружних середовищах 80 KB
  Реологічне рівняння – це рівняння яке пов’язує тензор напруг з тензором деформацій і тензором швидкості деформацій. Для в’язкопружнього середовища реологічне рівняння: тензор напруг; тензор деформації; тензор швидкості деформації. та тоді наше рівняння буде мати вигляд: Звукова хвиля – це плоска хвиля. У в’язкопружньому середовищі на відміну від пружнього Підставляючи наше реологічне рівняння в рівняння руху отримаємо хвильове рівняння для звукової хвилі : Розв´язуючи це рівняння за умови Отримуємо вирази для швидкості...