Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > C/C++/С#


Ответ
 
Опции темы Опции просмотра
Старый 10.05.2010, 21:04   #1 (permalink)
margaritachka
Новичок
 
Регистрация: 10.05.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 51
Exclamation Не выводит очередь

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

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

Код:
#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");
}
margaritachka вне форума   Ответить с цитированием

Старый 10.05.2010, 21:04
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Не проходите мимо похожих тем, они помогут вам в решении проблемы

Не выводит массив Delphi7
Программа выводит результат бесконечное число раз. Не ясна причина
Написать программу, которая считывает текст из файла и выводит на экран предложения
Очередь, реализованная с помощью массива

Старый 11.05.2010, 17:05   #2 (permalink)
Long Cat
Banned
 
Регистрация: 01.09.2009
Сообщений: 4,396
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 2544
По умолчанию

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

в функции out должно выводить если очередь не пуста введенную очередь, а если очередь пуста,то сообщение "ochered' pusta"
выводит и саму очередь и сообщение в любом из улучаев.
уже замучалась, не знаю как исправить
а остальные функии работают нормально
помогите пожалуйста
Код:
#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]); //здесь вы записываете символ за границу массива. У вас есть элементы с индексами 0..(n-1), но нет элемента с индексом n.
	}

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");
}
Long Cat вне форума   Ответить с цитированием
Старый 11.05.2010, 22:08   #3 (permalink)
margaritachka
Новичок
 
Регистрация: 10.05.2010
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 51
По умолчанию

спасибо за совет!
margaritachka вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Метки
очередь


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 23:22.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.