Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118

Реализовать однонаправленное кольцо с использованием массива

10.02.2016, 14:20. Показов 9010. Ответов 28

Студворк — интернет-сервис помощи студентам
Добрый день. У меня возникло много вопросов. На практике нам дали разбирать тему с одномерными массивами. Как реализовывать простой одномерный массив это понятно. Но когда раздали варианты и мне попалось задание с однонаправленным кольцом, про которое я ничего не знаю. Помогите пожалуйста и объясните что это такое и как делать. Очень буду благодарна

1) Реализовать с использованием массива однонаправленное кольцо (просмотр возможен слева направо, от последнего элемента можно перейти к первому).
2) Распечатать полученный массив, начиная с К-ого элемента и до К-1.
3) Добавить в кольцо первый и последний элементы.
4) Удалить из кольца четные элементы.
5) Распечатать полученный массив, начиная с К-ого элемента и до К-1.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.02.2016, 14:20
Ответы с готовыми решениями:

Реализовать с использованием массива двунаправленное кольцо
В программе нужно: 1) Реализовать с использованием массива двунаправленное кольцо (просмотр возможен в обе стороны, от последнего...

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

Реализовать стек с использованием массива
Реализовать стек с использованием массива. Разработать все в терминах класса. Методы: добавить элемент в стек, удалить элемент, проверка...

28
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
10.02.2016, 16:48
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Fady Посмотреть сообщение
Или k это число элементов в массиве?
k это отвлеченная цифра. Дело в том что массив по своей сути кольцевым быть не может. Это последовательно выделенный участок памяти, как бэ с началом и концом. k в случае с Print1() k это количество итераций цикла сверх размера массива

Добавлено через 2 минуты
Fady,
у меня визуал, соответственно вам подойдет просто scan("%i", &k);
0
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.02.2016, 16:49  [ТС]
anti-k, И всё равно ругается
scan("%i", &k);
d:\òåõíèêóì\ñ++\1333\13.cpp(67) : error C2065: 'scan' : undeclared identifier
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
10.02.2016, 16:52
Fady, scanf попробуйте почитать K&R там масса полезностей
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.02.2016, 17:05  [ТС]
anti-k, ой и вправду)) наверное я уже слишком глупой выгляжу(

Я сделала вот так. Чтобы красивее выглядело. А можно ли как-то разделить элементы при k? Чтобы и они были на новой строчке?
Теперь осталось удалить из массива всё чётные элементы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <iostream>
#include <stdlib.h>
using namespace std;
 
void Create(int*&arr, int size)
{
    arr = new int[size]();
    for (int i(0); i < size; ++i)
    {
        arr[i] = i;
        cout << arr[i] << " ";
    }
 
}
void AddFront(int*&arr, int&size, int elem)
{
    int*arr1 = new int[size + 1]();
    arr1[0] = elem;
    for (int i(1), j(0); j < size; ++i, ++j)
    {
        arr1[i] = arr[j];
    }
    delete[]arr;
    arr = arr1;
    ++size;
}
void AddRear(int*&arr, int&size, int elem)
{
    int*arr2 = new int[size + 1](); 
    for (int i = 0; i<size; ++i)    
        arr2[i] = arr[i];
    delete[]arr;
    arr2[size] = elem;
    
    arr = arr2;
    ++size;
}
 
void Print1(int*arr, int size, int k)
{
    for (int i = 0,j=0; i<size+k; ++i,++j)
    {
        if (i== size) {
            j = 0;
        }
        cout << arr[j];
    }
    cout<< "\n";
}
 
void main()
{
    int size = 10;
    int*arr = NULL;
    Create(arr, size);
    int k;
    printf("%s", "\nInput insertion value\n");
    scanf("%i", &k);
    cout<<"Adding to the top:" <<"\n";
    AddFront(arr, size, 7);
    Print1(arr, size, k); 
    cout<<"Adding to the end:" <<"\n";
    AddRear(arr, size, 18);
    Print1(arr, size, k);
    system("pause");
}
Миниатюры
Реализовать однонаправленное кольцо с использованием массива  
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
10.02.2016, 17:09
Цитата Сообщение от Fady Посмотреть сообщение
наверное я уже слишком глупой выгляжу(

C++
1
2
3
4
5
6
7
8
9
10
11
void Print(int*arr, int size, int k)
{
    for (int i = k; i != k - 1; i++)
    {
        if (i + 1 == size) {
            i = 0;
            cout<<endl;
        }
        printf("m[%i]=%i\n", i, arr[i]);
    }
}
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.02.2016, 17:18  [ТС]
anti-k, ой первый print я удалила, у нас работает только второй. Правильно?
И спасибо Вам большое что помогаете)

Я поискала как можно удалить элементы как индекс
C++
1
2
for(int i=0; i<n/2; i++) a[i]=a[i*2+1];
for(int i=0; i<n/2; i++) cout << a[i] << ' ';
Как можно это вписать в программу?

Добавлено через 4 минуты
anti-k, или лучше удалять по чётному числу?
Только куда бы это добавить
C++
1
2
3
int newsize=0;
for(int i=0; i<n; i++) if(a[i]%2!=0) a[newsize++]=a[i];
for(int i=0; i<newsize; i++) cout << a[i] << " ";
0
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.02.2016, 17:31  [ТС]
anti-k, у меня получилось)) и всё благодаря вам) Спасибо что есть такие люди как ВЫ)
Вот бы немного поправить и чтобы числа k отображались на новой строке а не слипались вместе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <iostream>
#include <stdlib.h>
using namespace std;
 
void Create(int*&arr, int size)
{
    arr = new int[size]();
    for (int i(0); i < size; ++i)
    {
        arr[i] = i;
        cout << arr[i] << " ";
    }
}
void AddFront(int*&arr, int&size, int elem)
{
    int*arr1 = new int[size + 1]();
    arr1[0] = elem;
    for (int i(1), j(0); j < size; ++i, ++j)
    {
        arr1[i] = arr[j];
    }
    delete[]arr;
    arr = arr1;
    ++size;
}
void AddRear(int*&arr, int&size, int elem)
{
    int*arr2 = new int[size + 1](); 
    for (int i = 0; i<size; ++i)    
        arr2[i] = arr[i];
    delete[]arr;
    arr2[size] = elem;
    
    arr = arr2;
    ++size;
}
 
void Print1(int*arr, int size, int k)
{
    for (int i = 0,j=0; i<size+k; ++i,++j)
    {
        if (i== size) {
            j = 0;
        }
        cout << arr[j];
    }
    cout<< "\n";
}
void main()
{
    int size = 10;
    int*arr = NULL;
    Create(arr, size);
    int k;
    printf("%s", "\nInput insertion value\n");
    scanf("%i", &k);
    cout<<"Adding to the top:" <<"\n";
    AddFront(arr, size, 7);
    Print1(arr, size, k); 
    cout<<"Adding to the end:" <<"\n";
    AddRear(arr, size, 18); 
    Print1(arr, size, k);
    cout<<"Removing the even symbols:"<<"\n";
    int newsize=0;
    for (int i=0; i<size; i++)
    {
        if(arr[i]%2!=0) arr[newsize++]=arr[i];
    }
    for (i=0; i<newsize; i++)
    {
        cout <<arr[i]<<" ";
    }
    system("pause");
}
Миниатюры
Реализовать однонаправленное кольцо с использованием массива  
0
 Аватар для anti-k
227 / 75 / 31
Регистрация: 17.07.2015
Сообщений: 774
10.02.2016, 17:48
Лучший ответ Сообщение было отмечено Fady как решение

Решение

так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
void Print1(int*arr, int size, int k)
{
    for (int i = 0,j=0; i<size+k; ++i,++j)
    {
        if (i== size) {
            j = 0;
            cout<<endl;
        }
        cout << arr[j];
    }
    cout<< "\n";
}
1
6 / 6 / 1
Регистрация: 14.12.2014
Сообщений: 118
10.02.2016, 17:50  [ТС]
anti-k, теперь всё отлично) Большое, нет! ОГРОМНОЕ спасибо!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2016, 17:50

Реализовать очередь с использованием массива
Помогите. Реализовать очередь с использованием массива. Разработать все в терминах класса. Методы: добавить элемент в стек (очередь),...

Реализовать стек с использованием массива
помогите пожалуйста с решением Реализовать стек с использованием массива. Разработать алгоритм и программу, которая считывает...

Реализовать с использованием массива очередь
13.первое задание 1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел. 2) Распечатать полученный массив. ...

Реализовать очередь с использованием динамического массива
Реализовать очередь с использованием динамического массива.Я сделала код, можете проверить и внести коррективы, пожалуйста #include...

Реализовать очередь с использованием динамического массива
Реализовать очередь с использованием динамического массива. Помогите с заданием пожалуйста!)


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru