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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2014, 02:01   #31
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,427
По умолчанию

Только если идеи позаимствовать (case, например). Тут опять же та же проблема - ограниченный размер очереди (списка). Я не знаю, насколько строги Ваши преподаватели, будут ли они требовать "неограниченную" очередь, либо их вполне устроит такая реализация.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 10.04.2014, 23:45   #32
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

А можно еще вопрос из другой проги.Я ее сделал, но нужно еще структуру в файл, как это сделать?Как я думаю, нужно пройтись по списку как в функции
Код:
/*просмотра списка*/
?Я чисто теоретически не понимаю что в этот файл должно записывать и как это должно выглядеть?

Последний раз редактировалось East Undia Trading; 10.04.2014 в 23:47.
East Undia Trading вне форума Ответить с цитированием
Старый 11.04.2014, 00:24   #33
bitix
Форумчанин
 
Аватар для bitix
 
Регистрация: 21.04.2012
Сообщений: 792
По умолчанию

мда, автор вот что значит, что нужно учить дискретную математику
Талантливыми не становятся, а рождаются
bitix вне форума Ответить с цитированием
Старый 11.04.2014, 01:31   #34
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

bitix, не было
East Undia Trading вне форума Ответить с цитированием
Старый 11.04.2014, 01:37   #35
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,427
По умолчанию

Если вопрос стоит именно в способе записывания структуры, то вот - http://stackoverflow.com/questions/1...to-a-file-in-c, кратко и по делу.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 12.04.2014, 22:11   #36
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, я спрашивал, можно ли с помощью массива - да.Как я знаю с помощью массива не получится реализовать с выделением памяти, а значит такой вариант подходит.Еще такой вопрос, подойдет ли вообще массив к моей задаче?

Последний раз редактировалось East Undia Trading; 12.04.2014 в 22:15.
East Undia Trading вне форума Ответить с цитированием
Старый 13.04.2014, 03:06   #37
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,427
По умолчанию

Код:
typedef struct Info {
    int count, cost;
} Info;
...
Info *a;
a = calloc(100, sizeof(Info));//теперь a - указатель на массив для 100 записей
Например, могу предложить достаточно "интересный" способ использования массива. Выделили место под какое-то начальное количество информации. Затем, по мере поступления данных, заносим их в массив. Если место закончилось, то расширяем массив в 2 раза с помощью realloc. Мы храним 2 индекса - индекс первого заполненного элемента в массиве (увеличивается при взятии данных из массива), индекс последнего незаполненного элемента в массиве (увеличивается при добавлении данных). Предлагаю делать перенос всех заполненных данных из второй половины массива в первую, как только первый индекс достигает половины. Перенос нужен, чтобы не расширять массив, когда есть достаточно пустого места в начале массива. Делать же сдвиг всех элементов каждый раз при взятии данных слишком накладно. Лишний захват памяти неизбежен при такой реализации (с другой стороны, не будет указателей, которые тоже требуют памяти).

Все же, лично мне было бы гораздо легче использовать обычную реализацию очереди через выделение памяти и связывание через указатели.

Конечно можно так "не заморачиваться", если преподавателям нужно решение попроще. Массив вполне подойдет для хранения данных.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.04.2014, 22:46   #38
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, я почти не нашел в интернете и книгах хорошего примера работы с очередью.А написать программу со структурами из головы не получится.Попробую с массивом, может позже и со структурой решу.А вот такой вопрос, я записываю в ячейку массива кол-во товара, а как мне связать этот товар с его названием?Ведь в массиве может храниться только один тип данных.
East Undia Trading вне форума Ответить с цитированием
Старый 13.04.2014, 23:52   #39
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,427
По умолчанию

Так все-таки видов товара будет больше одного? Массив хранит 1 тип данных, но этим типом данных может быть структура.
Код:
typedef struct Info {
    char name[20];
    int count, cost;
} Info;
...
Info a[10];
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.04.2014, 00:02   #40
East Undia Trading
Форумчанин
 
Регистрация: 02.10.2013
Сообщений: 231
По умолчанию

BDA, как правильно создать временную переменную через которую будут удаляться товары из очереди (сейчас это стек!)?То есть мне нужна переменная (Магазин) в которой будет храниться "товар" и продаваться(удаляться), необходима чтобы при недостатке товара эта переменная обращалась к очереди(складу) и брала оставшийся товар.
Вот что получилось на данный момент:
Код:
#include <stdio.h>
#include <stdlib.h>
#define MAXLENGTH 10
#define DataType int
#define STACK struct Stack

struct Stack
{
int top;
DataType elements[MAXLENGTH];
};

void MakeNull (STACK *pstack);	/*пустой стек*/
int Empty (STACK *pstack);		/*стек пуст*/
int Full (STACK *pstack);       /*стек полон*/
int Top (STACK *pstack, DataType *x);		/*элемент с вершины*/
int Pop (STACK *pstack, DataType *x);		/*удаление элемента*/
int Push (DataType x, STACK *pstack);	    /*добавление элемента*/

int main()
{
STACK stack;
int i;
MakeNull(&stack);
for (i=1; i<6; i++)
	Push (i, &stack);
while (Pop(&stack, &i))
	printf("%d ", i);
system("pause");
return 0;
}

void MakeNull (STACK *pstack)
{
pstack->top = -1;
}

int Empty(STACK *pstack)
{
if (pstack->top < 0)
	return 1;
else 
	return 0;
}

int Full (STACK *pstack)
{
 if (pstack->top==MAXLENGTH-1)
    return 1;
 else 
    return 0;   
}

int Top (STACK *pstack, DataType *x)
{
if (Empty (pstack))	return 0;
*x = pstack->elements[pstack->top];
return 1;
}

int Pop (STACK *pstack, DataType *x)
{
if (Empty (pstack))	return 0;
*x = pstack->elements[pstack->top];
pstack->top--;
return 1;
}

int Push (int x, STACK *pstack)
{
if (Full (pstack)) return 0;
pstack->top++;
pstack->elements[pstack->top] = x;
return 1;
}
East Undia Trading вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде программы (для индекса требуется массив или указатель). Язык Си Семижон Евгения Помощь студентам 7 20.01.2014 02:45
Ошибка в коде программы.Язык Си. East Undia Trading Помощь студентам 8 19.01.2014 21:03
Ошибка в ходе программы, требуется пояснение... kotzzz Мультимедиа в Delphi 2 14.04.2010 14:31
Язык программы KWN, lnc Общие вопросы Delphi 1 22.01.2010 22:33
как в цикле создавать массив с одним и тем же именем!?ошибка в ходе выполнения -access violation at addr sleevman Помощь студентам 2 28.10.2009 19:06