Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursovaya_Nedilko.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
201.01 Кб
Скачать

1.6 Список использованных источников

1) Керниган Б. Язык программирования Си: Задачи по языку Си. / Б. Керниган, Д. Ритчи, А. Фьюэр М.: Финансы и статистика, 1985. 190 - 192 с.

2) Подбельский В.В., Фомин С.С. Программирование на языке Си. Учеб. пособие. М.: Финансы и статистика, 2004. 382-385 с.

3) Генераторы псевдослучайных чисел и методы их тестирования. URL: http://www.referat.ru/referats/view/30078 (дата обращения: 25.05.2013)

2 Разработка на языке С++ программы для отбора команды на олимпиаду по программированию (на основе связного списка)

2.1 Постановка задачи

Программа предназначена для формирования и просмотра команды для олимпиады по программированию.

а) Ввод информации.

По запросу с клавиатуры поочередно вводятся фамилия, имя студента, а также язык программирования, на котором он предпочитает писать программы (Pascal, C,C++).

б) Просмотр введеного списка.

Если список не пустой, то при выборе этого пункта меню на экран поочередно выводится полная информация о каждом студенте.

в) Отбор команды.

При выборе этого пункта меню пользователь должен указать язык программирования, на основании этого из списка студентов выбирается не более трех человек (их может быть меньше), владеющих этим языком.

г) Проверка, может ли быть укомплектована команда.

Предполагается, что команда состоит из трех человек. Пользователь вводит язык программирования, а программа сообщает ему, можно ли или нельзя укомплектовать команду (можно, если студентов, владеющих данным языком, не менее трех)

Реализовать программу на базе связного списка.

2.2 Программный код с необходимыми комментариями

#include <iostream.h>

#include <stdlib.h>

#include <conio.h>

#include <string.h>

#include <fstream.h>

class students {

struct prog{

char * fam;

char * name;

char * lang;

prog * next;

prog(){ fam=""; name="";

lang=""; next=NULL;};

friend ostream & operator<<(ostream& os, prog * pr){

os<<pr->fam<<'\t'<<pr->name<<'\t'<<pr->lang<<endl;

return os;}

};

int progCount;

prog * first;

prog * current;

public:

students(){

progCount=0;

first=current=NULL;};

prog * getfirst(){

return this->first;

}

void Add(char* f, char* n, char * l, int len){

prog * b= (prog *) new char [len];

char * f1= new char (strlen(f)+1),

* n1= new char (strlen(n)+1),

* l1= new char (strlen(l)+1);

strcpy(f1,f);

strcpy(n1,n);

strcpy(l1,l);

b->fam=f1; b->name=n1; b->lang=l1;

if (progCount==0) {first=b;}

else current->next=b;

current=b;

progCount++;

b->next=NULL;

}

void Show(prog * p){

prog *cur=p;

if (progCount==0) {cout<<"No data."<<endl; return;};

while (cur) {

cout<<cur;

cur=cur->next;

}

}

void Remove(char * f, char * n, char * l){

prog * rem=first, *prev=rem;

int i=0;

if (progCount==0) {cout<<"No data."<<endl; return;};

while (!strcmp(first->fam,f) && !strcmp(first->name,n) && !strcmp(first->lang,l)) {

i++; progCount--;

first=first->next;

delete rem;

prev=rem=first;

}

while (rem!=NULL){

if (!strcmp(rem->fam,f) && !strcmp(rem->name,n) && !strcmp(rem->lang,l)) {

prev->next=rem->next;

delete rem;

rem=prev->next;

i++; progCount--;}

else {prev=rem;

rem=rem->next;}

};

if (i==0) {cout<<"Not found."<<endl; return;}

else { cout<<i<<" programmer(s)="<<f<<' '<<n<<' '<<l<<" is(are) deleted."<<endl;}

}

void RemoveAll(){

prog * rem=first;

while (rem!=NULL) {

first=first->next;

delete rem;

rem=first;

}

progCount=0;

}

void Select(char * l){

int i=0;

prog * cur=first;

while (cur){

if (!strcmp(cur->lang, l)){

cur=cur->next;

i++;}

else { cur=cur->next;}

if (i==3) {break;}

}

if (i<3){

cout<<"Can't select team"<<endl; return;}

else { cout<<"Your team: "<<endl; i=0; cur=first;

while (cur){

if (!strcmp(cur->lang, l)){

cout<<cur;

cur=cur->next;

i++;}

else { cur=cur->next;}

if (i==3) {break;}

} }

}

void Save(){

prog * cur=first;

ofstream nf;

nf.open("YEARWORK\\Program.txt");

if (nf==NULL) {

cout<<"Can't open file"<<endl;

return;}

while (cur) {

nf<<cur;

cur=cur->next;

}

nf.close();

cout<<"File created successfully!"<<endl;

}

};

students a;

void menu(){

clrscr();

cout<<"Menu:"<<endl;

cout<<"1.Add student."<<endl;

cout<<"2.Show student(s)."<<endl;

cout<<"3.Remove student(s)."<<endl;

cout<<"4.Remove all student(s)."<<endl;

cout<<"5.The selection of team."<<endl;

cout<<"6.Save (file ""Program.txt"")."<<endl;

cout<<"7.Clear screen."<<endl;

cout<<"0.Exit."<<endl;

};

void main(){

char * f, *n, *l;

int c, len;

menu();

do{

cout<<"Choose and type: ";

cin>>c;

switch (c) {

case 1: { cout<<"Family: "; cin>>f;

cout<<"Name: "; cin>>n;

cout<<"Language (Pascal/ C/ C++): "; cin>>l;

len=strlen(f)+strlen(n)+strlen(l)+3;

a.Add(f,n,l, len);break;}

case 2: { a.Show(a.getfirst());break;}

case 3: { cout<<"Family: "; cin>>f;

cout<<"Name: "; cin>>n;

cout<<"Language (Pascal/ C/ C++): "; cin>>l;

a.Remove(f,n,l);break;}

case 4: { a.RemoveAll(); break;}

case 5: { cout<<"What language: ";

cin>>l;

a.Select(l);

break;}

case 6: {a.Save(); break;}

case 7: {menu(); break;}

case 0: {break;}

default : {cout<<"Invalid menu option."<<endl; break;}

}

}

while (c!=0);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]