Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
xdtab
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 50
#1

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент - C++

21.04.2017, 11:53. Просмотров 252. Ответов 2
Метки нет (Все метки)

Помогите преобразовать код из языка С# в С++.

Занимался разбором задачи на языке С++.
Вот условие задачи: Дан целочисленный массив размерности N. Преобразовать массив, увеличив каждую его серию на один элемент. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии - количество этих элементов (длина серии может быть равна 1).

Такой код получился на языке Pascal:

Pascal
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
program Massiv_seri9;
var
 a,b : array [1..20] of real;
 N,i,k: integer;
 
begin
 Write('N: ');
 Readln(N);
 
 Writeln('A: ');
 for i:=1 to N do
  begin
   write(i,' :');
   readln(a[i]);
  end;
 
 k:=1;
 b[k]:=a[1];
 
 for i:=2 to N do
  begin
   inc(k);
   if a[i-1]<>a[i] then
    begin
     b[k]:=b[k-1];
     inc(k);
    end;
   b[k]:=a[i];
  end;
  inc(k);
  b[k]:=b[k-1];
 
  a:=b;
 
 for i:=1 to k do writeln(a[i]);
end.
Преобразовал в С#:
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
#include <stdio.h>
int main(void)
{
    int a[20];
    int n;
    printf("N: ");
    scanf("%i",&n);
 
    int i;
    for (i=0; i<n; ++i){
        printf("a[%i] : ",i+1);
        scanf("%i",&a[i]);
    }
 
    int i2;
    for (i=0;i<n;++i){
        if (i+1<n){
            if (a[i+1]!=a[i]){
                ++n;
                for (i2=n-1;i2>i;--i2) a[i2]=a[i2-1];
                ++i;
            }
        }
    }
    ++n;
    a[n-1]=a[n-2];
 
    for (i=0; i<n;++i) printf("  %i : %i\n",i+1,a[i]);
    return 0;
}
Может кто нибудь помочь переписать задачу в С++, а то я пишу, а у меня куча багичей вылезает. Так же если есть советы как упростить решение можно, то тоже оставляйте свои комментарии.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2017, 11:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент (C++):

Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент - C++
1. Дан целочисленный массив размера N. Преобразовать массив, увеличив каждую его серию на один элемент. (Серия - группа подряд идущих...

Дан целочисленный массив размером N. Преобразовать массив, увеличив длину каждой серии на один элемент - C++
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int main() { int n; int k=0; int p=0; int l=0; int...

Преобразовать массив, увеличив его первую серию наибольшей длины на один элемент - C++
Ребятки, кому не сложно выручите с задачкой) Дан целочисленный массив размера N. Преобразовать массив, увеличив его первую серию...

Преобразовать массив, уменьшив каждую его серию на один элемент. - C++
Дан целочисленный массив размера N, содержащий по крайней мере одну серию, длина которой больше 1. Преобразовать массив, уменьшив каждую...

Преобразовать массив, увеличив первую серию наибольшей длины на один элемент - C++
Дан массив, состоящий из n элементов. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии – количество этих элементов...

Дан массив размера n. Преобразовать его, умножив все положительные элементы на минимальный элемент - C++
Помогите пожалуйста, очень надо.

2
LightDays
10 / 10 / 4
Регистрация: 19.02.2017
Сообщений: 42
Завершенные тесты: 1
21.04.2017, 12:07 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Привет.
1. Для языка С++ не используется библиотека
C++
1
#include <stdio.h>
Вместо нее используют
C++
1
#include <iostream>
(библиотека ввода вывода в С++)
2. Для ввода и вывода используются cin и cout соответственно (обрати внимание на направление стрелок >> и << для cin и cout)
3. using namespace std; Эта странная запись "говорит" компилятору, чтобы использовал пространство имен "std" там, где это необходимо. В С++ создано куча стандартных библиотек и все они принадлежат пространству имен std.
Если не хочешь использовать эту строчку, то можно было обращаться к методом стандартной библиотеки через пространство имен на прямую.
Например так:
C++
1
std::cout << "Hello, World!" << endl;
P.s. endl - перевод каретки на новую строку.

А так у тебя код в принципе рабочий.
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
#include <iostream>
using namespace std;
 
int main()
{
    int a[20];
    int n;
    cout << "N: ";
    cin >> n;
 
    int i;
    for (i = 0; i<n; ++i)
    {
        cout << "a[" << i + 1 << "] : ";
        cin >> a[i];
    }
 
    int i2;
    for (i = 0; i < n; ++i)
    {
        if (i + 1 < n)
        {
            if (a[i + 1] != a[i])
            {
                ++n;
                for (i2 = n - 1; i2>i; --i2) a[i2] = a[i2 - 1];
                ++i;
            }
        }
    }
    ++n;
    a[n - 1] = a[n - 2];
 
    for (i = 0; i < n; ++i)
        cout << ' ' << i + 1 << ": " << a[i] << endl;
 
    return 0;
}
1
MrGluck
Модератор
Эксперт CЭксперт С++
7525 / 4663 / 704
Регистрация: 29.11.2010
Сообщений: 12,740
21.04.2017, 12:07 #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
 
int main()
{
    std::vector<int> v = {1, 2, 2, 3, 3, 3, 4, 5, 5};
    for (auto it = v.cbegin(); it != v.cend(); ++it)
        if (it == v.cbegin() || *it != *(it - 1))
            it = v.insert(it, *it);
    for (const auto x : v)
        std::cout << x << " ";
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2017, 12:07
Привет! Вот еще темы с ответами:

Преобразовать массив, увеличив первую/последнюю/все серии наибольшей длины на один элемент - C++
Вот задача Дан целочисленный массив размера N. Преобразовать массив, увеличив первую1|последнюю2|все3 серии наибольшей длины на один...

2) Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов - C++
2) Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов.

Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов - C++
//Дан целочисленный массив размера N. //Найти максимальное количество его одинаковых элементов.

Дан целочисленный массив .Найти его второй по величине элемент - C++
Помогите пожалуйста составить программу. Дан целочисленный массив . Найти его второй по величине элемент.


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru