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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2010, 12:29   #1
КМ1978
 
Регистрация: 06.08.2010
Сообщений: 8
По умолчанию Вопрос по массивам

Допустимо ли такая реализация этой задачи, и если нет то почему?
//нужно второй массив заполнить числами больше нуля из первого массива
Код:
#include<stdio.h>
#include<conio.h>
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int n=0, m=0;
    int mass1[10]={1,0,33,55,0,77,0,2,6,0};
    int mass2[m];
    for(int i=0; i<10; i++)
    {
        if(mass1[i]>0)
        {
            m++;
            for(int j=n; j<m; j++)
                mass2[j]=mass1[i];
            n++;
        }
    }
    for(int i=0; i<m; i++)
        cout<<mass2[i]<<setw(4);
    cout<<endl;
    getch();
    return 0;
}
КМ1978 вне форума Ответить с цитированием
Старый 06.08.2010, 13:01   #2
aRise
Пользователь
 
Регистрация: 06.08.2010
Сообщений: 11
По умолчанию

ого наворотил...
надеюсь таких рукастых ракеты программировать не пустят))
Код:
int main()
{
    int n=0, m=0;
    int mass1[10]={1,0,33,55,0,77,0,2,6,0};
    int mass2[10];
	int j=0;
	for(int i=0; i<10; i++)
	  if(mass1[i]>0) mass2[j++]=mass1[i];
	for(int i=0; i<j; i++) {вывод элемента mass[i]}

Последний раз редактировалось aRise; 06.08.2010 в 17:32.
aRise вне форума Ответить с цитированием
Старый 06.08.2010, 13:10   #3
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Во-первых так нельзя объявлять массивы
Код:
    int m=0;
    int mass2[m];
Нужно чтобы m была константой, если вы хотите чтобы память выделялась динамически, тогда делается так:
Код:
    int* mass2 = new int[m]; //m может быть не константой
но в таком случае размер массива нельзя изменить, как вы пытаетесь сделать здесь
Код:
        if(mass1[i]>0)
        {
            m++;
            for(int j=n; j<m; j++)
                mass2[j]=mass1[i];
            n++;
        }
Если вы не знаете размер будущего массива и добавляете данные динамически, попробуйте реализовать списки.
В вашем случае думаю, лучше сначала подсчитать сколько элементов больше 0, затем выделить память для второго массива, а после записывать туда данные.
Вот мой пример:
Код:
#include<conio.h>
#include<iostream>
#include<iomanip>
using namespace std;
void main()
{
    int n=0;
    int mass1[10]={1,0,33,55,0,77,0,2,6,0};
    for(int i=0; i<10; i++) //подсчет положительных элементов
        if(mass1[i]>0)
            n++;

    int* mass2 = new int[n]; //выделяем память
    int j=0;
    for(int i=0; i<10; i++)     //записываем положительные элементы во второй массив
        if(mass1[i]>0)
        {
             mass2[j]=mass1[i];
             j++;
        }   
    for(int i=0; i<n; i++)
        cout<<mass2[i]<<setw(4);
    getch();
}
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 06.08.2010, 13:17   #4
КМ1978
 
Регистрация: 06.08.2010
Сообщений: 8
По умолчанию

Вопрос в том, можно ли объявлять mass2 так как это сделал я? Использую компилятор Qt Creator. Просто мне сказали что так объявлять массивы нельзя, нужно указывать его длину. А у меня длина массива изменяется..

И что удивительно, несмотря на то что нельзя, код работает, не пора ли менять компилятор??

Последний раз редактировалось Stilet; 06.08.2010 в 13:37.
КМ1978 вне форума Ответить с цитированием
Старый 06.08.2010, 13:25   #5
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Лучше не надо!!!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 06.08.2010, 13:59   #6
КМ1978
 
Регистрация: 06.08.2010
Сообщений: 8
По умолчанию

А если сделать так..?
Код:
#include<conio.h>
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int count=0, j=0;
    int mass1[10]={1,0,33,55,0,77,0,2,6,0};
    for(int i=0; i<10; i++)
    {
        if(mass1[i]>0)
           count++;
    }
    int mass2[count];
    for(int i=0; i<10; i++)
    {
        if(mass1[i]>0)
        {
            mass2[j]=mass1[i];
            j++;
        }
    }
    for(int i=0; i<count; i++)
        cout<<mass2[i]<<setw(4);
    getch();
    return 0;
}
КМ1978 вне форума Ответить с цитированием
Старый 06.08.2010, 14:04   #7
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Ну в С++ так можно!
Вообще всё что касается неопределённого размера: лучше всего использовать указатели, или в с++ есть vector для этих целей!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 06.08.2010, 14:05   #8
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

Цитата:
Сообщение от КМ1978 Посмотреть сообщение
А если сделать так..?
Код:
#include<conio.h>
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int count=0, j=0;
    int mass1[10]={1,0,33,55,0,77,0,2,6,0};
    for(int i=0; i<10; i++)
    {
        if(mass1[i]>0)
           count++;
    }
    int mass2[count];
    for(int i=0; i<10; i++)
    {
        if(mass1[i]>0)
        {
            mass2[j]=mass1[i];
            j++;
        }
    }
    for(int i=0; i<count; i++)
        cout<<mass2[i]<<setw(4);
    getch();
    return 0;
}
так тоже нельзя, размер массива должен быть константым...
int mass2[count]; т.к. у вас count не const, то этот код ошибочный.. да и вообще объяви просто int mass2[10], да и всё.. потом когда будешь изучать указатели, тогда узнаешь, как можно сделать по-другому

Цитата:
Ну в С++ так можно!
, нельзя,

Последний раз редактировалось ThisIzGame; 06.08.2010 в 14:07.
ThisIzGame вне форума Ответить с цитированием
Старый 06.08.2010, 14:25   #9
КМ1978
 
Регистрация: 06.08.2010
Сообщений: 8
По умолчанию

в том то и дело , что этот пример надо сделать используя ограниченный объем знаний(без ссылок, указателей и т.п.). Если я задам в начале
mass2[10] и вытяну все числа больше нуля - это 6 позиций, тогда вопрос, чем заполнится остальные 4 позиции mass2[10]. Нулей в нем быть не должно, и размер он должен иметь такой, сколько чисел больше нуля...
КМ1978 вне форума Ответить с цитированием
Старый 06.08.2010, 14:44   #10
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Сообщение от ThisIzGame Посмотреть сообщение
нельзя,
Вообщето я про то, что обьявление может быть и в конце программы, т.е. с++ разрешает что-либо обьявлять когда угодно!
Да и ему ничего не мешает обьявить константу и массив по позже допустим так
Код:
#include<conio.h>
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
    int count=0, j=0;
    int mass1[10]={1,0,33,55,0,77,0,2,6,0};
    for(int i=0; i<10; i++)
    {
        if(mass1[i]>0)
           count++;
    }
    const int dlina = count;
    int mass2[dlina];
    for(int i=0; i<10; i++)
    {
        if(mass1[i]>0)
        {
            mass2[j]=mass1[i];
            j++;
        }
    }
    for(int i=0; i<count; i++)
        cout<<mass2[i]<<setw(4);
    getch();
    return 0;
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по массивам souwOw Помощь студентам 0 24.10.2009 23:02
вопрос по массивам peq Microsoft Office Excel 2 15.10.2009 18:52
Вопрос по парным массивам в С++ Chudic Помощь студентам 4 07.11.2008 10:33
Вопрос по массивам Azzy Общие вопросы .NET 4 23.12.2007 23:43