Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2018, 22:18   #1
nura satre
Пользователь
 
Регистрация: 10.03.2018
Сообщений: 26
По умолчанию [C++] переписать элементы двумерного массива в одномерный

задание: переписать непарные элементы двумерного массива в одномерный
Код:
#include <iostream>
#include <windows.h>
#include <time.h>
#include <stdlib.h>

using namespace std;

void read(int mass[][100], const int nstr,const int nstb)
{
 srand (time(NULL));
 for(int i=0; i<nstr; i++)
 for(int j=0; j<nstb; j++)
mass[i][j]=rand()%100-50;
}
void write(int mass[][100], const int nstr,const int nstb) {
 for(int i=0; i<nstr; i++)

{
for(int j=0; j<nstb; j++)
cout<<mass[i][j]<<" ";
cout<<endl;
}
}
int mas_od(int mass[][100], int k, int r)
{

   int a, b = 0;
   for (int i = 0; i < k; i ++)
   {
       for (int j = 0; j < r; j++ )
        if (mass[i][j]%2!=0)
        {
           a[b] = mass[i][j];
          b++;
       }
   }

    return b;
}


int main()
{
    int m,n;
    cout<<"vvedite razmer massiva: ";
    cin>>m>>n;
    int mass[m][100];
    read(mass,m,n);
    write(mass,m,n);
    cout<<"Massiv = "<<mas_od(mass,m,n)<<endl;

}
ошибка invalid types int[int] for array subscript
в
Код:
int mas_od(int mass[][100], int k, int r)
{

   int a, b = 0;
   for (int i = 0; i < k; i ++)
   {
       for (int j = 0; j < r; j++ )
        if (mass[i][j]%2!=0)
        {
          a[b]=mass[i][j];
b++;
       }
   }

    return b;
}

Последний раз редактировалось nura satre; 01.06.2018 в 22:42.
nura satre вне форума Ответить с цитированием
Старый 01.06.2018, 23:03   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

У вас a там не массив. С какого вы к нему хотите [] применить?
p51x вне форума Ответить с цитированием
Старый 01.06.2018, 23:34   #3
nura satre
Пользователь
 
Регистрация: 10.03.2018
Сообщений: 26
По умолчанию

Подскажите тогда, как такое задание сделать. Как двумерный массив сделать одномерным?
nura satre вне форума Ответить с цитированием
Старый 02.06.2018, 09:50   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Сообщение от nura satre Посмотреть сообщение
Подскажите тогда, как такое задание сделать. Как двумерный массив сделать одномерным?
Ну так Вам же уже подсказали: объявите а как целочисленный массив, а не как целочисленную переменную
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 04.06.2018, 16:20   #5
nura satre
Пользователь
 
Регистрация: 10.03.2018
Сообщений: 26
По умолчанию

Код:
int mas_od(int mass[][100], int k, int r)
{
     int b = 0, a[b];

   for (int i = 0; i < k; i ++)
        {

       for (int j = 0; j < r; j++)


        if (mass[i][j]%2!=0)
        {

          a[b]=mass[i][j];
              b++; 

        }

       }
    return b;
}
теперь запускается, но все равно работает неправильно
nura satre вне форума Ответить с цитированием
Старый 04.06.2018, 16:30   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А должно?

Код:
int b = 0, a[b];
Какого размера вы создаете массив? Куда вы будете писать элементы?
p51x вне форума Ответить с цитированием
Старый 04.06.2018, 16:32   #7
nura satre
Пользователь
 
Регистрация: 10.03.2018
Сообщений: 26
По умолчанию

Код:
 int b = 0, a[k*r];
так, это размер будет, да?

теперь работает
Код:
int mas_od(int mass[][100], int k, int r)
{
     int b = 0, a[k*r];

   for (int i = 0; i < k; i ++)
        {

       for (int j = 0; j < r; j++)


        if (mass[i][j]%2!=0)
        {

          a[b]=mass[i][j];
          cout<<a[b]<<" ";
          b++;

        }

       }
}



int main()
{
    int m,n;
    cout<<"vvedite razmer massiva: ";
    cin>>m>>n;

    int mass[m][100];
    read(mass,m,n);
    write(mass,m,n);
    cout<<"Mass a[b] = "<<mas_od(mass,m,n)<<endl;
}
подскажите еще, как сделать, чтобы одномерный массив писался здесь
Код:
 cout<<"Mass a[b] = "<<mas_od(mass,m,n)<<endl;
просто там только одно число
а перед ним массив

вот как получается
Изображения
Тип файла: png 12.png (7.2 Кб, 72 просмотров)

Последний раз редактировалось Вадим Мошев; 04.06.2018 в 18:31.
nura satre вне форума Ответить с цитированием
Старый 04.06.2018, 16:46   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от nura satre Посмотреть сообщение
как сделать, чтобы одномерный массив писался здесь
Как и в остальных местах циклом.
p51x вне форума Ответить с цитированием
Старый 04.06.2018, 17:43   #9
nura satre
Пользователь
 
Регистрация: 10.03.2018
Сообщений: 26
По умолчанию

Код:
int mas_od(int mass[][100], int k, int r)
{
     int b = 0, a[b];

   for (int i = 0; i < k; i ++)
        {

       for (int j = 0; j < r; j++)


        if (mass[i][j]%2!=0)
        {

          a[b]=mass[i][j];
          cout<<"Massiv odnomerniy: "<<a[b]<<" "<<endl;
          b++;
        }

       }

}
как сделать, чтобы одномерный массив в одну строчку записался?
Изображения
Тип файла: png 12.png (7.4 Кб, 65 просмотров)
nura satre вне форума Ответить с цитированием
Старый 04.06.2018, 17:48   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Л - логика. Еще раз - циклом.
Код:
std::cout << "Massiv: ";
for(int& el : a) std::cout << el << " ";
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] переписать непарные элементы двумерного массива в одномерный. Помогите найти ошибку nura satre Помощь студентам 1 03.06.2018 21:04
Переписать в массив C(n) положительные элементы массива b(n) делённые на 2 . Со сдвигом (сжатием) массива. SnS Lazarus, Free Pascal, CodeTyphon 4 29.09.2013 00:21
Сформировать одномерный массив, элементами которого являются все отрицательные элементы двумерного массива, после 1-го полож-го sev48fire Фриланс 5 23.06.2012 19:07
Как обнулить элементы строки двумерного массива, содержащей наибольшее количество элементов одномерного массива griignat Помощь студентам 1 22.11.2011 20:04
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44