Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2013, 13:34   #1
nati_94
Пользователь
 
Регистрация: 18.02.2013
Сообщений: 25
Вопрос с++,циклическая очередь, сразу норм выводит, а потом на где-то логика нарушается и неправильно выводит

нарушается после того как удаляю элемент, и добавляю элемент снова

Организуйте циклическую очередь для хранения целых чисел.
Для очереди используйте массив указателей на структуры.
Продемонстрируйте добавление элемента, удаление элемента, добавление в переполненную очередь, удаление из пустой очереди. После каждого примера вывести содержимое очереди.
Код:

 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
 #include <ctype.h>
 #include <iostream>
 #include <conio.h>
 #define MAX 3
 using namespace std;
 int q[MAX];
 int qnext=0,qindex=0,qlength=MAX;


 int main(void)
 {
 void Add(void);
 int Delete(void);
 void Print(void);
 setlocale(0,"");
 for(int t=0; t < MAX; ++t) q[t] = NULL;
 int a;
 bool flag=true;
 while(flag)
 {
 printf("Выберите требуемый пункт меню:\n");
 printf("Ввести (1), Удалить (2), Список (3),Выход (0): ");
 cin >> a;

 switch(a)
 {
 case 0: flag=false; break;
 case 1: Add(); break;
 case 2: Delete(); break;
 case 3: Print(); break;
 default: printf("Введено некорректное значение. Попробуйте еще раз!\n\n");
 }
 } 
 }

 void Add(){
 if(qnext+1 == qindex || (qnext == qlength && !qindex))
 {
 cout<<"Мест нет! Очередь будет переполнена!\n";
 qnext=0;
 scanf("%d", &q[qnext]); //запись;
 // Смещение позиции записи
 // Циклический переход.
 return;
 }
 scanf("%d", &q[qnext]); //запись;
 qnext++; // Смещение позиции записи
 if(qnext>qlength)
 qnext=0; // Циклический переход.
 }

 int Delete()
 {
 if(qindex == qlength)
 qindex=0; // Циклический переход.
 if(qindex+1 == qnext)
 {
 cout<<"Очередь пуста.\n";
 return 0;
 }
 qindex++; // Смещение позиции считывания
 return q[qindex-1]; // Считывание
 }

 void Print(void)
 { 
 for(int t=qindex; t < MAX; t++)
 if (q[t]!=NULL)
 printf("%d. %d\n", t+1, q[t]);
 }
Изображения
Тип файла: jpg Новый точечный рисунок.jpg (86.5 Кб, 135 просмотров)

Последний раз редактировалось Stilet; 17.03.2013 в 14:20.
nati_94 вне форума Ответить с цитированием
Старый 17.03.2013, 14:09   #2
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Хм.. Не разумнее ли было сделать это на основе списка (что, вероятно, и имелось в виду в задании)?
А тут проблема, скорее всего, в значениях глобальных переменных.. Лучше бы их не использовать.
И оформляйте код как положено.
Μολὼν λαβέ
alexander13 вне форума Ответить с цитированием
Старый 17.03.2013, 14:29   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну а отладчиком ты проходил?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выводит объекты после перегрузки неправильно. ULTRAS.K Помощь студентам 1 12.03.2012 17:42
При вводи данных неправильно выводит на экран Sylar9 Общие вопросы C/C++ 4 26.10.2011 12:06
SQL запрос. Не выводит строки, где в одном поле присутствует NULL, хотя идет проверка lyle_200490 SQL, базы данных 7 07.04.2011 22:41
не выводит очередь margaritachka Общие вопросы C/C++ 0 10.05.2010 19:09
C++ массивы - неправильно выводит мнимальный и максимальный элемент((( Blondy Помощь студентам 1 02.12.2009 15:46