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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2010, 14:57   #11
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
Вообщето я про то, что обьявление может быть и в конце программы, т.е. с++ разрешает что-либо обьявлять когда угодно!
Да и ему ничего не мешает обьявить константу и массив по позже допустим так
да нельзя так делать...компилятор требует размерность массива, которая известна на этапе компиляции...в вашем случае, этого не происходит, т.к. компилятор не может вычислить размер dlina, до запуска программы. Для примера, просто взял ваш код и пихнул к Visual Studio, и что?
ошибка: expected constant expression...
Цитата:
в том то и дело , что этот пример надо сделать используя ограниченный объем знаний(без ссылок, указателей и т.п.).
попробуй использовать vector. ему не требуется указывать размер, он сам автоматически расширяется при добавлении элемента. Пример:
Код:
vector<int> vec;
if(number>0)
vec.push_back(number);
cout<<vec[0];
всё просто.
ThisIzGame вне форума Ответить с цитированием
Старый 06.08.2010, 15:04   #12
mrChester
Я
Форумчанин
 
Аватар для mrChester
 
Регистрация: 24.04.2010
Сообщений: 693
По умолчанию

Не хотите выделять память динамически и использовать vector, тогда создавайте константное количество элементов, превышающее максимально допустимое количество возможных. Считать сколько у вас этих элементов вышло все равно придется
Код:
#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[10];   //создаем 10, т.к. больше 10 элементов не может удовлетворять условию
    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;
}
Все персонажи вымышлены, все совпадения случайны.
Если жизнь игра, тогда я её разработчик ©.
mrChester вне форума Ответить с цитированием
Старый 06.08.2010, 15:05   #13
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Не знай как у тя у меня нормально работает!
Изображения
Тип файла: jpg compil.jpg (119.1 Кб, 67 просмотров)
Тип файла: jpg run.jpg (13.6 Кб, 56 просмотров)
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, 15:05   #14
КМ1978
 
Регистрация: 06.08.2010
Сообщений: 8
По умолчанию

, без ссылок, указателей и векторов, нам пока всего этого не давали..

можно конечно с лишними элементами не работать, но по условию таких элементов в mass2[] быть не должно, в данном случае ожидается что длина массива 6 и не более.

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

Цитата:
не может вычислить размер dlina
А чё её вычислять ! Тип integer- 4 байта!
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, 16:00   #16
wyvern
Форумчанин
 
Аватар для wyvern
 
Регистрация: 24.03.2009
Сообщений: 215
По умолчанию

В Qt Creator по дефолту используется компилятор g++ из дистрибутивчика mingw32. Как ни странно, он позволяет таким образом объявлять массивы:

int len = 20;
char mas[len];

И даже адекватно работать с ними, хотя это и нельзя делать в стандарте С++.
wyvern@localhost:~$ sudo emerge --unmerge world
wyvern вне форума Ответить с цитированием
Старый 06.08.2010, 16:17   #17
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

Цитата:
Сообщение от Hacker19_90 Посмотреть сообщение
А чё её вычислять ! Тип integer- 4 байта!
при чём тут 4 байта... я имел ввиду само значение константы...
ThisIzGame вне форума Ответить с цитированием
Старый 06.08.2010, 17:00   #18
КМ1978
 
Регистрация: 06.08.2010
Сообщений: 8
По умолчанию

Всем спасибо за советы.
КМ1978 вне форума Ответить с цитированием
Старый 06.08.2010, 17:23   #19
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Господа mrChester и ThisIzGame! Я тут не так давно тоже вещал, что размерность массива при его декларации в C неконстантной быть не может и... вскоре выяснил, что ошибаюсь! Или, по крайней мере, не совсем прав Это дело называется VLA (Variable-Length Arrays) и "по просьбам трудящихся" уже 10 лет как включено в стандарт ( C99, подчёркиваю - стандарт C, а не C++ ! ). Другое дело, что не все разработчики компиляторов торопятся обеспечить поддержку этой возможности.
Vago вне форума Ответить с цитированием
Старый 06.08.2010, 17:29   #20
ThisIzGame
Форумчанин
 
Регистрация: 31.08.2009
Сообщений: 161
По умолчанию

Цитата:
Vago
спасибо за инфу...не знал.
ThisIzGame вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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