Пример программы

 

#include <iostream.h>

#include <string.h>

#include <stdio.h>

#include <conio.h>

#include <dos.h>

const int n = 80;

struct spis{char ch[n];

spis* next;

};

void okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15]);

spis* sozdspis(char ch[80],spis* head);

int obrabotka(spis* head);

void udalspis(spis* head);

void viewsp(spis* head);

 

int main()

{char ch[80];

int kol;

spis* head = 0;

okno(1,1,80,25,BLACK,WHITE,"");

okno(1,1,32,12,WHITE,BLACK,"Описание");

cout << "\n Подсчитать количество"

"\n слов списка L, которые"

"\n начинаются с той же литеры,"

"\n что и следующее слово";

okno(34,1,79,12,BLUE,WHITE,"Исходный список");

okno(34,14,79,24,BLUE,WHITE,"Результат подсчета");

okno(1,14,32,24,WHITE,BLACK,"Окно ввода");

cout << "\n Вводите элементы списка L"

"\n (слова) через пробел;"

"\n после последнего слова"

"\n через пробел - точка";

cout << "\n ";

do

{cin >> ch;

head = sozdspis(ch,head);

}

while(ch[0] != '.');

okno(34,1,79,12,BLUE,WHITE,"Исходный список");

gotoxy(2,3);

viewsp(head);

getchar();

kol = obrabotka(head);

okno(34,14,79,24,BLUE,WHITE,"Результат подсчета");

gotoxy(2,3);

cprintf("\r\n Найдено %u таких слов",kol);

getchar();

return 0;

}

 

//Формирование окна диалога

void okno(int x1,int y1,int x2,int y2,int bkcol,int colb,char zag[15])

{window(x1, y1, x2, y2);

textbackground(bkcol);

textcolor(colb);

clrscr();

gotoxy((x2 - x1 - strlen(zag)) / 2,1);

cprintf("%s\n\r",zag);

}

 

//Добовление нового элемента в список

spis* sozdspis(char ch[n], spis* head)

{spis *tec, *nov;

nov = new(spis);

strcpy(nov -> ch,ch);

nov -> next = 0;

if(head) //список не пуст

{tec = head;

while(tec -> next)

tec = tec -> next;

tec -> next = nov;

}

else //список пуст

head = nov;

return head;

}

 

//Подсчет числа вхождений

int obrabotka(spis* head)

{spis* tec;

int kol = 0;

tec = head;

while(tec -> next -> next != NULL)

{if(tec -> next -> ch[0] == tec -> ch[0])

kol++;

tec = tec -> next;

}

return kol;

 

}

 

//Просмотр списка

void viewsp(spis* head)

{spis* tec;

tec = head;

while(tec -> next != NULL)

{cprintf("%s ",tec -> ch);

tec = tec -> next;

}

}

 

//Удаление списка

void udalspis(spis* head)

{spis *pred,*tec;

tec = head;

while(tec != NULL)

{pred = tec;

tec = tec -> next;

delete(pred);

pred = NULL;

}

}

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