- •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. Побудувати параметризований клас черги.
6 Программа, демонстрирующая синхронизацию доступа к глобальному массиву с пом. Мютексов
#include "windows.h"
#include "process.h"
#include "stdio.h"
HANDLE hMutex;
int a[5];
void WorkThread(void * pParam)
{
int i,num;
num=0;
while(true)
{
WaitForSingleObject(hMutex,INFINITE);
for(i=0;i<5;i++)
a[i]=num;
ReleaseMutex(hMutex);
num++;
}
}
void main()
{
hMutex=CreateMutex(NULL,FALSE,NULL);
_beginthread(WorkThread,0,NULL);
while(true)
{
WaitForSingleObject(hMutex,INFINITE);
printf("%d %d %d %d %d\n",a[0],a[1],a[2],a[3],a[4],a[5]);
ReleaseMutex(hMutex);
}
}
7 Написать фрагмент программы, которая показывает синхронизацию процессов с помощью семофоров
/* Программа 08-1a.c для иллюстрации работы с
семафорами */
/* Эта программа получает доступ к одному системному семафору,
ждет, пока его значение не станет больше или равным 1
после запусков программы 08-1b.c,а затем уменьшает его на 1*/
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
int main()
int semid; /* IPC дескриптор для массива IPC
семафоров */
char pathname[] = "08-1a.c"; /* Имя файла,
использующееся для генерации ключа. Файл с таким
именем должен существовать в текущей директории */
key_t key; /* IPC ключ */
struct sembuf mybuf; /* Структура для задания
операции над семафором */
/* Генерируем IPC-ключ из имени файла 08-1a.c в текущей
директории и номера экземпляра массива семафоров 0 */
if((key = ftok(pathname,0)) < 0){
printf("Can′t generate key
");
exit(-1);
}
/* Пытаемся получить доступ по ключу к массиву
семафоров, если он существует, или создать его из одного
семафора, если его еще не существует, с правами доступа
read & write для всех пользователей */
if((semid = semget(key, 1, 0666 | IPC_CREAT)) < 0){
printf("Can′t get semid
");
exit(-1);
}
/* Выполним операцию D(semid1,1) для нашего массива
семафоров. Для этого сначала заполним нашу структуру.
Флаг, как обычно, полагаем равным 0. Наш массив семафоров
состоит из одного семафора с номером 0. Код операции -1.*/
mybuf.sem_op = -1;
mybuf.sem_flg = 0;
mybuf.sem_num = 0;
if(semop(semid, &mybuf, 1) < 0){
printf("Can′t wait for condition
");
exit(-1);
}
printf("Condition is present
");
return 0;
}
/* Программа 08-1b.c для иллюстрации работы с
семафорами */
/* Эта программа получает доступ к одному системному семафору
и увеличивает его на 1*/
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
int main()
{
int semid; /* IPC дескриптор для массива IPC
семафоров */
char pathname[] = "08-1a.c"; /* Имя файла,
использующееся для генерации ключа. Файл с таким
именем должен существовать в текущей директории */
key_t key; /* IPC ключ */
struct sembuf mybuf; /* Структура для задания операции
над семафором */
/* Генерируем IPC ключ из имени файла 08-1a.c в текущей
директории и номера экземпляра массива семафоров 0 */
if((key = ftok(pathname,0)) < 0){
printf("Can′t generate key
");
exit(-1);
}
/* Пытаемся получить доступ по ключу к массиву
семафоров, если он существует, или создать его из
одного семафора, если его еще не существует, с правами доступа
read & write для всех пользователей */
if((semid = semget(key, 1, 0666 | IPC_CREAT)) < 0){
printf("Can′t get semid
");
exit(-1);
}
/* Выполним операцию A(semid1,1) для нашего массива
семафоров. Для этого сначала заполним нашу структуру.
Флаг, как обычно, полагаем равным 0. Наш массив
семафоров состоит из одного семафора с номером 0.
Код операции 1.*/
mybuf.sem_op = 1;
mybuf.sem_flg = 0;
mybuf.sem_num = 0;
if(semop(semid, &mybuf, 1) < 0){
printf("Can′t wait for condition
");
exit(-1);
}
printf("Condition is set
");
return 0;
}
8 чтение содержимого раздела реестра
#include <windows.h>
#include <iostream.h>
#include <iomanip.h>
#include <string.h>
#define STR_HKEY_LOCAL_MACHINE "HKEY_LOCAL_MACHINE"
#define STR_HKEY_CLASSES_ROOT "HKEY_CLASSES_ROOT"
#define STR_HKEY_USERS "HKEY_USERS"
#define STR_HKEY_CURRENT_USER "HKEY_CURRENT_USER"
#define LEN_HKEY_LOCAL_MACHINE (sizeof(STR_HKEY_LOCAL_MACHINE)-1)
#define LEN_HKEY_CLASSES_ROOT (sizeof(STR_HKEY_CLASSES_ROOT)-1)
#define LEN_HKEY_USERS (sizeof(STR_HKEY_USERS)-1)
#define LEN_HKEY_CURRENT_USER (sizeof(STR_HKEY_CURRENT_USER)-1)
#define SWAP_ENDIAN(x) (((x<<24)&0xFF000000)|((x<<8)&0xFF0000)|\
((x>>8)&0xFF00)|((x>>24)|0xFF))
void printval(unsigned char *pBuffer, DWORD dwType, DWORD dwSize) {
switch (dwType)
{
case REG_BINARY:
cout << "Binary data:"; {
for (unsigned int i = 0; i < dwSize; i++) {
if (i % 16 == 0) cout << '\n';
cout.fill('0');
cout << hex << setw(2) <<
(unsigned int)(pBuffer[i]) << ' ';
} }
cout << '\n';
break;
case REG_DWORD:
cout.fill('0');
cout << "Double word: " << hex << setw(8) << *((unsigned int *)pBuffer) << '\n';
break;
case REG_DWORD_BIG_ENDIAN: // Intel specific!
cout.fill('0');
cout << "Big-endian double word: " << hex << setw(8) <<
SWAP_ENDIAN(*((unsigned int *)pBuffer)) << '\n';
break;
case REG_EXPAND_SZ:
cout << "Expandable string: " << pBuffer << '\n';
break;
case REG_LINK:
cout << "Unicode link.";
break;
case REG_MULTI_SZ:
cout << "Multiple strings:\n"; {
char *pStr;
int i;
for (i = 0, pStr = (char *)pBuffer; *pStr != '\0'; i++, pStr += strlen((char *)pStr) + 1) {
cout << "String " << i << ": " << pStr << '\n';
} }
break;
case REG_NONE:
cout << "Undefined value type.\n";
break;
case REG_RESOURCE_LIST:
cout << "Resource list.\n";
break;
case REG_SZ:
cout << "String: " << pBuffer << '\n';
break;
default:
cout << "Invalid type code.\n";
break;
} }
void main(void) {
char szKey[1000];
char *pKey;
HKEY hKey, hSubKey;
DWORD dwType;
DWORD dwSize;
unsigned char *pBuffer;
int nKey;
while (1) {
cout << "Enter key: ";
cin.getline(szKey, 1000);
nKey = strcspn(szKey, "\\");
hKey = NULL;
if (!strncmp(szKey, STR_HKEY_LOCAL_MACHINE, nKey) &&
nKey == LEN_HKEY_LOCAL_MACHINE)
hKey = HKEY_LOCAL_MACHINE;
if (!strncmp(szKey, STR_HKEY_CLASSES_ROOT, nKey) &&
nKey == LEN_HKEY_CLASSES_ROOT)
hKey = HKEY_CLASSES_ROOT;
if (!strncmp(szKey, STR_HKEY_USERS, nKey) &&
nKey == LEN_HKEY_USERS)
hKey = HKEY_USERS;
if (!strncmp(szKey, STR_HKEY_CURRENT_USER, nKey) &&
nKey == LEN_HKEY_CURRENT_USER)
hKey = HKEY_CURRENT_USER;
if (hKey == NULL || szKey[nKey] != '\\') {
cout << "Invalid key.\n";
continue;
}
pKey = szKey + nKey + 1;
nKey = strcspn(pKey, "\\");
while (pKey[nKey] == '\\')
{
pKey[nKey] = '\0';
if (RegOpenKeyEx(hKey, pKey, NULL, KEY_READ,&hSubKey) == ERROR_SUCCESS) {
RegCloseKey(hKey);
hKey = hSubKey;
}
else {
RegCloseKey(hKey);
hKey = NULL;
break; }
pKey += nKey + 1;
nKey = strcspn(pKey, "\\"); }
if (hKey == NULL) {
cout << "Invalid key.\n";
continue;
}
if (RegQueryValueEx(hKey, pKey, NULL, &dwType, NULL,&dwSize) == ERROR_SUCCESS) {
pBuffer = (unsigned char *)malloc(dwSize);
if (pBuffer == NULL) {
cout << "Insufficient memory.\n";
break; }
if (RegQueryValueEx(hKey, pKey, NULL, &dwType, pBuffer,&dwSize) == ERROR_SUCCESS)
printval(pBuffer, dwType, dwSize);
else
cout << "Error reading key.\n";
free(pBuffer);
}
else
cout << "Error reading key.\n";
RegCloseKey(hKey);
} }