- •1 Составить программу на Asm для очистки экрана
- •2 Cоставить прграмму на Asm для преобразования строчных букв в прописные
- •3 Сост . Прогр . На Asm для нахождения в заданном массиве номера первого числа, равного нулю
- •4 Написать на Asm программу для сохранения текстового экрана в буфере и последующей записи буфера в файл
- •5 В области памяти, адресуемой регистром si нах-ся цепочка семибитных кодов символов….
- •6 Перевод из одной системы исчисления в другую
- •1 Розробити консольну програму, яка відкриває файл порціями по 4Кб та відображае його зміст в вікні. Для роботи з файлами викорастати Win32 Api
- •6 Программа, демонстрирующая синхронизацию доступа к глобальному массиву с пом. Мютексов
- •7 Написать фрагмент программы, которая показывает синхронизацию процессов с помощью семофоров
- •9 Файлы, отображаемые в памяти
- •10 Фрагмент программы для, демонстрирующий обмен данными, с помощью сообщения wm_copydata ( фрагмент выделен жирным шрифтом)
- •ОПиАя и ооп
- •12.4 Дан файл символов построить частотный словарь, представив его виде бинарного дерева поиска и составить линейно скобочную запись.
- •13.4 Дан файл, компоненты которого являются действительными числами. Сформировать линейный список и
- •14.4 // Дан файл символов. Сформировать линейный список. Просмотреть линейный список из головы и составить из
- •15.4 Дан текстовый файл, состоящий только из латинских букв. Необходимо инвертировать каждую строку файла, используя стек, и записать полученные строки в другой файл.
- •16.4 Представить многочлен в виде линейного списка. Написать прогу кот выполняет сложение многочленов
- •17.4 Написать процедуру, которая осуществляет сложение целых чисел произвольной длины(двухсвязный список)
- •22.4 Дан файл целых чисел компоненты которого различны, сформировать циклический линейный список, задать число n и удалять n-ый элемент в списке пока не останется 1
- •23.4 // Вычислить значение арифметического выражения, преобразовав его в постфиксную форму. Предусмотреть со скобками и без скобок.(со стеком)
- •24.4 // Сформировать числовой файл и отсортировать его компоненты с помощью двух стеков.
- •25.4 Дан файл символов сформировать дерево поиска описав процедуру удаления элнмента из дерева и функцию подсчета листьев в дереве.
- •35.4 Вычислить значение арифметического выражения, преобразовав его в постфиксную форму. Предусмотреть со скобками и без скобок.(со стеком)
- •44.4 Написать процедуру которая обращает данный список
- •45.4 Написать процедуру которая по линейно скобочной записи строит бинарное дерево поиска
- •46.4) Написать процедуру для подсчета листьев в бинарном дереве поиска
- •9. Побудувати параметризований клас черги.
16.4 Представить многочлен в виде линейного списка. Написать прогу кот выполняет сложение многочленов
// будем считать что списки упорядочены по возрастанию степеней элементов многочленов
list* add(list *t1,list *t2)
{
list * new_list,*tek;
list *l1 = t1;
list *l2 = t2;
bool flg = false;
while((l1!=NULL)&&(l2!=NULL))
{//пока не кончится один из двух многочленов
if(l1->s!=l2->s)//если степени не равны
{
if(l1->s>l2->s)//если степень 1-го больше чем 2-го
{
while((l1->s!=l2->s)&&(l2!=NULL))//пока степени не выровняются
{
list *h = new list;//создаем 1-й элемент
h->k=l2->k;
h->s=l2->s;
h->next=NULL;
if(!flg)//если это первый элемент
{//создаем начало списка
flg = true;
new_list = h;
tek = h;
}else{//иначе добавляем в очередь
tek->next = h;
tek = h;
}
l2 = l2->next;//перходим к след эл-ту
}}else{//если степень 2-го больше чем 1-го
while((l1->s!=l2->s)&&(l1!=NULL)){ //пока степени не выровняются
list *h = new list;//созд новый эл-т очереди
h->k=l1->k;
h->s=l1->s;
h->next=NULL;
if(!flg) //если это первый элемент
{//создаем начало списка
flg = true;
new_list = h;
tek = h;
}else{//иначе добавляем в очереь
tek->next = h;
tek = h;
}
l1=l1->next; //перходим к след эл-ту
}}
}else{//если степени равны
list *temp = new list; //созд новый эл-т очереди
temp->k = l1->k+l2->k;//коэф складываем
temp->s = l1->s;
temp->next = NULL;
if(!flg) {
new_list = temp;
tek = temp;
flg = true;
}else
{
tek ->next = temp;
tek = temp;
}
}
l1=l1->next;
l2=l2->next;
}
//проверяем который многочлен не окончился и дописываем в конец резельтирующего многочлена
if((l1!=NULL)&&(l2==NULL))//незакончился 1-ый
while(l1!=NULL){
list *tt = new list;
tt->s = l1->s;
tt->k= l1->k;
tt->next= NULL;
tek->next = tt;
tek = tt;
l1=l1->next;
}else
if((l1==NULL)&&(l2!=NULL))//незакончился 2-ой
while(l2!=NULL){
list *tt = new list;
tt->s = l2->s;
tt->k= l2->k;
tt->next= NULL;
tek->next = tt;
tek = tt;
l2=l2->next;
}
return new_list;
}
17.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 { // стр-ра, ссылающаяся сама на себя
int info;
list *prev;
list *next;
list() { prev=NULL; next=0; info=0; }
};
void insert_post(list **, list **, list**, int);
void printList(list *);
int countItems(list *);
list *first1=0; // голова 1-го списка
list *last1=0; // хвост 1-го списка
list *first2=0; // голова 2-го списка
list *last2=0; // хвост 2-го списка
void main( void )
{
char digit[10], num1[100], num2[100];
unsigned int i;
list *p1, *p2;
printf("Enter first whole number:\n");
scanf("%s", num1);
printf("\nEnter second whole number:\n");
scanf("%s", num2);
for(i=0; i<strlen(num1); i++) {
p1=last1;
sprintf(digit, "%c", num1[i]);
insert_post(&p1, &first1, &last1, atoi(digit));
}
printList(first1);
for(i=0; i<strlen(num2); i++) {
p2=last2;
sprintf(digit, "%c", num2[i]);
insert_post(&p2, &first2, &last2, atoi(digit));
}
printList(first2);
int cnt1 = countItems(first1);
int cnt2 = countItems(first2);
int rem=0, tmp;
p1 = last1;
p2 = last2;
if(cnt1>=cnt2) {
while(p2!=NULL) {
tmp = p1->info + p2->info + rem;
if(tmp>=10) { tmp -= 10; rem = 1; }
else rem = 0;
p1->info = tmp;
p1 = p1->prev;
p2 = p2->prev;
}
if(rem) p1->info += 1;
printList(first1);
}
else {
while(p1!=NULL) {
tmp = p1->info + p2->info + rem;
if(tmp>=10) { tmp -= 10; rem = 1; }
else rem = 0;
p2->info = tmp;
p1 = p1->prev;
p2 = p2->prev;
}
if(rem) p2->info += 1;
printList(first2);
}
}
/* Вставка элемента после текущего */
void insert_post(list **q, list **first, list **last, int 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;
}
}
/* count items in the list */
int countItems(list *q)
{
int cnt=0;
while(q!=NULL) {
cnt++;
q = q->next;
}
return cnt;
}
/* 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("%d-> ", q->info);
q = q->next;
}
printf("NULL\n\n");
}
}
ООП
18.4 Перегрузка операции << и >>(вставка и извлечение) для класса “Точка трехмерного пространства”
#include <iostream.h>
#include <string.h> // Для работы со строковыми функциями.
//Определение класса (пользовательского типа):
struct string
{
int length;
char line[80];
};
// Прототип операции-функции для перегрузки операции <<:
ostream& operator << (ostream& out, string str);
void main()
{
string st; // Объект st класса string.
strcpy(st.line,"Содержимое строки.");
st.length = strlen(st.line);
cout << st;
}
ostream& // Тип возвращаемого значения.
operator << (ostream& out, string str)
{
out << "\n Длина строки: " << str.length;
out << "\n Значение строки: " << str.line;
return out;
}
=============================================
//OOР10_1.СРР - перегрузка операции ввода >>.
#include <iostream.h>
struct point // Точка трехмерного евклидова пространства.
{
float x;
float y;
float z;
};
istream& // Тип возвращаемого значения.
operator >> (istream& in, point& d)
{
cout <<"\n Введите три координаты точки: " << "\nx = ";
in >> d.x;
cout << "y = "; in >> d.y;
cout << "z = "; in >> d.z;
return in;
} void main() { point D; cin >> D; }