
- •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. Побудувати параметризований клас черги.
35.4 Вычислить значение арифметического выражения, преобразовав его в постфиксную форму. Предусмотреть со скобками и без скобок.(со стеком)
#include <stdio.h>
#include <string.h>
#include <conio.h>
// максимальное количество элементов в стеках
const int max_stack_len = 10000;
char stack_op[max_stack_len]; // Стек операций
char stack_nm[max_stack_len]; // Стек операндов
int stack_op_top = 0; // Переменная, указывающая на вершину стека операций
int stack_nm_top = 0; // Переменная, указывающая на вершину стека операндов
// Проверка содержимого вершины стека операций
char top_op() {
if (stack_op_top != 0) return (stack_op[stack_op_top-1]);
return (0);
}
// добавление значения в стек операций
void push_op(char value) {
stack_op[stack_op_top] = value; stack_op_top++;
}
// снятие элемента с вершины стека операций
char pop_op() {
stack_op_top--; return stack_op[stack_op_top];
}
// проверка на пустоту стека операций
int empty_op() {
if (stack_op_top == 0) return 1;
return 0;
}
// Проверка содержимого вершины стека операндов
char top_nm() {
if (stack_nm_top != 0)return (stack_nm[stack_nm_top-1]);
return (0);
}
// добавление значения в стек операндов
void push_nm(char value) {
stack_nm[stack_nm_top] = value; stack_nm_top++;
}
// снятие элемента с вершины стека операндов
char pop_nm() {
stack_nm_top--;
return stack_nm[stack_nm_top];
}
// проверка на пустоту стека операндов
int empty_nm() {
if (stack_nm_top == 0) return 1;
return 0;
}
// выделение числа из строки. вход: str - исходная строка, i - номер элемента, начиная скоторого необходимо выделить число, ф-я возвращает выделенное из строки число и новое значение индекса i
float get_digits(char *str, int &i)
{
float k=0.0, d=0.0;
while(str[i]!=0 && ((str[i]>='0' && str[i]<='9') || str[i]=='.')) {
if(str[i]=='.') d = 1;
else {k *= 10.0; k += str[i]-'0'; d *= 10;}
i++;
}
if(d==0) d=1; return(k/d);
}
// вычисление находящихся в стеке данных. выход: результаты вычислений накапливаются в стеке операндов
int count() {
char op;
int flag=1;
float v1,v2;
while(!empty_op() && top_op() != '(') {
op = pop_op();
if(op=='+') {
v2 = pop_nm();
v1 = pop_nm();
push_nm(v1+v2);
}
if(op=='-') {
v2 = pop_nm(); v1 = pop_nm(); push_nm(v1-v2);
}
if(op=='*') {
v2 = pop_nm(); v1 = pop_nm(); push_nm(v1*v2);
}
if(op=='/') {
v2 = pop_nm();
v1 = pop_nm();
if(v2==0.0) { flag=0; break; }
push_nm(v1/v2);
}
}
return(flag);
}
void main() {
char str[256]; int flag=1; float v;
printf("Введите выражение: "); scanf("%s", str);
for (int i=0; i<strlen(str); i++) {
if (str[i] >= '0' && str[i] <= '9') push_nm(get_digits(str,i));
if (str[i] == '(') push_op(str[i]);
if (str[i] == '*' || str[i] == '/') push_op(str[i]);
if (str[i] == '+' || str[i] == '-') {
if (count()==0) { flag=0; break; }
push_op(str[i]);
}
if (str[i] == ')') {
if (count()==0) { flag=0; break; }
// если на стеке операций не находится соответствующая
// открывающаяся скобка, то скобки неправильно расставлены
if (empty_op()) { flag=0; break; }
pop_op();
}
}
if(count()==0) flag=0;
//если остались невычисленные операции, то в выражении есть ошибка
if(!empty_op()) flag = 0;
//если в стеке операндов нет ответа, то в выражении есть ошибка
if(empty_nm()) flag = 0; else v = pop_nm();
// если после снятия ответа со стека операндов в нем ещё остались значения, то выражение содержит ошибку
if(!empty_nm()) flag=0;
if(flag) printf("%f\n", v);
else printf("Ошибка в выражении");
}
42.4 Скласти мовою С++ програму з використанням функції, що заповнює елементи матриці розміром mxn послідовно значеннями цілих чисел 0,1,2,3... Для форматування матриці в основній програмі використовувати динамічний масив, тому що розміри матриці зазделегіть не відомі.
#include <iostream.h>
#include <process.h> //Для exit().
int **single_matr(int n, int m)
{
//Вспомогательный указатель на матрицу.
int **p;
//Массив указателей на строки - одномерные массивы.
p= new int *[n];
if (p==NULL)
{
cout << "Не создан динамический массив!";
exit(1);
}
int mmm=0;
for (int i=0;i<n;i++)
{ //Формирование строки элементов типа int.
p[i]=new int [m];
if (p[i]==NULL)
{
cout << " Не создан динамический массив!";
exit(1);
}
//Заполнение текущей строки.
for (int j=0;j<m;j++)
{
p[i][j]=mmm;
mmm++;
}
}
return p;
}
void main()
{
int n, m;
cout << "\nЗадайте порядок матрицы: ";
cin >> n;
cout << "\nЗадайте порядок матрицы: ";
cin >> m;
int **matr; //Указатель для формируемой матрицы.
matr = single_matr(n, m);
for (int i=0;i<n;i++)
{
cout << "\nстрока " << (i+1) << ": ";
for (int j=0;j<n;j++)
cout << "\t" << matr[i][j];
}
for (i=0;i<n;i++) //Очистка памяти.
delete matr[i];
delete [] matr;
}
43.4) Программа приближенного вычисления уравнения x=2cos(x) с заданной точность e.
#include <iostream.h>
#include <math.h>
// Решение уравнения x=2cos(x) с заданной точностью e
// Метод решения: метод касательных Ньютона.
// для этого найдем производную:
// x=2cos(x) ..... 1=-2sin(x)
// используем формулу Xn = Xn-1 - F(Xn-1)/F'(Xn-1);
int main ()
{
double e;
double xn=0, xo, dx=0.001;
cout << "Введите точность e=";
cin >> e;
do
{
xo = xn;
xn = xo - (2.0*cos(xo)-xo)/(-2.0*sin(xo)-1.0);
xo += dx;
} while ( fabs(xo - xn)>e ) ;
cout << "ответ: корень 1 = " << xn << "\n";
cout << " корень 2 = " << -1.0 * xn << "\n";
return 0;
}