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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
#1

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

13.03.2014, 19:20. Просмотров 1448. Ответов 21
Метки нет (Все метки)

Здравствуйте, помогите, пожалуйста с лабораторкой) Все никак не получается..
Вот задача Дан массив 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;
}
0
Миниатюры
Одномерный массив. Осуществить сдвиг вправо на k позиций  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2014, 19:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Одномерный массив. Осуществить сдвиг вправо на k позиций (C++):

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

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

Осуществить сдвиг элементов массива вправо на k позиций - C++
Всем привет , помогите пожалуйста решить эту задачу на языке Си 9. Дан целочисленный массив размера N. Осуществить сдвиг вправо на k...

Осуществить циклический сдвиг массива вправо на m позиций - C++
Разработать алгоритм и программу. Дан одномерный массив С размерностью 1хn (1&lt;=n&lt;=20). Элементы массива принимают значения от 0 до 255 и...

Осуществить циклический сдвиг элементов массива вправо на k позиций - C++
Решаю задачи на сервере одном, задание было &quot;Дан массив размера N ≥ 2 и число k (0 &lt; k &lt; N). Осуществить циклический сдвиг элементов...

Осуществить циклический сдвиг n-разрядного двоичного представления заданного числа k на m позиций вправо - C++
Задание: Осуществить циклический сдвиг n-разрядного двоичного представления заданного числа k на m позиций вправо, не находя цифр самого...

21
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
13.03.2014, 19:22  [ТС] #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;
}
и вот, что вышло
0
Миниатюры
Одномерный массив. Осуществить сдвиг вправо на k позиций  
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
13.03.2014, 19:25  [ТС] #3
помогите, пожалуйста. может быть я что-то не так сделал? вроде все так неплохо началось, а потом бац и ошибка какая-то, а ведь еще нужно сделать сдвиг на К элементов..
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
13.03.2014, 19:28 #4
Цитата Сообщение от Richie_Bolat Посмотреть сообщение
b[j]=rand()%10-5;
Это вообще зачем? Чтоб сразу затирать? Тебе сказано его заполнить элементами другого массива, а не рандомом.
0
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
13.03.2014, 19:36  [ТС] #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");
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
13.03.2014, 19:44 #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, а на паскале наоборот, но выражение имеет смысл только при бейсик-приоритетах. А на плюсах как? Ты знаешь? Я нет, да и про бейсик с паскалем знаю случайно. Все такие нюансы знать во-первых проблематично, а во-вторых будешь больше времени тратить на анализ, проще сразу ставить скобки.
0
Richie_Bolat
0 / 0 / 0
Регистрация: 20.02.2014
Сообщений: 12
14.03.2014, 01:02  [ТС] #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 минут
Как осуществить сдвиг?
0
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
14.03.2014, 02:35 #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;
}
0
Genn55
374 / 221 / 41
Регистрация: 26.12.2012
Сообщений: 724
14.03.2014, 02:35 #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--;
            }
   }
0
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
14.03.2014, 02:40 #10
Не очень понятное условие...мы избавляемся от "сдвига на К позиций" благодаря тому, что сразу заполняем B[] с конца, что не заполнено - нули. Можно переписать и со сдвигом, но так интереснее)
А использовать getch(), system("pause") подряд - это круто)

Добавлено через 1 минуту
Цитата Сообщение от Genn55 Посмотреть сообщение
cout<<"\n введите количество позиций сдвига k= ";
Дык оно известно...
0
Genn55
374 / 221 / 41
Регистрация: 26.12.2012
Сообщений: 724
14.03.2014, 02:52 #11
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Дык оно известно...
Думал понятнее будет.....
0
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
14.03.2014, 02:59 #12
Цитата Сообщение от Genn55 Посмотреть сообщение
if(k>0)
{
while (k!=0)
Проще
C++
1
while(k>=0)
if не мешает, но место зря занимает.
Может и понятнее...но вдруг я захочу ввести 100500, а элементов 10? - Нужны лишние условия, которые могут наоборот сделать код более запутанным. Ну ТС почитает, рассмотрит, надеюсь поймёт, что Вы имели ввиду)
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
14.03.2014, 06:16 #13
Цитата Сообщение от Retyrn0 Посмотреть сообщение
Ну затирания не будет,
И куда же оно денется?
0
Retyrn0
45 / 45 / 3
Регистрация: 24.06.2013
Сообщений: 677
Завершенные тесты: 1
14.03.2014, 12:52 #14
Цитата Сообщение от taras atavin Посмотреть сообщение
И куда же оно денется?
Как что-то может куда-то деться, если его изначально не было?)
В примере ТС, который был откомментирован с горомким словом "затирание" до этого "затирания" массив не инициализировался. Как можно затереть то, что и так неопределённого значения?
0
taras atavin
3570 / 1754 / 91
Регистрация: 24.11.2009
Сообщений: 27,567
14.03.2014, 13:02 #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]);
 }
.
0
14.03.2014, 13:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2014, 13:02
Привет! Вот еще темы с ответами:

Массивы. Вначале заполнить элементами с четными индексами, а затем — с нечетными. Осуществить сдвиг вправо на k позиций - C++
При выполнении задания элементы массива генерировать с помощью генератора случайных чисел. 1. Дан массив A. Заполнить массив В...

Одномерный массив, Сдвинуть элементы массива циклически на n позиций вправо - C++
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; using namespace std; int main() { int a,...

Одномерный массив. Циклический сдвиг вправо - C++
Дан массив A размера N и целое число K (1 ≤ K ≤ 4, K &lt; N). Осущест- вить циклический сдвиг элементов массива вправо на K позиций (при...

Дан массив.Все положительные элементы уменьшить на количество отрицательных элементов. Осуществить сдвиг вправо - C++
Помогите доделать задачу на С++ 1.Дан массив A. Все положительные элементы уменьшить на количество отрицательных элементов. Осуществить...


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

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

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