Отчет по лабораторной работе №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; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!