Пример программы
#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