• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Массив и очередь

  • Автор темы Автор темы zapiska
  • Дата начала Дата начала

zapiska

Ученик
Регистрация
27 Ноя 2011
Сообщения
1
Реакции
0
Баллы
0
Массив и очередь

Дана программа
#include <iostream.h>
#include <stdlib.h>
#include <iomanip.h>
struct CH
{
int k;
CH *ptr;
};

void aadd_och( CH **, CH **);
void del_och ( CH **, CH **);
void main()
{
CH *pbeg=NULL, *pend=NULL;
char c;
while(1)
{
cout << "\n\n1. Добавление элемента в очередь\n";
cout << "2. Выборка элемента из очереди\n";
cout << "3. Выход из программы\n";
cout << "Ваш выбор:";
cin >> c;
switch©
{
case '1':
aadd_och(&pbeg, &pend);
break;
case '2':
del_och(&pbeg, &pend);
break;
case '3':
return;
}
}
}

void aadd_och ( CH **pn, CH **pk)
{
CH *r;
int m;
cout << "Введите целое число=";
cin >> m;
// выделяем динамическую память
r = new (CH);
if ( r == NULL)
{
cerr << "Ошибка выделения динамической памяти\n";
exit(1);
}
// заносим в дин. память введенное число
// и нулевое значение адреса
r->k = m;
r->ptr = NULL;

// определяем существуют ли очереди элементы

if (*pn == NULL)
{
// очередь пустая
// значит созданный элемент становится первым и последним
*pn = r;
*pk = r;
}
else
{
// в очереди есть элементы
// добавляем элемент в конец

(*pk)->ptr = r;
// в адресное поле элемента, который был
// последним занесл адрес вновь созданного эл-та

*pk = r; // вновь созданный элемент стал последним
// в очереди
}
}

void del_och ( CH **pn, CH **pk)
{
CH *p;
if (pn == NULL)
cout << "Очередь пуста. Выбирать нечего.\n";
else
{
p = *pn;
cout << "Из очереди выбран эл-т = " << p->k << endl;
*pn = p->ptr; // 2-ой элемент в очереди стал 1-ым
delete p; // удалили первый элемент из очереди
}
}

Требуется модифицировать текст программы для реализации самостоятельного задания.
Дан массив a[5][5]. Требуется ввести данные в массив. Все элементы массива записать в очередь, вывести содержимое очереди на экран двумя столбцами.

Замучилась просто

Вот до чего дошла
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <stdlib.h>
#include <iomanip>
#define I 5
#define J 5

using namespace std;

struct CH
{
int k;
CH *ptr;
};


void inputmas( int [J], char);
void aadd_och( CH **, CH **, int);
void printochered( int [j], char);

void main()
{
int a[5][5];

CH *pbeg=NULL, *pend=NULL;
char c;
while(1)
{
setlocale(LC_ALL,"Rus"); // вывод русских букв
cout << "\n\n1. Создание массива \n";
cout << "2. Запись элементов массива в очередь\n";
cout << "3. Вывод очереди на экран\n";
cout << "4. Выход из программы\n";
cout << "Ваш выбор:";
cin >> c;
switch©
{
case '1':
inputmas( a, 'a');
break;
case '2':
for (int i=0; i<I; i++)
for (int j=0; j < J; j++)
aadd_och(&pbeg, &pend, array[j]);
break;
case '3':
printochered( b, 'b');
break;
case '4':
return;
}
}
}


void inputmas(int m[J], char im)
{
int *p;
if (p = new int[j])
{
setlocale(LC_ALL,"Rus");
cout<<"\nВведите значения элементов массива";
for (int i=0; i<I; i++)
for (int j=0; j < J; j++)
{
cout<<im<<"\n p[" << i << " ][ " << j << " ]=";
cin>>*(p+i*|+j);
}
cout<<"\nВывод значений элементов массива";
for (i=0; i<I; i++)
for ( j=0; j < J; j++)
{
cout<<im<<" p["<<i<<"]["<<j<<"]="<<*(p+i*|+j);
}
else
cout<<"\nПамять не выделена";
}



void aadd_och ( CH **pn, CH **pk, int numberToMas)
{
CH *r;
// выделяем динамическую память
r = new (CH);
if ( r == NULL)
{
cerr << "Ошибка выделения динамической памяти\n";
exit(1);
}
// заносим в дин. память введенное число
// и нулевое значение адреса
r->k = numberToMas;
r->ptr = NULL;

// определяем существуют ли очереди элементы

if (*pn == NULL)
{
// очередь пустая
// значит созданный элемент становится первым и последним
*pn = r;
*pk = r;
}
else
{
// в очереди есть элементы
// добавляем элемент в конец

(*pk)->ptr = r;
// в адресное поле элемента, который был
// последним занесл адрес вновь созданного эл-та

*pk = r; // вновь созданный элемент стал последним
// в очереди
}
}
но не пойму как двумерный массив добавит в очередь.........
 
Назад
Сверху