Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
!1-25.doc
Скачиваний:
11
Добавлен:
28.10.2018
Размер:
2.62 Mб
Скачать

4. Arq с выборочным повтором (с адресным переспросом)

Для т.В считаются принятыми пакеты, идущие в произвольном порядке. Повторная передача запрашивается из А только для тех пакетов, кот. принимаются неправильно. n - размер окна, указывает, как далеко А может уйти вперед относительно наим-го номера пакета, еще не принятого в В. При этом, если в т.В должно произв-тся упорядочение пакетов, то необходимо хранить самое большее n пакетов.

14.4 // Дан файл символов. Сформировать линейный список. Просмотреть линейный список из головы и составить из символов строку.

#include <fcntl.h>

#include <sys/types.h>

#include <sys/stat.h>

#include <io.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

struct list

{

char info;

list *prev;

list *next;

list() { prev=NULL; next=0; info=0; }

};

void insert_post(list *, char);

void printList(list *);

char * createString(list *);

list *first=0;

list *last=0;

char buffer[100];

void main( void )

{

int fh;

unsigned int i, nbytes = 100, bytesread;

list *p;

/* Open file for input: */

if((fh = _open("symbol.dat", _O_RDONLY)) == -1)

{

perror("open failed on input file");

exit(1);

}

/* Read in input: */

if((bytesread = _read(fh, buffer, nbytes)) <= 0) {

perror("Problem reading file");

exit(1);

}

for(i=0; i<bytesread; i++) {

if(buffer[i]==0x0a) continue;

p=last;

insert_post(p, buffer[i]);

}

printList(first);

printf("The string of item is %s\n", createString(first));

_close(fh);

}

/* вставка элемента после текущего */

void insert_post(list *q, char value)

{

list *p = new list;

if (q != 0)

{

p->next = q->next;

p->prev = q;

}

p->info = value;

if (q == 0)

{

first = p;

last = p;

}

else

{

if (q->next == 0) last = p;

else q->next->prev = p;

q->next = p;

}

}

char * createString(list *q)

{

char str[100];

memset(str,0,100);

unsigned int cnt = 0;

while(q!=NULL) {

cnt += sprintf(str+cnt, "%c", q->info);

q = q->next;

}

return str;

}

/* Print the list */

void printList(list *q)

{

if (q == 0)

printf("List is empty.\n\n");

else

{

printf("The list is:\n");

while (q != 0)

{

printf("%c-> ", q->info);

q = q->next;

}

printf("NULL\n\n");

}

}

--14.5 создать БД "Библиотека-каталог"

--Книга(Инв№,Название,Автор,ГодИзд,Издательство,УДК,АвтЗнак)

--КаталогУДК(УДК,Раздел,Подраздел,№ящика)

--КаталогАвт(АвтЗнак,От,До,№ящика)

CREATE DATABASE Library_catalog

USE Library_catalog

CREATE Table catalog_УДК

(

УДК varchar(50) not null primary key,

Раздел varchar(50),

Подраздел varchar(50),

Nящика int

)

CREATE Table catalog_АВТ

(

АвтЗнак varchar(50) not null primary key,

От varchar(10),

До varchar(10),

Nящика int

)

CREATE Table Book

(

Инв_num int not null primary key,

Название varchar(50),

Автор varchar(50),

ГодИзд datetime,

Издательство varchar(50),

УДК varchar(50) foreign key references catalog_УДК,

АвтЗнак varchar(50) foreign key references catalog_АВТ

)