С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
1

Проверка границ массива

05.03.2011, 15:13. Показов 3727. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Есть вопросы в решении задачи из книги Лафоре: массив - очередь, помещаем человека в конец очереди, выход человека из очереди по принципу FIFO. Также необходимо условие на проверку выхода за границы массива. Написал код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include "stdafx.h"
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////////////////////////////////////////////
class queue
{
private:
    static const int MAX = 10;
    int st [MAX];
    int head;                                            // начало очереди
    int tail;                                               // конец очереди
public:
    queue()                         // конструктор
    { head =0; tail = 0; }
    void put(int var)
    {
        if (tail == MAX - 1)
        {
            tail = -1;
        }
        st [tail--] = var;
    }
    int get()
    {
        if (head == MAX - 1)
        {
            head = -1;
        }
        return st [head--];
    }
};
////////////////////////////////////////////////////////////////////////////////////////////////////////
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    queue q1;
    q1.put(1);
    q1.put(2);
    cout << "1: " << q1.get() << endl;
    cout << "2: " << q1.get() << endl;
    q1.put(4);
    q1.put(5);
    q1.put(6);
    q1.put(3);
    cout << "3: " << q1.get() << endl;
    cout << "4: " << q1.get() << endl;
    cout << "5: " << q1.get() << endl;
    cout << "6: " << q1.get() << endl;
    q1.put(4);
    q1.put(5);
    q1.put(6);
    q1.put(3);
    cout << "7: " << q1.get() << endl;
    cout << "8: " << q1.get() << endl;
    cout << "9: " << q1.get() << endl;
    cout << "10: " << q1.get() << endl;
    q1.put(11);
    cout << "11: " << q1.get() << endl;
    system("PAUSE");
    return 0;
}
Не понимаю, почему не происходит проверки и, почему программа работает, но выдает ошибку по завершении, что стек вокруг переменной был испорчен.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Блог
05.03.2011, 15:13
Ответы с готовыми решениями:

Указание границ массива C++
В паскале при объявлении массива можно воспользоваться таким нехитрым кодом var arr: array of...

Нарушение границ массива
Насколько мне известно в C++ нет проверки границ массива. Почему в следующем коде выскакивает...

Класс массив. Задания произвольных границ индексов массива
Составить класс для определения одномерных массивов целых чисел . Предусмотреть возможность...

Написать класс для динамического массива с проверкой границ (что подразумевают под инициализацией?)
Привет, народ, есть такое задание: 2. написать класс для динамического массива с проверкой...

5
2 / 2 / 0
Регистрация: 02.03.2011
Сообщений: 6
05.03.2011, 17:58 2
Если я всё правильно понял, ты пытаешься занести в несушествующий елемент масива
Цитата Сообщение от zabuka Посмотреть сообщение
q1.put(11);
и еще перепиши функцию "put"
ну где-то так:
C++
1
2
3
4
5
6
7
8
void put(int var)
{
  if(tail!=Max)
  {
    tail++;
    st[tail]=var;
  }
}
вроде так...
1
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
05.03.2011, 20:08 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const int MAX = 10;
class queue
{
private:
        int st [MAX];
        int head;                                            // начало очереди
        int tail;                                               // конец очереди
public:
        queue()                                                 // конструктор
        { head =0; tail = 0; }
        void put(int var)
        {
                if (tail == MAX-1)
                {
                        cout<<"Error"<<endl;  
                }
         else
                    { st [tail++] = var; }
        }
        int get()
        {
            if (head == MAX-1)
            {
                  cout<<"Error"<<endl;
                 return st[head-1];
                }
        else if(head == tail && tail>0)   //если вывели все элементы
        {
        int t=head;
        head=0; tail=0;   // то обнуляется очередь
        return st[t-1];
        }
        else if(head==tail) { return -1; }   //попытка обращения к несуществующему элементу
           return st [head++];
        }
};
1
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
05.03.2011, 21:47  [ТС] 4
Оба исправления работают не верно.
0
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
05.03.2011, 22:07 5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
...
#include <process.h>      // для exit ( )
 
class Stack
{
  private:             
    enum { MAX = 10 };     // размер стека
    int st[ MAX ];        // данные, хранящиеся в стеке
    int top;              // индекс последнего элемента в стеке
  public:
    Stack ( )            // конструктор
      { top = -1; }
    void push ( int var ) // помещение числа в стек
    {
        if(top>=MAX-1) 
          { cout << "\nОшибка: стек полон"; exit ( 1 ); }
       st[ ++top ] = var;
    }
    int pop ( )           // извлечение числа из стека
    { 
        if ( top < 0 )         // если стек пуст, то ошибка
          { cout << "\nОшибка: стек пуст\n"; exit ( 1 ); }
      return st[ top-- ]; 
    }
};
Точно. Первый пример был LIFO
1
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
06.03.2011, 14:26  [ТС] 6
Цитата Сообщение от dimon1984 Посмотреть сообщение
Точно. Первый пример был LIFO
Наоборот, у Вас сейчас LIFO, под тот код, что Вы написали
0
06.03.2011, 14:26
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
06.03.2011, 14:26
Помогаю со студенческими работами здесь

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

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива....

Создайте класс динамического массива, в котором реализована проверка выхода за границы массива
Создайте класс динамического массива, в котором реализована проверка выхода за границы массива....

Проверка массива
Ребята, суть в том, что есть массивчик чисел и есть заданное число F. Нам надо получить число F ,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru