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

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

05.03.2011, 15:13. Показов 3769. Ответов 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
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.03.2011, 15:13
Ответы с готовыми решениями:

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

Нарушение границ массива
Насколько мне известно в C++ нет проверки границ массива. Почему в следующем коде выскакивает ошибка? void main(){ char str; ...

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

5
2 / 2 / 0
Регистрация: 02.03.2011
Сообщений: 6
05.03.2011, 17:58
Если я всё правильно понял, ты пытаешься занести в несушествующий елемент масива
Цитата Сообщение от 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
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
 Аватар для zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
05.03.2011, 21:47  [ТС]
Оба исправления работают не верно.
0
40 / 38 / 5
Регистрация: 22.01.2011
Сообщений: 670
05.03.2011, 22:07
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
 Аватар для zabuka
1 / 1 / 0
Регистрация: 16.12.2010
Сообщений: 38
06.03.2011, 14:26  [ТС]
Цитата Сообщение от dimon1984 Посмотреть сообщение
Точно. Первый пример был LIFO
Наоборот, у Вас сейчас LIFO, под тот код, что Вы написали
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
06.03.2011, 14:26
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Вопросы на собеседованиях по микросервисам
ArchitectMsa 27.03.2025
Работодатели ищут не просто разработчиков, знающих базовые концепции, а специалистов, разбирающихся в тонкостях масштабирования, отказоустойчивости и производительности. Сейчас на первый план выходят. . .
Взаимодействие Python с REST API
py-thonny 27.03.2025
REST API - это архитектурный стиль взаимодействия компонентов распределённого приложения в сети. Python располагает функциональным набором инструментов для работы с REST API и основная библиотека для. . .
sshd restrictions, ssh access limitations
jigi33 26.03.2025
sshd restrictions | ssh access limitations рестрикции доступа на сервер sshd статья: https:/ / www. golinuxcloud. com/ restrict-allow-ssh-certain-users-groups-rhel
Компиляция C++ с Clang API
NullReferenced 24.03.2025
Компиляторы обычно воспринимаются как черные ящики, которые превращают исходный код в исполняемые файлы. Мы запускаем компилятор командой в терминале, и вуаля — получаем бинарник. Но что если нужно. . .
Многопоточное программировани­е в C#: Класс Thread
UnmanagedCoder 24.03.2025
Когда запускается приложение на компьютере, операционная система создаёт для него процесс - виртуальное адресное пространство. В C# этот процесс изначально получает один поток выполнения — главный. . .
SwiftUI Data Flow: Передача данных между представлениями
mobDevWorks 23.03.2025
При первом знакомстве со SwiftUI кажется, что фреймворк предлагает избыточное количество механизмов для передачи данных: @State, @Binding, @StateObject, @ObservedObject, @EnvironmentObject и другие. . . .
Моки в Java: Сравниваем Mockito, EasyMock, JMockit
Javaican 23.03.2025
Как протестировать класс, который зависит от других сложных компонентов, таких как базы данных, веб-сервисы или другие классы, с которыми и так непросто работать в тестовом окружении? Для этого и. . .
Архитектурные паттерны микросервисов: ТОП-10 шаблонов
ArchitectMsa 22.03.2025
Популярность микросервисной архитектуры объясняется множеством важных преимуществ. К примеру, она позволяет командам разработчиков работать независимо друг от друга, используя различные технологии и. . .
Оптимизация рендеринга в Unity: Сортировка миллиона спрайтов
GameUnited 22.03.2025
Помните, когда наличие сотни спрайтов в игре приводило к существенному падению производительности? Время таких ограничений уходит в прошлое. Сегодня геймдев сталкивается с задачами совершенно иного. . .
Образование и практика
Igor3D 21.03.2025
Добрый день А вот каково качество/ эффективность ВУЗовского образования? Аналитическая геометрия изучается в первом семестре и считается довольно легким курсом, что вполне справедливо. Ну хорошо,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер