Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не выводит очередь, не выводит очередь 
V
    Опции темы
margaritachka
  Дата 10.5.2010, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.5.2010

Репутация: нет
Всего: нет



задание:
Создать очередь для символов. Максимальный размер очереди вводится с экрана. Создать функции для ввода, вывода и определения размера очереди. Вводить символы с экрана в очередь. В случае совпадения вводимого символа с последним элементом очереди выводить размер очереди

в функции out должно выводить если очередь не пуста введенную очередь, а если очередь пуста,то сообщение "ochered' pusta"
выводит и саму очередь и сообщение в любом из улучаев.
уже замучалась, не знаю как исправить  smile 
а остальные функии работают нормально
помогите пожалуйста  smile 


Код

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
char end,*a,beg=1;
int n,f;

void out(void);
void inp(void);
void raz(void);

void main()
{

int i;
system("color 5a");
  printf("Vvedite kol-vo elem ocheredi\n");
  scanf("%d",&n);
 
  a = new char[n];
   
  end=0;
  printf("Vvedite elem ocheredi\n");
    for(i=0;i<n;i++)
    {
        end++;
        scanf("%s",&a[end]);
    }

while (1)
{
    printf("1-  vvod ocheredy\n");
    printf("2 - vivod ocheredy\n");
    printf("0- vichod\n");
    scanf("%d",&f);

    switch (f)
    {
    case 0:exit(1); break;
    case 1:inp();break;
    case 2:out(); break;
    }
}
}
void inp(void)
{
    int t,j;

    system("cls");
    printf("Vvedite kol-vo elem\n");
    scanf("%d",&t);
    printf("vvedite elementi\n");
     for(j=0;j<t;j++)
     {
         end++;
         scanf("%s",&a[end]);
         if(a[end]==a[end-1])
             raz();
     }

}
void raz(void)
{
    int k;
    if (beg==end)
printf("ochered' pusta\n");
if (beg < end) 
    k=end - beg+1;
printf("razmer %d\n",k);
printf("\n---------------------------------------------\n");
         main();
}

void out(void)
{
int i;
    
for(i=0;i<n;i++)
{
        
        if (beg!=end) printf("%c ",a[beg]); //beg - nachalo
        if (beg==end) { printf("%c \n",a[beg] );//vivod posl el
                        printf("ochered' pusta\n");
                        end=0;// vozvr begin i end v ishodn pozicii
                        beg=1;
        }
            beg++;//uvelichenie ukazatelia dlia vivoda el
        if (beg==n+1) beg=1;//zakalsovivanie ocheredi
        
    }
   printf("\n");
}

PM MAIL   Вверх
bsa
Дата 10.5.2010, 18:59 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



margaritachka, ты в функции out() в цикле увеличиваешь beg до того, как он станет end. Поэтому, сообщение о пустой очереди и выводится. тебе нужно проверку на пустоту очереди вынести из цикла, и в случае ее срабатывания завершить работу функции. И еще, лучше beg не изменять внутри функций, иначе остальные работать перестанут.
PM   Вверх
margaritachka
Дата 10.5.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.5.2010

Репутация: нет
Всего: нет



я наверное чего-то недопонимаю, потому что у меня не получается истравить функцию, чтобы она работала как надо.. :(

можете показать как должна выглядеть работающая функция, пожалуйста?

Это сообщение отредактировал(а) margaritachka - 10.5.2010, 20:11
PM MAIL   Вверх
bsa
Дата 10.5.2010, 20:19 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Как-то так:
Код
void out(void)
{
   int i;
   char p = beg;
   if (end == 0) {
      printf("%c \n",a[p] );//vivod posl el
      printf("ochered' pusta\n");
      return;
   }
   for(i=0;i<n;i++) {
      if (p != end)
          printf("%c ",a[p]); //beg - nachalo
      else {
              printf("%c \n",a[p] );//vivod posl el
              break;
        }

        p++;//uvelichenie ukazatelia dlia vivoda el
        if (p==n+1)
           p=1;//zakalsovivanie ocheredi
        
    }
   printf("\n");
}
Но я искренне сочувствую преподавателю...
PM   Вверх
margaritachka
Дата 10.5.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 10.5.2010

Репутация: нет
Всего: нет



работает!

огромное спасибо!  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0537 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.