Міністерство освіти і науки України
Національний університет "Львівська політехніка"
Кафедра "Інформаційні системи та мережі"
Лабораторна робота № 3
з предмету:
Алгоритми і Структури Даних
на тему:
Інтегровані структури даних, запису.
ЛЬВІВ-2008
Тема:
Інтегровані структури даних, запису.
Мета роботи:
Придбання і закріплення навиків в роботі із записами, в інтеграції даних, в модульному програмуванні.
Постановка завдання
Для заданої прикладної області розробити опис об'єктів цієї області. Розробити процедури, що реалізуюють базові операції над цими об'єктами, зокрема:
текстове введення-виведення (консольний і файловий);
присвоювання;
задання константних значень;
порівняння (не менше 2-х типів).
Підготувати файл початкових даних, що містять не менше 10 значень конкретних об'єктів.
Використовуючи процедури і описи модуля типу даних, розробити програму, що забезпечує введення початкових даних з першого файлу даних в пам'ять і зберігання їх в масиві, сортування масиву по алфавітному і по числовому параметру.
Варіанти індивідуальних завдань
Для кожної області перераховані параметри об'єкту. Серед параметрів обов'язково є ключове алфавітне поле (наприклад, прізвище), яке ідентифікує об'єкт, у кожного об'єкту є також одне або декілька числових полів, по яким вірогідні звернення до об'єкту. Набір характеристик може бути розширений і ускладнений по розсуду виконавця.
Варіант індивідуального завданя:
Прикладна область: Відділ кадрів,
Атрибути інформації: прізвище співробітника, ім'я, по батькові, посада, стаж роботи, оклад Перевірити, чи всі нульові елементи розміщені в лівій частині матриці (варіант №1).
Хід виконання роботи:
Для заданої прикладної області я розробив опис об'єктів цієї області, процедури, що реалізуюють базові операції над цими об'єктами, зокрема:
текстове введення-виведення (консольний і файловий);
присвоювання;
2 типи порівняння.
Підготував файл початкових даних, що містять н10 значень конкретних об'єктів.
Використовуючи процедури і описи модуля типу даних, розробити програму, що забезпечує введення початкових даних з файлу даних в пам'ять і зберігання їх в масиві, сортування масиву по алфавітному і по параметру зарплати.
Текст програми на мові С++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
class Worker
{
public:
char name[20];
char surname[20];
char status[10];
int celery;
int stag;
public:
Worker(char *n=NULL, char *sn=NULL, char *s=NULL, int c=0,
int st=0)
{
if(n) strcpy(name, n); else *name='\n';
if(sn)strcpy(surname, sn);else *surname='\n';
if(s) strcpy(status, s); else *status='\n';
celery=c;
stag=st;
}
void operator()(char *n, char *sn, char s, int c, int st)
{
*name='\0';
*surname='\0';
*status='\0';
celery=c;
stag=st;
}
int read(FILE *in=NULL)
{
if(!in)in=stdin;
return fscanf(in, "%s%s%s%d%d\n",
name, surname, status, &celery, &stag)==5?1:0;
}
int write(FILE *out=NULL)
{
if(!out)out=stdout;
return fprintf(out, "%-20s%-20s%-10s%4d%2d\n",
name, surname, status, celery, stag)==5?1:0;
}
int operator<(Worker w)
{
int c;
c=strcmp(name, w.name);
if(c) return c<0?1:0;
c=strcmp(surname, w.surname);
return c<0?1:0;
}
int operator>(Worker w)
{
int c;
c=strcmp(name, w.name);
if(c) return c>0?1:0;
c=strcmp(surname, w.surname);
return c>0?1:0;
}
int operator<<(Worker w)
{ return celery<w.celery?1:0; }
int operator>>(Worker w)
{ return celery>w.celery?1:0; }
};
int readall(Worker w[], int maxn, char *fname)
{
int i;
if(fname)
{
FILE *f=fopen(fname, "r");
if(!f){ puts("ERROR 1"); exit(1); }
for(i=0; i<maxn; i++)
if(!w[i].read(f))
return i;
if(*fname)fclose(f);
return i+1;
}else{
for(i=0; i<maxn; i++)
if(!w[i].read(stdin))
return i;
return i-1;
}
}
writeall(Worker w[], int maxn, char *fname)
{
int i;
if(fname)
{
FILE *f=fopen(fname, "w");
if(!f){ puts("ERROR 2"); exit(1); }
for(i=0; i<maxn; i++)
w[i].write(f);
if(*fname)fclose(f);
}else{
for(i=0; i<maxn; i++)
w[i].write(stdout);
}
}
void sortns(Worker w[], int wn)
{
for(int i=0; i<wn-1; i++)
for(int j=i+1; j<wn; j++)
if(w[i]>w[j])
{ Worker t=w[i]; w[i]=w[j]; w[j]=t; }
}
void sorts(Worker w[], int wn)
{
for(int i=0; i<wn-1; i++)
for(int j=i+1; j<wn; j++)
if(w[i]>>w[j])
{ Worker t=w[i]; w[i]=w[j]; w[j]=t; }
}
void main()
{
Worker w[20];
int wn=0;
char fname[80];
clrscr();
puts("Enter data file name(blank line for console)\n");
gets(fname);
wn=readall(w, 20, fname);
printf("\nRecords read: %d\n", wn);
writeall(w, wn, NULL);
getch();
sortns(w, wn);
puts("\nSorted by name and surname\n");
writeall(w, wn, NULL);
getch();
sorts(w, wn);
puts("\nSorted by selery\n");
writeall(w, wn, NULL);
getch();
return;
}
Результати компютерної реалізації програми:
Результати компютерної реалізації програми виправдали очікування і підтвардили правильність її складання. Нижче наведено скріншот, який демонструє це:
Висновки
Під час виконання роботи я придбав і закріпив навики в роботі із записами, в інтергациі даних, в модульному програмуванні.