Форум программистов, компьютерный форум CyberForum.ru

Одномерный массив. Осуществить сдвиг вправо на k позиций - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
13.03.2014, 19:20     Одномерный массив. Осуществить сдвиг вправо на k позиций #1
Здравствуйте, помогите, пожалуйста с лабораторкой) Все никак не получается..
Вот задача Дан массив A[N].
Заполнить массив В[N] элементами массива A[N],
которые удовлетворяют двойному неравенству:
A[1] < A[i] или A[i] < A[10].
Осуществить сдвиг вправо на k позиций,
где k - число оставшихся элементов массива A[N].


Вот, начал решать. Так, для начала я просто вывел 2 массива а[n] и b[n],

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
//Дан массив A[N]. 
///Заполнить массив В[N] элементами массива A[N], 
///которые удовлетворяют двойному неравенству: 
   // A[1] < A[i] или A[i]  < A[10]. 
  //  Осуществить сдвиг вправо на k позиций, 
//где k - число оставшихся элементов массива A[N].
 
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define n 10
int main()
{
    
int a[n],b[n],i,j, k;
 
void randomize();
printf("Massiv A\n");
for (i=0;i<n;i++)
 {
 a[i]=rand()%10-5;
 printf("%d ",a[i]);
 }
printf("\n");
 
 
printf("Massiv B\n");
for (j=0;j<n;j++)
 {
 b[j]=rand()%10-5;
 printf("%d ",b[j]);
 }
printf("\n");
 
 
k=0;
 
getch();
system("PAUSE");
return 0;
}
Миниатюры
Одномерный массив. Осуществить сдвиг вправо на k позиций  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 19:20     Одномерный массив. Осуществить сдвиг вправо на k позиций
Посмотрите здесь:

C++ Дан массив.Все положительные элементы уменьшить на количество отрицательных элементов. Осуществить сдвиг вправо
C++ Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.
Одномерный массив. Циклический сдвиг вправо C++
C++ Массивы. Вначале заполнить элементами с четными индексами, а затем — с нечетными. Осуществить сдвиг вправо на k позиций
Одномерный массив, Сдвинуть элементы массива циклически на n позиций вправо C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
13.03.2014, 19:22  [ТС]     Одномерный массив. Осуществить сдвиг вправо на k позиций #2
потом я решил второй массив заполнить элементами по условию
и вот что вышло

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
//Дан массив A[N]. 
///Заполнить массив В[N] элементами массива A[N], 
///которые удовлетворяют двойному неравенству: 
   // A[1] < A[i] или A[i]  < A[10]. 
  //  Осуществить сдвиг вправо на k позиций, 
//где k - число оставшихся элементов массива A[N].
 
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define n 10
int main()
{
    
int a[n],b[n],i,j, k;
 
void randomize();
printf("Massiv A\n");
for (i=0;i<n;i++)
 {
 a[i]=rand()%10-5;
 printf("%d ",a[i]);
 }
printf("\n");
 
 
printf("Massiv B\n");
for (j=0;j<n;j++)
 {
                 if (a[0]<a[i]  ||  a[i]>a[9])
 b[j]=a[i];
 printf("%d ",b[j]);
 }
printf("\n");
 
 
k=0;
 
getch();
system("PAUSE");
return 0;
}
и вот, что вышло
Миниатюры
Одномерный массив. Осуществить сдвиг вправо на k позиций  
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
13.03.2014, 19:25  [ТС]     Одномерный массив. Осуществить сдвиг вправо на k позиций #3
помогите, пожалуйста. может быть я что-то не так сделал? вроде все так неплохо началось, а потом бац и ошибка какая-то, а ведь еще нужно сделать сдвиг на К элементов..
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.03.2014, 19:28     Одномерный массив. Осуществить сдвиг вправо на k позиций #4
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
b[j]=rand()%10-5;
Это вообще зачем? Чтоб сразу затирать? Тебе сказано его заполнить элементами другого массива, а не рандомом.
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
13.03.2014, 19:36  [ТС]     Одномерный массив. Осуществить сдвиг вправо на k позиций #5
taras atavin, извините, но я не совсем понял смысл фразы "затирать") вот ниже написал
C++
1
2
3
4
5
6
7
8
printf("Massiv B\n");
for (j=0;j<n;j++)
 {
                 if (a[0]<a[i]  ||  a[i]>a[9])
 b[j]=a[i];
 printf("%d ",b[j]);
 }
printf("\n");
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
13.03.2014, 19:44     Одномерный массив. Осуществить сдвиг вправо на k позиций #6
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
taras atavin, извините, но я не совсем понял смысл фразы "затирать")
Что здесь то не понятного? В отличие от того, как ты собираешься вытягивать старые значения после того, как запишешь в массив элементы a[].

Добавлено через 4 минуты
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
if (a[0]<a[i] *|| *a[i]>a[9])
На бейсике можно писать
PureBasic
1
if a(0)<a(i) or a(i)>a(9) then
, на паскале нельзя писать
Pascal
1
if a[0]<a[1] or a[i]>a[9] then
. А знаешь почему? Всего лишь из-за того, что на бейсике сравнение имеет приоритет над or/and/xor/not, а на паскале наоборот, но выражение имеет смысл только при бейсик-приоритетах. А на плюсах как? Ты знаешь? Я нет, да и про бейсик с паскалем знаю случайно. Все такие нюансы знать во-первых проблематично, а во-вторых будешь больше времени тратить на анализ, проще сразу ставить скобки.
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
14.03.2014, 01:02  [ТС]     Одномерный массив. Осуществить сдвиг вправо на k позиций #7
taras atavin,
C++
1
2
3
4
5
6
7
8
printf("Massiv B\n");
for (j=1;j<=n-1;j++)
if((a[i]>a[0]) || (a[i]<a[10]))
{
 b[j]=a[i];
 printf("%d ",b[j]);
}
printf("\n");
а так?

Добавлено через 1 час 17 минут
Пожалуйста, кто-нибудь. Подскажите, как быть дальше?
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
//Дан массив A[N]. 
///Заполнить массив В[N] элементами массива A[N], 
///которые удовлетворяют двойному неравенству: 
   // A[1] < A[i] или A[i]  < A[10]. 
  //  Осуществить сдвиг вправо на k позиций, 
//где k - число оставшихся элементов массива A[N].
 
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#define n 10
int main()
{
    
int a[n],b[n],i,j, k;
 
void randomize();
printf("Massiv A\n");
for (i=0;i<n;i++)
 {
 a[i]=rand()%10-5;
 printf("%d ",a[i]);
 }
printf("\n");
 
int t=0;
printf("Massiv B\n");
for (j=1;j<=n-1;j++)
if((a[j]>a[0]) || (a[j]<a[10]))
{
 b[t]=a[j];
 printf("%d ",b[j]); t++;
}
printf("\n");
 
 
 
k=0;
 
getch();
system("PAUSE");
return 0;
}
Добавлено через 50 минут
Ну, пожалуйста!!!

Добавлено через 3 часа 6 минут
Как осуществить сдвиг?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
14.03.2014, 02:35     Одномерный массив. Осуществить сдвиг вправо на k позиций #8
Цитата Сообщение от taras atavin Посмотреть сообщение
Чтоб сразу затирать
Ну затирания не будет, будут рандомные результаты в интервале от -5 до 5, а на счёт неуместного рандома, согласен.

Цитата Сообщение от Richie_Bolat Посмотреть сообщение
Подскажите
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
//Дан массив A[N]. 
///Заполнить массив В[N] элементами массива A[N], 
///которые удовлетворяют двойному неравенству: 
   // A[1] < A[i] или A[i]  < A[10]. 
  //  Осуществить сдвиг вправо на k позиций, 
//где k - число оставшихся элементов массива A[N].
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define n 10
 
int main()
{
    int A[n],B[n],i,j;
 
    srand(time(NULL));
 
    printf("Massiv A\n");
    for (i=0;i<n;i++)
    {
        A[i]=rand()%10;
        B[i]=0;
        printf("%d ",A[i]);
    }
    printf("\n");
 
    j=n-1;
    for (i=n;i>0;i--)
    {
        if(A[i-1]>A[0] || A[i-1]<A[9])
        {
            B[j]=A[i-1];
            j--;
        }
    }
 
    printf("Massiv B\n");
    for (i=0;i<n;i++)
    {
        printf("%d ",B[i]);
    }
    printf("\n");
 
    system("PAUSE");
 
    return 0;
}
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
14.03.2014, 02:35     Одномерный массив. Осуществить сдвиг вправо на k позиций #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// цикиличний сдвиг массива на k позиций вправо
 cout<<"\n введите количество позиций сдвига k= ";
 cin>>k;
 cout << "\n";
 if(k>0)
   {
      while (k!=0)
          {
            i= N-1;
        int temp= A[i];
            for(i=N-1; i> 0; i--)
                A[i]= A[i-1];
                A[0]= temp;
                k--;
            }
   }
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
14.03.2014, 02:40     Одномерный массив. Осуществить сдвиг вправо на k позиций #10
Не очень понятное условие...мы избавляемся от "сдвига на К позиций" благодаря тому, что сразу заполняем B[] с конца, что не заполнено - нули. Можно переписать и со сдвигом, но так интереснее)
А использовать getch(), system("pause") подряд - это круто)

Добавлено через 1 минуту
Цитата Сообщение от Genn55 Посмотреть сообщение
cout<<"\n введите количество позиций сдвига k= ";
Дык оно известно...
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
14.03.2014, 02:52     Одномерный массив. Осуществить сдвиг вправо на k позиций #11
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Дык оно известно...
Думал понятнее будет.....
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
14.03.2014, 02:59     Одномерный массив. Осуществить сдвиг вправо на k позиций #12
Цитата Сообщение от Genn55 Посмотреть сообщение
if(k>0)
{
while (k!=0)
Проще
C++
1
while(k>=0)
if не мешает, но место зря занимает.
Может и понятнее...но вдруг я захочу ввести 100500, а элементов 10? - Нужны лишние условия, которые могут наоборот сделать код более запутанным. Ну ТС почитает, рассмотрит, надеюсь поймёт, что Вы имели ввиду)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 06:16     Одномерный массив. Осуществить сдвиг вправо на k позиций #13
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Ну затирания не будет,
И куда же оно денется?
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
14.03.2014, 12:52     Одномерный массив. Осуществить сдвиг вправо на k позиций #14
Цитата Сообщение от taras atavin Посмотреть сообщение
И куда же оно денется?
Как что-то может куда-то деться, если его изначально не было?)
В примере ТС, который был откомментирован с горомким словом "затирание" до этого "затирания" массив не инициализировался. Как можно затереть то, что и так неопределённого значения?
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 13:02     Одномерный массив. Осуществить сдвиг вправо на k позиций #15
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Как что-то может куда-то деться, если его изначально не было?)
Это как?

Добавлено через 36 секунд
Цитата Сообщение от Retyrn0 Посмотреть сообщение
примере ТС, который был откомментирован с горомким словом "затирание" до этого "затирания" массив не инициализировался.
Читай:
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
C++
1
2
3
4
5
for (j=0;j<n;j++)
 {
  b[j]=rand()%10-5;
  printf("%d ",b[j]);
 }
.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
14.03.2014, 13:14     Одномерный массив. Осуществить сдвиг вправо на k позиций #16
Цитата Сообщение от taras atavin Посмотреть сообщение
Читай:
Читал. Затереть то, что до этого не инициализировалось - странная формулировка. ТС, по видимому, так заполнял массив по аналогии с первым, чтобы выводить хоть какие-то адекватные значения и предполагал, что эту строку и нужно переделать в заполнение по 2-му неравенству.

Добавлено через 1 минуту
Цитата Сообщение от taras atavin Посмотреть сообщение
до этого "затирания" массив не инициализировался.
Ключевое слово здесь "ДО"
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 13:16     Одномерный массив. Осуществить сдвиг вправо на k позиций #17
Цитата Сообщение от Retyrn0 Посмотреть сообщение
не инициализировалось
Ну ка объясни, что делает третья строчка в
C++
1
2
3
4
5
for (j=0;j<n;j++)
 {
  b[j]=rand()%10-5;
  printf("%d ",b[j]);
 }
.
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
14.03.2014, 13:20     Одномерный массив. Осуществить сдвиг вправо на k позиций #18
Цитата Сообщение от taras atavin Посмотреть сообщение
что делает третья строчка в
Вы слово "ДО" прочитали, нет? Затирание - это когда какие-то результаты вычислений изменяются. Здесь нечего менять - это инициализация, пусть и не соответствующая задаче, но никак не затирание!
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
14.03.2014, 13:26     Одномерный массив. Осуществить сдвиг вправо на k позиций #19
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Вы слово "ДО" прочитали, нет?
Он и
C++
1
2
3
4
5
for (j=0;j<n;j++)
 {
  b[j]=rand()%10-5;
  printf("%d ",b[j]);
 }
написал, и заполнить тот же массив элементами a[] ему тоже сказано. Что нибудь неизбежно будет до.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 13:38     Одномерный массив. Осуществить сдвиг вправо на k позиций
Еще ссылки по теме:

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – индекс максимального элемента C++
Осуществить сдвиг элементов массива вправо на k позиций C++
Осуществить циклический сдвиг массива вправо на m позиций C++

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

Или воспользуйтесь поиском по форуму:
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 675
Завершенные тесты: 1
14.03.2014, 13:38     Одномерный массив. Осуществить сдвиг вправо на k позиций #20
Цитата Сообщение от taras atavin Посмотреть сообщение
Что нибудь неизбежно будет до.
Будет - не будет - время покажет, а на тот момент затирания не было. Я полагаю, что этот цикл планировалось переделать под условное заполнение 2-го массива, а не оставлять его после правильной инициализации. КОгда человек учится, ему нужно видеть что происходит, чтобы понять - вероятно ТС и инициализировал рандомно 2-й массив, чтобы не было непонятных значений и планировал ПЕРЕДЕЛАТЬ этот цикл.
Yandex
Объявления
14.03.2014, 13:38     Одномерный массив. Осуществить сдвиг вправо на k позиций
Ответ Создать тему
Опции темы

Текущее время: 19:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru