Мегаобучалка Главная | О нас | Обратная связь


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



2018-07-06 473 Обсуждений (0)
Лабораторная работа №4 0.00 из 5.00 0 оценок




Конвертор текста из кодировки MS Windows в кодировку MS-DOS

 

1. Цель работы: Приобретение навыка работы со статическими массивами и указателями, а также освоение стандартных функций создания, открытия, закрытия, записи и чтения из файла.

 

Домашнее задание

1. Запишите последовательность кодов, которым представлена строка "Здравствуй мир!" в MS-DOS и MS Windows кодировках.

2. Для перекодировки символа 'А' русского алфавита из кодировки MS-DOS в кодировку MS Windows необходимо выполнить следующие операторы (unsigned char p = 'A'; p= p+64;), что нужно сделать, чтобы перекодировать символ 'Ё'?

 

Лабораторное задание

3.1 Набрать программу №1 и программу №2

//Программа №1

//В свойствах проекта в опциях по С/С++->Препроцессор->Определения препроцессора; добавить _CRT_SECURE_NO_WARNINGS

#include "stdafx.h"

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <fcntl.h>

#include <sys\stat.h>

#include <io.h>

using namespace std;

int main(void){

setlocale(LC_ALL, "rus");

int handle;

char msg[] = "Hello world";

if ((handle = _open("C:\\RXX\\TEST.txt", O_CREAT | O_TEXT| O_RDWR, S_IWRITE | S_IREAD)) == -1) {

perror("Error:");

getchar();

return 1;

}

_write(handle, msg, strlen(msg)); //msg == &msg[0]

_close(handle);

cout<<"\n Hello world - write to file";

getchar();

return 0;

}

//Программа №2

#include "stdafx.h"

#include <stdio.h>

#include <io.h>

#include <malloc.h>

#include <fcntl.h>

#include <process.h>

#include <sys\stat.h>

#include <iostream>

using namespace std;

int main(void){

 

int handle, bytes;

if ((handle =_open("C:\\RXX\\TEST.txt", O_RDWR | O_BINARY, S_IWRITE | S_IREAD)) == -1){

printf("Error Opening File\n");

getchar();

exit(1);

}

long longFile = _lseek(handle,0,SEEK_END);

_lseek(handle,0,SEEK_SET);

unsigned char* buf = (unsigned char*)malloc(longFile+1);

if ((bytes = _read(handle, buf, longFile)) == -1) {

printf("Read Failed.\n");

free(buf);

getchar();

exit(1);

}

else {

printf("Read: %d bytes read.\n", bytes);

// buf[longFile]='\0';

cout<<buf;

}

free(buf);

getchar();

_close(handle);

return 0;

}

3.2 Отладить программы №1и №2. (Программа №1 является примером создания нового файла Test.txt и записи в него текстовой строки "Hello world". Программа № 2 является примером чтения данных из файла Test.txt в буфер.)

3.3 Модифицировать программу №2 так, чтобы она читала данные из файла и записывала их в этот же файл в обратном порядке, т.е. если в файле содержится строка "Hello world", то после выполнения Вашей программы в этом файле должна содержатся строка "dlrow olleH"

3.4 Написать программу, которая бы перекодировала текстовый файл из кодировки MS-DOS в кодировку MS Windows. (Таблица кодов приведена в [1] на стр. 488-493).

3.5 Ответить устно на контрольные вопросы.

3.6 Написать отчет.

 

Содержание отчета

4.1 Титульный лист. Домашнее задание.

4.2 В отчете привести тексты программ и описание всех использованных библиотечных функций, а также кратко пояснить их назначение.

 

5. Контрольные вопросы

5.1 Как определить указатель? Какое множество операций определено над указателями? Приведите примеры операций с указателями.

5.2 Чем является переменна s, определенная как int b; int& s = b;? Какие операции определены над s.

5.3 Запишите описание функции lseek() и кратко поясните её назначение.

5.4 Для массива определенного как double Ar[3][4][5], чем является переменная Ar, Ar[2], Ar[1][3], ***Ar, *(*(*(Ar+1)+2)+1).

5.5 Поясните значение операций разыменования * и получения адреса &. Приведите примеры использования этих операций.

5.6 Напишите функцию, конвертирующую содержимое строки, состоящей из прописных букв в строчные и наоборот.

5.7 Напишите функцию, которая подсчитывает количество гласных и согласных в строке.

5.8 Напишите функцию, которая подсчитывает количество букв и цифр в строке.

5.9 Напишите функцию, которая подсчитывает число прописных и строчных букв в строке.

5.10 Напишите функцию, которая сравнивает две строки, и если они совпадают, то возвращает единицу (истину) в противном случае ноль (ложь).

5.11Напишите функцию, которая сортирует строку по алфавиту.

5.12Напишите функцию, которая шифрует текстовый файл путем замены значения символа с помощью выражения sym = F(sym), где F( ) - функция (например, значение символа С заменяется на С=С^0xFF).

 

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

Способы передачи данных в функции языка С++

 

1. Цель работы: Изучение способов передачи параметров в функцию. Рекурсивные функции.

 

Домашнее задание

2.1 Приведите описание функций принимающие параметры по значению, по ссылке и по указателю. Поясните, какая разница между этими способами передачи параметров в функцию. Напишите, что будет выведено на экран следующей программой.

#include <iostream.h>

int f1(int b) {b=b+1; return b;}// int b = a;

int& f2(int& b) {b=b+1; return b;} // int& b = a;

int* f3(int* b) { *b=*b+1;return b;} // int* b = &a;

void main(){

int a =1; cout<<"\n a = "<<a;

cout<<"\n f1(a) = "<<f1(a); cout<<"\t a = "<<a; // f1(a) = 2 a = 1;

cout<<"\n f2(a) = "<<f2(a); cout<<"\t a = "<<a;// f2(a) = 2 a = 2;

cout<<"\n *f3(&a) = "<<*f3(&a); cout<<"\t a = "<<a; // *f3(&a) = 3 a = 3;

}

 

2.2 Переделайте следующую функцию, вычисляющую факториал с помощью цикла на рекурсивный вариант:

double factorial(unsigned value)

{

unsigned i = 1;

double result = 1;

for (; i <= value; i++) result *= i;

return result;

}

2.3. Согласно номеру вашего варианта рассчитайте значение интеграла от:

1. F(x) = sin(x)+4*cos(2*x) oт 0 до π/4

2. F(x) = 7*x2+5*x+3 от 3 до 6

3. F(x) = -7*x3+3*cos(3*x) –x от 0 до π/2

4. F(x) = 5*cos(3*x)-12*sin(3*x) от π/4 до π

5. F(x) = 0.01*(1-x2) от 0.01 до 0.5

6. F(x) = 1/(1-x) от 2 до 5

7. F(x) = sin(x)+(x2+4) от - π/4 до π/4

8. F(x) = 7*x3-5*x+7 от 1 до 2

9. F(x) = sin(x)+cos(4x) от 0 до π

10. F(x) = 0.1*x2(1-x3) от -3 до 3

 

Лабораторное задание

3.1 Наберите программу, использующую рекурсивный алгоритм Хаара, для сортировки массива случайных чисел.

#include "stdafx.h"

# include <stdio.h>

# include <stdlib.h>

#include <time.h>

# define DIMENSION 5000

void QuickSort(int* array, int First, int Last)

{

int Temp, LowerBoundary, UpperBoundary, Separator;

LowerBoundary = First;

UpperBoundary = Last;

Separator = array[(First + Last) / 2];

do

{

while (array[LowerBoundary] < Separator) LowerBoundary++;

while (array[UpperBoundary] > Separator) UpperBoundary--;

if (LowerBoundary <= UpperBoundary)

{

Temp = array[LowerBoundary];

array[LowerBoundary++] = array[UpperBoundary];

array[UpperBoundary--] = Temp;

}

} while (LowerBoundary <= UpperBoundary);

if (First < UpperBoundary) QuickSort(array, First, UpperBoundary);

if (LowerBoundary < Last) QuickSort(array, LowerBoundary, Last);

}

void main()

{

time_t ftime, stime;

int i = 0;

int* ar = (int*) malloc(sizeof(int)*DIMENSION);

for (; i < DIMENSION; ar[i++] = rand()%1000) ;

time(&ftime); // время начала сортировки

QuickSort(ar, 0, DIMENSION -1);

time(&stime); //время окончания сортировки

printf("\n\n");

// for (i = 0; i < DIMENSION; printf("\n%d", ar[i++])) ;

printf("\n stime - ftime = %d", stime - ftime);

getchar();

free(ar);

}

3.2 Оцените время сортировки массивов из 5000, 50000, 500000 элементов алгоритмом Хаара и методом пузырьковой сортировки. Данные измерений занесите в таблицу. Сделайте выводы.

3.3. Напишите программу, вычисляющую значение интеграла от функции, заданной в пункте 2.3, методом прямоугольников и методом трапеций. Сравните результат численного интегрирования, с результатами, полученными вами вручную.

3.4 Нарисуйте блок схему, алгоритма сортировки Хаара.

3.5 Наберите программу, рисующую на экране геометрические фигуры.

 

// В свойствах проекта в опциях по C/С++ ->Библиотека времени выполнения; установить /MTd

//В свойствах проекта Компоновщик->Ввод->Дополнительные зависимости; поставить на первое место uafxcwd.lib

 

#include "stdafx.h"

#include "afxwin.h"

#include "iostream"

using namespace std ;

void main(){

HWND hwnd;

hwnd=FindWindow(_T("ConsoleWindowClass"),_T("C:\\Windows\\system32\\cmd.exe"));

if (hwnd!=NULL){

HDC hdc;

hdc=GetWindowDC(hwnd);

POINT pt[3];

CPoint pt1(100,100), pt2(200,200);

pt[0].x = 0;pt[0].y=0; pt[1].x = 100;pt[1].y=100; pt[2].x = 50;pt[2].y=100;

if (hdc!=0){

CPen pen(PS_SOLID,4,RGB(255,0,0));

SelectObject(hdc,pen);

Ellipse(hdc,90,100,120,150);// рисуем эллипс

Arc(hdc,pt1.x,pt1.y,pt2.x,pt2.y,100,200,100,100);//рисуем круг

Polyline(hdc,pt,3 ); //рисуем ломаную

getchar();

for(int i=0; i < 100; i++){ // перемещение по экрану

CPen pen1(PS_SOLID,4,RGB(0,255,0));

SelectObject(hdc,pen1);

Arc(hdc,pt1.x,pt1.y,pt2.x,pt2.y,100,200,100,200);//рисуем круг

Sleep(24);//задержка на 24мс

CPen pen2(PS_SOLID,4,RGB(0,0,0));

SelectObject(hdc,pen2);

Arc(hdc,pt1.x,pt1.y,pt2.x,pt2.y,100,200,100,200);//стираем круг

pt1.x+=1; pt1.y+=1;pt2.x+=1;pt2.y+=1; //Меняем координаты круга

}

ReleaseDC(hwnd, hdc);

}

else cout << "Error DC Window" << endl;

}

else cout << "Error Find Window" << endl;

}

3.6. Наберите программу, рисующую на экране геометрические фигуры.

3.7. Получите рисунок у преподавателя и напишите программу рисующую его на экране.

3.8. Ответьте устно на контрольные вопросы.

3.9. Напишите отчет.

 

Содержание отчета

4.1 Титульный лист. Домашнее задание..

4.2 Результаты выполнения пунктов 3.2, 3.3, 3.4 и 3.7.

 

5. Контрольные вопросы

5.1 Чем отличается передача параметров в функцию по значению и по ссылке?

5.2 Каким образом программа может получать данные из командной строки?

5.3 Как можно из функции main получить доступ к переменным окружения?

5.4 Может ли функция возвращать массив? Принимать массив по значению?

5.5 Может ли аргументом функции быть другая функция? Указатель на другую функцию?

5.6 Приведите примеры использования указателя на функцию.

5.7 Как объявляется функция с переменным числом параметров? Приведите примеры.

5.8 Каким образом можно определить, сколько параметров ввел пользователь в командной строке?

5.9 Разработайте рекурсивный алгоритм расчета определителя квадратной матрицы.

5.10 Объясните алгоритм быстрой сортировки, используемый программой из пункта 2.2. лабораторного задания.

5.11 Почему при работе с рекурсивными функциями часто переполняется стек?

5.12. Покажите действие алгоритма быстрой сортировки на примере следующего массива:

{6,2,1,3,4,5,8,7,0}.

5.13. Всегда можно ли итерационный алгоритм заменить рекурсивным? Рекурсивный итерационным?

 



2018-07-06 473 Обсуждений (0)
Лабораторная работа №4 0.00 из 5.00 0 оценок









Обсуждение в статье: Лабораторная работа №4

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (473)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)