Отчет по лабораторной работе №10
Постановка задачи
Написать программу, в которой создаются динамические массивы и выполнить их обработку в соответствии со своим вариантом.
Вариант задания
Сформировать двумерный массив. Удалить из него столбец с заданным номером;
Текст Программы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
//---------------------------------------------------------------------------
#pragma argsused
char* rus(const char* text); //создать вначале прграммы
int** create(int **, int &, int &);
void show(int **, int &, int & );
int** del(int **, int &, int &, int);
int main(int argc, char* argv[])
{
/*
7. Сформировать двумерный массив.
Удалить из него столбец с заданным номером;
*/
randomize(); // случайные числа
int x,y,temp2;
printf(rus("Введите размерности двумерного массива: \n"));
printf(rus("Строки: ")); scanf("%d", &x); // кол-во строк
printf(rus("Столбцы: ")); scanf("%d", &y); // кол-во столбцов
int **mas = new int *[x]; // указатель на указатель
create(mas,x,y); // ф-ия создания двумерного динамического массива
show(mas,x,y); // ф-ия показывающая массив
printf(rus("Введите столбец который вы хотите удалить: "));
scanf("%d",&temp2); // вводим столбец который хотим удалить
|
|
del(mas,x,y,temp2); // ф-ия по удалению нужного нам столбца
show(mas,x,y); // аналогично
for (int i = 0; i < x; i++)
delete mas[i]; // освобождаем память
delete []mas;
getch();
return 0;
}
int** create(int **mas, int& x, int& y)
{ // ф-ия по созданию двумерного динамического массива
for (int i = 0; i < x; i++)
{
int *temp = new int [y]; // создаем столбцы
for (int j = 0; j < y; j++)
{
temp[j] = random(10); // заполняем элементы рандомно
}
mas[i] = temp;
}
}
void show(int **mas, int &x, int &y)
{ // ф-ия показа массива
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y; j++)
{
printf("%d " ,mas[i][j]);
}
cout << endl;
}
}
int** del(int **mas, int &x, int &y, int temp2)
{
for (int i = 0; i < x; i++)
{
for (int j = 0; j < y-1; j++)
{ // идем по строкам и столбцам
|
|
// если попали на элемент ненужного нам столбца и дальше, то копируем в него
// все последующие элементы, и так по всем столбцам и строкам
if (j >= temp2-1)
{
mas[i][j] = mas[i][j+1];
}
}
}
y--; // удаляем столбец крайний
}
char bufrus[256];
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
//---------------------------------------------------------------------------
Результат работы программы
Отчет по лабораторной работе №11
Постановка задачи
Написать программу, в которой создаются динамические структуры и выполнить их обработку в соответствии со своим вариантом.
Для каждого вариант разработать следующие функции:
1. Создание списка.
|
|
2. Добавление элемента в список (в соответствии со своим вариантом).
3. Удаление элемента из списка (в соответствии со своим вариантом).
4. Печать списка.
5. Запись списка в файл.
6. Уничтожение списка.
7. Восстановление списка из файла.
Вариант задания
Сформировать двунаправленный список. Удалить из него первый элемент, добавить элемент в конец списка.
Текст программы
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include <windows.h>
#include <iomanip.h>
#include <ios.h>
//---------------------------------------------------------------------------
#pragma argsused
char* rus(const char* text);
struct spisok
{
int amount; // информационная часть структуры
spisok* next; // содержит адрес след элемента
spisok* prew; // предыдущего
};
spisok *first(int i); //1
void add(spisok **pend, int i); //1-2
|
|
void del(spisok **pbeg); //3
spisok *show(spisok *pbeg); //4
int in_to_file(FILE *f, spisok **pbeg); //5
void remove(spisok **pbeg, spisok **pend); //6
void from_file(FILE *f, spisok **pbeg, spisok **pend,int n); //7
int main(int argc, char* argv[])
{
/*
1. Создание списка.
2. Добавление элемента в список (в соответствии со своим вариантом).
3. Удаление элемента из списка (в соответствии со своим вариантом).
4. Печать списка.
5. Запись списка в файл.
6. Уничтожение списка.
7. Восстановление списка из файла.
Задание: 7. Сформировать двунаправленный список.
Удалить из него первый элемент, добавить элемент в конец списка.
*/
spisok *pbeg = first(1); // формирование первого элемента списка
spisok *pend = pbeg; // список заканчивается едва начавшись
// добавляем нужное нам кол-во элементов в конец списка
int n;
cout << rus("Введите кол-во элементов в списке: ");
cin >> n;
n++;
for (int i = 2; i < n; i++) add(&pend,i);
show(pbeg); // вывод списка
cout << endl;
// удаление первого элемента из списка
cout << rus("Удаляем первый элемент\n");
del(&pbeg);
show(pbeg); // вывод списка
cout << endl;
// добавление элемента в конец списка
cout << rus("Добавление элемента в конец списка\n");
add(&pend,n);
show(pbeg); // вывод списка
cout << endl;
// запись списка в файл
cout << rus("Запись в файл\n");
FILE *f;
in_to_file(f,&pbeg);
cout << endl;
// удаляем список
remove(&pbeg,&pend);
cout << endl;
// восстановление списка из файла
cout << rus("Восстанавливаем\n");
from_file(f,&pbeg,&pend,n);
show(pbeg); // вывод списка
getch();
return 0;
}
spisok *show(spisok *pbeg)
{
spisok *pv = pbeg; // ставим указатель на начало
while(pv) // пока pv не ноль показываем элементы
{
cout << pv -> amount << " ";
pv = pv -> next;
}
cout << endl;
}
spisok *first(int i)
{
spisok *pv = new spisok; // создаем новый элемент
pv -> amount = i; // присваиваем номер этому элементу
pv -> next = 0; // нет указателей никуда, т.к один элемент
pv -> prew = 0;
return pv; // возвращаем элемент
}
void add(spisok **pend, int i)
{
spisok *pv = new spisok; // новый элемент списка
pv -> amount = i; // присваиваем номер списку
pv -> next = 0; // указатель на след элемент отсутствует
pv -> prew = *pend; // указатель на предыдущий элемент
(*pend) -> next = pv; // с предыдущего элемента указатель на настоящий элемент
*pend = pv;
}
void del(spisok **pbeg)
{
spisok *pv = *pbeg; // ставим указатель на начало списка
*pbeg = (*pbeg) -> next; // переходим к след элементу
(*pbeg) -> prew = 0; // удаляем указатель на 1 первый элемент
delete pv; // удаляем 1 элемент
}
int in_to_file(FILE *f, spisok **pbeg)
{
spisok *pv = *pbeg; // ставим указатель на начало списка
f = fopen("f.txt","wb"); // открываем файл для записи
while (pv) // запись в файл
{
fwrite(pv, sizeof(pv), 1 , f);
pv = pv -> next;
}
fclose(f); // закрытие файла
return 0;
}
void remove(spisok **pbeg, spisok **pend)
{
spisok *first = *pbeg; // доп указатели
spisok *last = *pend;
spisok *pv = new spisok; // создаем новый элемент
do // делаем
{
pv = first; // элемент на начало
first = first->next; // укзатаель на след элемент
pv = NULL; // обнуляем элемент
}while(first!=last); // пока не дойдем до конца списка
first = NULL; // обнуляем
*pbeg = first;
*pend = last;
cout << rus("Удалили список\n");
}
void from_file(FILE *f,spisok **pbeg, spisok **pend,int n)
{
f = fopen("f.txt", "rb"); // файл для чтения
int i=0; // счетчик
n--; // уменьшаем кол-во элементов, чтоб без мусора
while((i < n)&&(!feof(f))) // пока файл считываем
{
spisok *pv = new spisok; // создаем новый элемент
fread(pv,sizeof(pv),1,f); // выгружаем в него инфу(т.е считываем)
cout << " i = " << i << " amount = " << pv->amount <<endl; // вывод
if (i == 0) // если первый элемент то
{ // создаем его
*pbeg = first(pv->amount);
*pend = *pbeg;
}
else add(pend,pv->amount); // иначе добавляем в конец списка
i++; // счетчик
};
fclose(f); // закрываем поток
cout << rus("\nВосстановили\n");
}
char bufrus[256];
char* rus(const char* text)
{
CharToOem(text,bufrus);
return bufrus;
}
//---------------------------------------------------------------------------
Результат работы программы
Дата добавления: 2018-05-13; просмотров: 241; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!