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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2022, 14:49   #1
ok.ko19
Пользователь
 
Регистрация: 15.10.2021
Сообщений: 19
По умолчанию Надо что бы последовательность задавалась с клавиатуры

Есть код(на СИ), который выводить последовательность из 15-ти чисел, заносит их и последовательно
удаляет их из очереди. Надо что бы последовательность задавалась с клавиатуры. (есть условие под кодом)
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
#include <malloc.h>
 
struct cher // объявления типа очередь
{
    int elem[15]; // Массив с 15 целых чисел (для элементов очереди)
    int r, l; //
};
struct cher* st, * element;// указатель на элементы очереди
 
void Init(struct cher* st) 
{
    st->l = 1; // Позиция первого элемента в очереди
    st->r = 0; // Позиция последнего элемента в очереди
}
 
void Add(struct cher* st, int a) // Добавление элемента в очередь
{
    if (st->r < 15 - 1)
    {
        st->r++;
        st->elem[st->r] = a;
    }
    else
        printf("Очередь переполнена!\n");
}
 
int Isempty(struct cher* st) // Проверка, является ли очередь пустой
{
    if (st->r < st->l)
        return 1;
    else
        return 0;
}
 
void Vuvestu(struct cher* st) // Вывод элементов очереди
{
    int b;
    if (Isempty(st) == 1) {
        printf("Очередь пустая\n");
    }
    for (b = st->l; b <= st->r; b++)
        printf("%d", st->elem[b]);
 
}
int Dellit(struct cher* st) // Удаление элементов из очереди
{
    int b;
    if (Isempty(st) == 1) {
        printf("Очередь пустая\n");
        return 0;
    }
    b = st->elem[st->l];
    st->l++;
    return b;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int znach;
    element = (struct cher*)malloc(sizeof(struct cher));
    Init(element);
    Vuvestu(element);
    for (int i = 0; i < 15; i++) {
        printf("Введите элемент очереди, состоящий из 'n' элементов ");
        scanf("%d", &znach);
        Add(element, znach);
    }
    printf("\n");
    Vuvestu(element);
    while (element->l<= element->r) {
        znach = Dellit(element);
        printf("\nУдаленный элемент %d\n", znach);
        Vuvestu(element);
    }
    return 0;
}
Ввести с клавиатуры последовательность из n чисел (где n задается пользователем), занося его в
очередь. Последовательно удалите все элементы из очереди.

Последний раз редактировалось ok.ko19; 21.02.2022 в 14:49. Причина: Указать на каком языке
ok.ko19 вне форума Ответить с цитированием
Старый 18.03.2022, 13:28   #2
ok.ko19
Пользователь
 
Регистрация: 15.10.2021
Сообщений: 19
По умолчанию Надо что бы последовательность задавалась с клавиатуры (СИ)

Код:
// Ввести с клавиатуры последовательность из n чисел (где n задается пользователем), занося их в очередь. 
// Последовательно удалить все элементы из очереди.
 
#define _CRT_SECURE_NO_WARNINGS
#include <Windows.h>
#include <stdio.h>
#include <malloc.h>
 
struct list {
    int field;
    struct list* ptr;
};
struct list* h, * temp;
 
struct cher // Объявление типа очередь
{
    struct list* l, * r;
};
struct cher* st; // указатели на элементы очереди
 
int Init(struct cher* st) // Инициализация очереди
{
    st->l = 0; 
    st->r = 0; 
}
 
int Add(struct cher* st, int a) // Добавление элемента в очередь
{
    if ((st->r == 0) && (st->l == 0))
    {
        st->r = Init(a);
        st->l = st->r;
    }
    else
        st->r = addelem(st->r, a);
}
 
int addelem(struct list* st, int q) // функция, которая должна заносить ел в очередь
{
 
}
 
int Isempty(struct cher* st) // Проверка, очередь пуста
{
    if (st->l == 0)
        return 1;
    else
        return 0;
}
 
void Vuvestu(struct cher* st) // Вывод элементов очереди
{
 
    if (Isempty(st) == 1) {
        printf("Очередь пустая\n");
    }
    for (h = st->l; h != NULL; h = h->ptr)
        printf("%d ", h->field);
}
 
int Dellit(struct cher* st) // Удаление элементов из очереди
{
    int b;
    if (Isempty(st) == 1) {
        printf("Очередь пустая\n");
        return 0;
    }
    b = st->l->field;
    temp = st->l;
    st->l= st->l->ptr;
    free(temp);
    return b;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int znach, n;
    printf("Введите количество элементов очереди: \n");
    scanf("%d", &n);
    st = (struct cher*)malloc(sizeof(struct cher));
    Init(st);
    Vuvestu(st);
    for (int i = 0; i < n; i++) {
        printf("Введите элемент очереди, состоящий из 'n' элементов: ");
        scanf("%d", &znach);
        Add(st, znach);
    }
    printf("\n");
    Vuvestu(st);
    while (st->l != NULL) {
        znach = Dellit(st);
        printf("\n Удаленный элемент %d\n", znach);
        Vuvestu(st);
    }
    return 0;
}
надо дописать функцию "addelem" и проверить логику кода. Вроде где-то я накосячил
ok.ko19 вне форума Ответить с цитированием
Старый 18.03.2022, 13:53   #3
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Оно ж у вас даже не компилится...
ForenLi вне форума Ответить с цитированием
Старый 18.03.2022, 17:29   #4
ok.ko19
Пользователь
 
Регистрация: 15.10.2021
Сообщений: 19
По умолчанию

ForenLi, я знаю, просто хочу логику показать, что бы Вы исправили ошибки)
Может свой вариант кода предложит кто-то
ok.ko19 вне форума Ответить с цитированием
Старый 18.03.2022, 18:18   #5
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Про очередь.
Скачай, вроде в Сети есть: Т.А. Павловская, Программирование на ЯВУ С++.
Там, стр.121, есть пример с очередью.
- Начальное формирование очереди:
- Добавление в конец
- Выборка
Книжку держу в руке, но ...

Разобраться не сложно.
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 18.03.2022, 20:26   #6
ok.ko19
Пользователь
 
Регистрация: 15.10.2021
Сообщений: 19
По умолчанию

ViktorR, спасибо огромное)
сейчас буду читать.
ok.ko19 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вводиться с клавиатуры последовательность символов , записать их в двоичный файл verybadproger Общие вопросы C/C++ 1 25.11.2019 08:19
С клавиатуры вводится последовательность целых чисел malikon Помощь студентам 1 18.02.2015 17:20