С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.51/41: Рейтинг темы: голосов - 41, средняя оценка - 4.51
0 / 0 / 1
Регистрация: 17.09.2009
Сообщений: 60

Перестановка элементов в массиве

02.11.2009, 15:40. Показов 8080. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите с задачкой:
Дан размер массива =100
Диапазон значений от -50 до +50
Во всех последовательностях положительных чисел изменить порядок элементов на противоположный.

Вообщем я вывел массив, потом вывел положительные числа этого массива но никак не могу сделать чтобы они метами поменялись.
вот набросок:
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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
 const int rasm=100;
 int mas[rasm][rasm];
 void main(void)
{
 int i,j;
 clrscr();
 for ( i=0,j=0;j<rasm,i<rasm;j++, i++)
  {
   mas[i][j]=random(rasm)-50;
   cout<<mas[i][j]<<' ';
  }
  cout<<endl;
 
 
 
  for (i=0,j=0;j<rasm,i<rasm;j++,i++)
   {
 
   if(mas[i][j]>0)
  
   cout<<mas[j][i]<<' '; //поидее сдесь должны поменяться местами положытельные числа, но чтото не так!
   }
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.11.2009, 15:40
Ответы с готовыми решениями:

Перестановка элементов в массиве
Ещё раз всех приветствую! Встретился с проблемой. Дана матрица. Надо в итоге получить такую.

Перестановка четных элементов в массиве на место нечетных и наоборот
в массиве х заменить элементы таким образом, чтобы элементы с четными номерами встали на место нечетных и наоборот, и занести их в массив...

Перестановка в массиве
Дана целочисленная прямоугольная матрица. 1. Определить количество столбцов, не содержащих ни одного нулевого элемента 2....

10
 Аватар для Даемоник
42 / 42 / 8
Регистрация: 22.05.2009
Сообщений: 97
02.11.2009, 16:22
Попробуй написать
C++
1
cout<<(mas[i][j]-2*mas[i][j]);
0
0 / 0 / 1
Регистрация: 17.09.2009
Сообщений: 60
02.11.2009, 16:34  [ТС]
Цитата Сообщение от Даемоник Посмотреть сообщение
Попробуй написать
C++
1
cout<<(mas[i][j]-2*mas[i][j]);
чтото не получается, после токо как я ввел твой код вообще положительные числа этого массива не выводятся.
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
02.11.2009, 16:47
Цитата Сообщение от St@lker Посмотреть сообщение
Дан размер массива =100
Диапазон значений от -50 до +50
Во всех последовательностях положительных чисел изменить порядок элементов на противоположный.
Может быть речь идет про одномерный массив?
0
0 / 0 / 1
Регистрация: 17.09.2009
Сообщений: 60
02.11.2009, 17:01  [ТС]
вот полное задание:
Объявить массив целых чисел и заполнить его случайными значениями. Размер массива и диапазон значений его элементов заданы в Вашем варианте индивидуального задания. В индивидуальных заданиях (см. приложение) указано также, какую обработку массива следует произвести.
Для всех вариантов задания следует иметь в виду следующее:
• 0 считается положительным числом, если в задании не оговорен какой-то другой его статус;
• когда речь идет о какой-то последовательности чисел, имеется в виду последовательность с длиной, большей 1;
• в тех случаях, когда задание требует выполнения каких-то вычислений, разрешается выполнять их с той точностью, которую обеспечивают операции целочисленной арифметики.

мой вариант:

Разм. массива: 100
Диапазон значений :-50 до +50
Что нужно сделать:
Во всех последовательностях положительных чисел изменить порядок элементов на противоположный
0
8 / 8 / 0
Регистрация: 25.11.2008
Сообщений: 32
02.11.2009, 21:57
по-моему самый очевидный алгоритм - завести еще один массив, если мы встречаем в исходном последовательность положительных чисел, заносим ее в этот промежуточный массив. когда последовательность заканчивается, заносим элементы этого массива в исходный в обратном порядке
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
02.11.2009, 22:25
Ну судя по заданию, массив все-таки одномерный.

Random, не обижайтесь, но прежде чем заводить еще один массив, нужно разобраться с первым (на самом деле задача решается при наличии одного исходного массива).
0
8 / 8 / 0
Регистрация: 25.11.2008
Сообщений: 32
02.11.2009, 22:35
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Ну судя по заданию, массив все-таки одномерный.
ну это да
ясное дело, что можно ничего и не заводить больше, это был алгоритм в лоб.
можно еще запоминать начало и конец последовательности и менять первый с последним, второй с предпоследним и тд.
хотя тоже не факт, что это лучший алгоритм
0
MCSD: APP BUILDER
 Аватар для IT_Exp
8795 / 1074 / 104
Регистрация: 17.06.2006
Сообщений: 32,602
02.11.2009, 22:39
В демонстрационной версии программы массив фиксированный. Чтобы массив заполнялся случайными числами в заданном диапазоне, необходимо использовать полную версию программы

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
#include <algorithm>
#include <functional>
#include <iterator>
#include <locale>
#include <iostream>
 
template <typename T1, typename T2, typename U1>
void mutate(T1 begin, T1 end, T2 out, U1 p)
{
    if (std::distance(begin, end) < 2)
        return;
    std::transform(begin, end, out, p);
}
 
template <typename T, typename U1>
std::unary_negate<std::binder2nd<U1> > X(U1 p, T v)
{ return std::not1(std::bind2nd(p, v)); }
 
template <typename T, typename U1>
void transform_positives(T begin, T end, U1 p)
{
    typedef typename std::iterator_traits<T>::value_type value_type;    
 
    T curr = begin, next;
    
    for ( ; (next = std::find_if(curr, end, X(std::greater<value_type>(), 0))) != end; curr = ++next)
        mutate(curr, next, curr, p);    
    mutate(curr, next, curr, p);
}
 
int main()
{
    setlocale(LC_ALL, "");
    int arr[] = {1,-2, 3,4,-10,5,6,7,-20,7,8,9,1,2,3,-30,4, -40, 5};
    const size_t N = sizeof(arr) / sizeof(arr[0]);
 
    std::cout << "До:\t";
    std::copy(arr, arr+N, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    transform_positives(arr, arr+N, std::negate<int>());
 
    std::cout << "После:\t";
    std::copy(arr, arr+N, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    return 0;
}
Вывод:
До: 1 -2 3 4 -10 5 6 7 -20 7 8 9 1 2 3 -30 4 -40 5
После: 1 -2 -3 -4 -10 -5 -6 -7 -20 -7 -8 -9 -1 -2 -3 -30 4 -40 5
Проверка: http://codepad.org/qDH36kec
1
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
03.11.2009, 06:19
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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
 const int rasm=100;
 int mas[rasm];
 void main(void)
{
 int i,j, temp, temp1;
 clrscr();
 for ( i=0; i<rasm; i++)
  {
   mas[i][j]=random(rasm)-50;
   cout<<mas[i]<<' ';
  }
  cout<<endl; 
  for (i=0; i<rasm; i++)
   if(mas[i]>0)
   {
       temp=i;
       for(j=i; j<rasm && mas[j]>0; j++);
           i=j;
       if(j-temp>1)
           while(temp<j-1)
           {
               temp1=mas[temp];
               mas[temp]=mas[j-1];
               mas[j-1]=temp1;
               temp++;
               j--;
           }
   }
cout<<endl;
for (i=0; i<rasm; i++)
   cout<<mas[i]<<' '; 
}
1
0 / 0 / 0
Регистрация: 13.05.2008
Сообщений: 3
15.12.2009, 22:59
Здравствуйте, помогите пожалуйста с написанием кода с таким же условием как и у St@lker, но не используя индексацию, а только адресацию (указатели).

у меня пока оно меняет все положительные элементы, (плохо знаю указатели), вот моя наработка:
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
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <alloc.h>
int main(void) {
 int size;                   /* размер */
 int *Ar;       /* указатель на начало массива */
 int *Cr, *Ir;            /* текущие указатели */
 int nn;            /* количество элементов в последовательности  */
  randomize(); 
  size=20;
  printf("size=%d\n",size);
  /* выделения памяти */
  Ar=(int far *)malloc(size*sizeof(int));
  
  printf("Начальный массив:\n");
  for (Cr=Ar; Cr<Ar+size; Cr++) {
    *Cr=random(101)-50;
    printf("%3d ",*Cr);
    }
  putchar('\n');
 
  /* перебор массива */
  for (nn=0, Cr=Ar; Cr<Ar+size; Cr++) { 
    if (*Cr>0)
 
      if (!nn) {                                  
         Ir=Cr; nn=1;
         }
      else {
 
         nn++;
        }
 
    else
      if (nn) {
      
        for (nn; Ir<Cr; Ir++)
          if (*Ir>0) *Ir=-*Ir;
        nn=0; 
        }  
    }  
  if (nn)
    for (nn; Ir<Cr; Ir++)
      if (*Ir>0) *Ir=-*Ir;
  /* вывод результатов */
  printf("Массив-результат:\n");
  for (Cr=Ar; Cr<Ar+size; printf("%3d ",*Cr++));
  putchar('\n');
  /* освобождение памяти */
  free(Ar);
  return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2009, 22:59
Помогаю со студенческими работами здесь

Перестановка чисел в массиве
Помогите, пожалуйста, умные кодеры! В начальный момент в массиве записаны по порядку числа от 1 до N (i-ое число - на i-ом месте). С...

Перестановка чисел в массиве
задача: дан массив и число x. переставить числа в массиве таким образом, чтобы сначала массива шли числа, меньшие x, затем равные x, в...

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

Перестановка строк в двухмерном массиве
Подскажите пожалуйста функцию осуществляющую перестановку строк в двухмерном массиве 7*7 следующим образом: первую и последнюю,вторую и...

Перестановка чисел в массиве в обратном порядке.
Прошу помогите!!! Надо решить 2 задачи по С++ !! Срочно!!! 1)написать функцию reverse. Параметр: массив из 100 чисел....


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru