Перейти к содержимому

Как сложить массивы в c

  • автор:

Developing.ru

C++ — Объединить два упорядоченных массива в один

7 сообщений • Страница 1 из 1
miros_0571 Сообщения: 2 Зарегистрирован: 25 апр 2015, 19:18

Заданы два упорядоченных массива А и В, состоящих из N и M вещественных элементов соответственно. Соединить их в один массив С, так чтобы его элементы были упорядочены.

Помогите разобраться и найти ошибку. работает. надо исключить одинаковые элементы

#include #include const int N= 6; const int M= 7; int main() < int A[N]=; int B[M]=; int*C=new int[N+M]; int i=0; int j=0; for (int k=0;k for (int k=0; k

Decoder Сообщения: 303 Зарегистрирован: 19 фев 2008, 23:11 Откуда: Moscow
Наверно лучше сделать так.

 int i = 0; // A[i] int j = 0; // B[j] int k = 0; // C[k] while (i < N || j < M) < int v = 0; if (i < N && j < M) < v = (A[i] < B[j])? A[i++] : B[j++]; >else < v = (N < M)? B[j++] : A[i++]; >if (k > 0 && C[k-1] == v) continue; C[k++] = v; > // Вывод результата. for (int m = 0; m < k; m++) std::cout  

Поумнеть несложно, куда труднее от дури избавиться.

Romeo Сообщения: 3091 Зарегистрирован: 02 мар 2004, 17:25 Откуда: Крым, Севастополь Контактная информация:

Следует рассматривать не два случая (A меньше B[j], иначе), а три случая (A меньше B[j], A больше B[j], иначе). В третьем случае (когда они равны), следует C[k] присваивать любой из A или B[j] (ведь они равны), но после этого увеличивать ОБА индекса i и j.

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Romeo Сообщения: 3091 Зарегистрирован: 02 мар 2004, 17:25 Откуда: Крым, Севастополь Контактная информация:

Сложить 2 массива, введенные с клавиатуры

Я так понял, что «сложить два массива» — это все сложить их элементы по соответствующим индексам и получить новый массив.

#include using namespace std; int main() < int a[10]; int b[10]; int c[10]; int i; cout > a[i]; > cout > b[i]; > for (i = 0; i < 10; i++) < c[i] = a[i] + b[i]; cout cout

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

С++. Как сложить элементы двух массивов по индексу?

HemulGM

Ну так создай третий массив, установи ему длину равную длине исходных массивов (надеюсь, понимаешь, что длина исходных массивов должна быть одинакова).
Запускаешь один цикл и складываешь.

Ответ написан более года назад
Егор Полянский @SilentGr0ve Автор вопроса
А если все таки длина исходных массивов разная?

HemulGM

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

HemulGM

SilentGr0ve,
Пример на Delphi, где SetLength - установить длину массива, Length - узнать длину массива, High - узнать индекс последнего элемента

var a := [1, 2, 3, 4]; var b := [5, 6, 7, 8, 1]; var c: TArray; SetLength(c, Max(Length(a), Length(b))); for var i := 0 to High(c) do if (i < Length(a)) and (i < Length(b)) then c[i] := a[i] + b[i] else if i < Length(a) then c[i] := a[i] else c[i] := b[i];

Как сложить два массива, но не поэлементно?

Как сложить два массива,что получить третий?Выбор элементов для сложения должен происходить в зависимости от числа которое должно получиться (t1-массив единиц, t2-массив десятков).

const unsigned char t1[10] = < 0b00000000, // 0 0b00000001, // 1 0b00000010, // 2 0b00000011, // 3 0b00000100, // 4 0b00000101, // 5 0b00000110, // 6 0b00000111, // 7 0b00001000, // 8 0b00001001, // 9 >; const unsigned char t2[10] = < 0b00000000, // 0 0b00010000, // 1 0b00100000, // 2 0b00110000, // 3 0b01000000, // 4 0b01010000, // 5 0b01100000, // 6 0b01110000, // 7 0b10000000, // 8 0b10010000, // 9 >; 

Я не понял. Я вот уже шесть минут перечитываю и очень плохо понимаю.

В итоговом третьем массиве 20 элементов?

Выбор элементов для сложения должен происходить в зависимости от числа которое должно получиться (t1-массив единиц, t2-массив десятков).

Это как? Я читаю и не понимаю.

Мне датчик температуры вы даёт готовое число,допустим 31, это значит что из первого массива нужно взять элемент отвечающий за единицу, а из второго элемент отвечающий за тройку. Нужно, чтоб выбирались элементы массивов автоматически и складывались в одну переменную.

После прочтения первого поста я тоже впал в ступор. Вот к чему приводит неумение четко изложить свои мысли, помноженное на плохое знание языка программирования.

А оказалось, что проблема-то вообще не в том, что было написано.

Вот маленькая программка. Функция combo() делает нужное тебе преобразование для положительных двузначных чисел. И никакие массивы здесь не нужны.

 #include using namespace std; unsigned char combo(int temperature) < return (temperature / 10 int main() < int t; cout > t; if (t < 0 || t >99) < cout cout 

Вы не поняли. У меня есть число 31 в двоичном коде оно выглядит так — 0b00011111.Мне нужно,чтоб оно преобразовалось в элементы массивов t1[2](единицы) , t2[4](десятки) и складывались в одну переменную, которую я дальше буду использовать.

Якось так напевне, для
початку. Я мабудь зараз допишу толком і скомпілюю. Нічого, що я не російською,
що б мені помилки не правити розмірковуючи?
Якщо що, я якось перепишу.

Maxi_Man, думаю, что я понял правильно ))

Просто я считаю, что не имеет смысла держать два массива констант: первый числа от 0 до 9 и второй числа от 0 до 90 с шагом в 10.

То что ты их написал в двоичном виде — ничего не значит. Кстати такая запись: 0b00000001 не откомпилируется. С бОльшим успехом их можно записать в десятичном, восьмеричном или 16-ричном виде — все равно внутри программы они будут храниться в двоичном виде. Это во-первых.

Во-вторых, эти массивы вообще не нужны.

Я написал функцию, которая делает нужное тебе преобразование. Если взять твою магическую температуру 31, то.

  1. делим 31 нацело на 10, получаем 3 0b00000011
  2. это 3 сдвигаем на 4 разряда влево, получаем 0b00110000 (узнал 3 из массива t2?)
  3. считаем остаток от деления 31 на 10, получаем 1 0b00000001 (узнал 1 из массива t1?)
  4. «складываем в одну переменную» полученное на шаге 2 и на шаге 3, получаем 0b00110001 (или 0x31, или в десятичной системе счисления 49).

Dmy, если я правильно понял твою мову, то техничнее будет

odynyci = chyslo % 10 

Пожалуйста пиши по-русски. А то

Нічого, що я не російською, що б мені помилки не правити розмірковуючи?

Ничего, что я не русский, что бы я не редактировать медитации?

(c) Bing Переводчик

Вот теперь понятно))) Всем спасибо за ответы, особенно,Вам уважаемый Фтьiкай.

Как то так, наверное, для начала. Я наверное сичас допишу толком и скомпилюю. Ничего, что я не русским,
что бы мне ошибки не правити раздумывая(над ошибками)?
Если что, я как небудь перепишу.

Я тут пока написал код тоже, уверен скомпилируется, правирять вроде нечего.

Не знаю, хоть примерно то, или нет.

#include //odynyci //desyatky = chyslo/10 //odynyci = chyslo-desyatky*10 int main() < int chyslo = 0, N = 1, desyatky = 0, odynyci = 0, *Array1=NULL, *Array10=NULL; std::cout > N; Array1 = new int [N+1]; Array11 = new int [N+1]; for(int i = 0; i < N; i++) < std::cout > chyslo; desyatky = chyslo/10; odynyci = chyslo-desyatky*10; Array1[i]=odynyci; Array1[i]=desyatky; > for(int i = 0; i < N; i++)< std::cout return 0; > 

Не сразу ответил- то мама выйди, я полы помыю, то картошки почисть, то мне посмотри то, это, то пробки выкрути, а я же из винды выхожу, иногда так свет мигает. То за хлебом, то я в ванну, под прохладный душ. То я уже картинки смотрю, телок грудастых.

Жара к слову — первый такый день за год — весь день 35. Ночь такая же, со лба течет не переставая. Вот щас
загримели — я не ждал, и льет с шумом, очинь неровно, словно душ кто каждые пол- минуты включаит и выключаит. Пречем гроза строго над городом. Шумят тополя.

odynyci = chyslo % 10

А, ну да, правда!! Точно!

Я не все элементы плюсов помню!

Как объединить 2 массива?

P.S. Если элементы в массиве "а" могут повторяться, то приведенный выше цикл повторяется два раза. С заменой b[] на a[] и установкой значения ic=1.

Отслеживать
ответ дан 19 сен 2013 в 17:45
oleg_ismaylov oleg_ismaylov
850 10 10 золотых знаков 30 30 серебряных знаков 59 59 бронзовых знаков

  • массивы
  • c++
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.8.3130

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

С++. Как сложить элементы двух массивов по индексу?

HemulGM

Ну так создай третий массив, установи ему длину равную длине исходных массивов (надеюсь, понимаешь, что длина исходных массивов должна быть одинакова).
Запускаешь один цикл и складываешь.

Ответ написан более года назад
Егор Полянский @SilentGr0ve Автор вопроса
А если все таки длина исходных массивов разная?

HemulGM

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

HemulGM

SilentGr0ve,
Пример на Delphi, где SetLength - установить длину массива, Length - узнать длину массива, High - узнать индекс последнего элемента

var a := [1, 2, 3, 4]; var b := [5, 6, 7, 8, 1]; var c: TArray; SetLength(c, Max(Length(a), Length(b))); for var i := 0 to High(c) do if (i < Length(a)) and (i < Length(b)) then c[i] := a[i] + b[i] else if i < Length(a) then c[i] := a[i] else c[i] := b[i];

Сложить 2 массива, введенные с клавиатуры

Я так понял, что «сложить два массива» — это все сложить их элементы по соответствующим индексам и получить новый массив.

#include using namespace std; int main() < int a[10]; int b[10]; int c[10]; int i; cout > a[i]; > cout > b[i]; > for (i = 0; i < 10; i++) < c[i] = a[i] + b[i]; cout cout

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Developing.ru

C++ - Объединить два упорядоченных массива в один

7 сообщений • Страница 1 из 1
miros_0571 Сообщения: 2 Зарегистрирован: 25 апр 2015, 19:18

Заданы два упорядоченных массива А и В, состоящих из N и M вещественных элементов соответственно. Соединить их в один массив С, так чтобы его элементы были упорядочены.

Помогите разобраться и найти ошибку. работает. надо исключить одинаковые элементы

#include #include const int N= 6; const int M= 7; int main() < int A[N]=; int B[M]=; int*C=new int[N+M]; int i=0; int j=0; for (int k=0;k for (int k=0; k

Decoder Сообщения: 303 Зарегистрирован: 19 фев 2008, 23:11 Откуда: Moscow
Наверно лучше сделать так.

 int i = 0; // A[i] int j = 0; // B[j] int k = 0; // C[k] while (i < N || j < M) < int v = 0; if (i < N && j < M) < v = (A[i] < B[j])? A[i++] : B[j++]; >else < v = (N < M)? B[j++] : A[i++]; >if (k > 0 && C[k-1] == v) continue; C[k++] = v; > // Вывод результата. for (int m = 0; m < k; m++) std::cout  

Поумнеть несложно, куда труднее от дури избавиться.

Romeo Сообщения: 3091 Зарегистрирован: 02 мар 2004, 17:25 Откуда: Крым, Севастополь Контактная информация:

Следует рассматривать не два случая (A меньше B[j], иначе), а три случая (A меньше B[j], A больше B[j], иначе). В третьем случае (когда они равны), следует C[k] присваивать любой из A или B[j] (ведь они равны), но после этого увеличивать ОБА индекса i и j.

Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Romeo Сообщения: 3091 Зарегистрирован: 02 мар 2004, 17:25 Откуда: Крым, Севастополь Контактная информация:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *