|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
19.11.2011, 12:19 | #1 |
Пользователь
Регистрация: 19.11.2011
Сообщений: 13
|
Запись элементов одномерного массива с Rand.
Здравствуйте,недавно перешла с Pascal на C++, мало чего ещё понимаю.
Задали лабу по одномерным массивам,вроде ничего сложного но у меня возникла проблема в самом начале,поэтому работа стоит.Не смогла найти стандартного синтаксиса Rand, он везде разный. Вот задание и исходник,объясните что не так?? 15) Написать и отладить программу создания одномерного массива из 15 случайных вещественных элементов, которые принадлежат интервалу [-40; 30]. Найти произведение положительных элементов с четными индексами и среднее арифметическое отрицательных элементов. //Одномерный массив #include <iostream.h> #include <conio.h> #include <stdlib.h> void main () {const int n=15; int a[15];int result[8]; float pr,srednearifmetich,b;int k,i,c,ipol,ichet,iotr; int summa=0; srand(time(NULL)); for(int i = 0; i < 15; i++) { a[i] =(rand()%71)-40; cout << a[i] << endl; } return 0; } Посоветуйте толковую книгу для самостоятельного изучения языка!! Последний раз редактировалось Тамарочка; 19.11.2011 в 12:39. |
19.11.2011, 15:10 | #2 |
Пользователь
Регистрация: 15.12.2010
Сообщений: 74
|
Во-первых, у Вас функция main объявлена как void. Это значит, что эта функция не должна возвращать никакого значения, поэтому сразу убираем return 0; .
Во-вторых, хорошо бы все переменные типа int объявлять в одном блоке через запятую, а не по несколько раз писать int x; int y; ... В-третьих, для использования генератора случайных чисел, в Вашем случае, нужно подключить еще и библиотеку time.h. В Вашем цикле переменная i объявлена второй раз, это ошибка. Надо так: Код:
И массив, как я понимаю, у Вас должен быть из вещественных чисел. Почему он объявлен как int? ------- Вот код. Постарался объяснить все как можно подробнее. Код:
Последний раз редактировалось RAZOR1703; 19.11.2011 в 16:44. |
19.11.2011, 16:47 | #3 | |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Во-первых, даже если вы уберете return 0 в функции main, компилятор все равно вставит код, который соответсвует return 0; Чтобы было понятно, то следующие два кода эквивалентны Код:
Код:
Вопрос не в том, убирать предложение с return, а в том, что согласно стандарту языка С++ функция main, вызываемая в операционной среде, должна быть объявлена, как возвращающая значение типа int, то есть в виде int main(). Объявление void main() не соответсвует стандарту языка, а потому поведение программы с таким объявлением main неопреддеенное. Во-вторых, кто вам сказал, что нужно все переменные одного типа объявлять в одной строке?! Как раз коогда они объявлены в одной строке, то для читающего код они выглядят как бессмысленная каша, так как неиззвестно, есть ли связь между этими переменными, то есть участвуют ли они в одном алгоритме функции в одном месте, или они не связаны между собой и участвуют в различных алгоритмах одной функции в разных местах. Объявлять переменные нужно там. где они используются. В-третьих, никакой ошибки, связанной с переменной i нет! В цикле объявляется локальная переменная, которая скрывает собой предыдущее объявление переменной с тем же самым именем в охватывающем блоке. ДДругое дело, что не имеет смысла объявлять переменную с этим именем в охватывающем блоке, так как она нигде не используется. Тем не менее это не является ошибкой. В-четвертых, совершенно не поонятно, почему нужно чмтать Шилдта?! Разве другие авторы чем-то хуже. Надо читать стандарт С++. Кстати сказать, как раз вам это будет очень полезно!
Со мной можно встретиться на www.clipper.borda.ru
Последний раз редактировалось Сыроежка; 19.11.2011 в 16:59. |
|
19.11.2011, 18:52 | #4 | |||||
Пользователь
Регистрация: 15.12.2010
Сообщений: 74
|
Начнем с того, что я смотрел в корень ошибки: функция void не имеет возвращаемого значения. Это я исправил.
Цитата:
Касательно объявления переменных. Посмотрите на объявление переменных в ОП-посте. Код:
Код:
Цитата:
Код:
Цитата:
Цитата:
Я не говорю, что они чем-то хуже или лучше. Я всего-навсего поделился своим опытом. Цитата:
|
|||||
19.11.2011, 19:48 | #5 | ||||
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
То есть вы ничего не исправили, а лишь изменили некорректный для С++ код. Для начинающего программиста как раз имеет большое значение с самого начала писать правильный код, то есть осваивать правильные синтаксис и семантику языка. Цитата:
Цитата:
Простой пример Код:
Цитата:
Кстати сказать, ваш совет читать Шилдта из ваших уст выглядет крайне двусмысленно! Вы, прочитав, Шилдта, так и не выяснили, что объявление функции void main() некорректное. Поэтому возникает естественный вопрос, то ли не стоит читать Шилдта, если он вам не дал нужных знаний, то ли не следует слушать ваших советов, так как вы сами не знаете С++.
Со мной можно встретиться на www.clipper.borda.ru
Последний раз редактировалось Сыроежка; 19.11.2011 в 20:02. |
||||
19.11.2011, 20:19 | #6 | ||||||
Пользователь
Регистрация: 15.12.2010
Сообщений: 74
|
Цитата:
Окай, пусть я буду не прав. Цитата:
Цитата:
Цитата:
Цитата:
На заметку. В коде автора i пытается переопределиться в том же блоке, а не во вложенном. Код:
Цитата:
Последующую бессмысленную полемику, думаю, лучше опустить. На этом всё. Последний раз редактировалось RAZOR1703; 19.11.2011 в 20:29. |
||||||
20.11.2011, 04:54 | #7 | |||
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Цитата:
Вот предложение из вашего собственного кода void main () Что вы исправили?! Вы даже не понимаете, что вы делаете. То, что вы убрали return, абсолютно никак не повлияло на корректность кода! Вы хоть вчитывайтесь, что я вам пишу. Компилятор вместо вас вставил return 0. Не понимаете с первого раза? Повторяю. Вы убрали return, а компилятор его вставил. Ну, и что вы исправили? Учите стандарт С++! Цитата:
Цитата:
И нет никакой полемики, как вы наивно думаете. Полемика может вестись со специалистом по тонкостям языка. А здесь я просто указываю на ващу безграмотность. Я не всупаю с вами в дискуссии, потому что здесь не о чем дискуссировать. Я вам указал на ваши ошибки.
Со мной можно встретиться на www.clipper.borda.ru
|
|||
20.11.2011, 13:44 | #8 |
Пользователь
Регистрация: 19.11.2011
Сообщений: 13
|
Большое спасибо за столь подробные ответы.
Очень жаль,что из-за меня разгорелась такая не шуточная дискуссия)) Книгу я прочту,но на этом останавливаться не буду. Надеюсь что скоро тоже смогу так прекрасно программировать)) |
20.11.2011, 20:27 | #9 |
Форумчанин
Регистрация: 01.07.2011
Сообщений: 423
|
Тут дискуссии нет. Тут есть агрессивная безграмотность. Между прочим безграмотность обычно всегда агрессивна.
Что я вам хотел бы посоветовать. Первое, это измените объявление функции main с void main() на int main(). Стантдартные заголовки в С++ пишутся без указания расширения, то есть вместо, например, <iostream.h> следует писать <iostream>, вместо <stdlib.h> следует писать <cstdlib>. Заголовок <conio.h> остается в своем первоначальном виде, так как он не относится к стандартным заголовкам С++. Это конечно при условии, что у вас достаточно современный компилятор. Если вы объявили целочисленную константу, задающую размер массива, то ее и надо использовать, а не "магическое" число 15. Вот, как, например, может выглядеть ваш код. Код:
что касается книги по С++, то справочник Шилдта вам не нужен, так как он не предназначен для начального курса по С++. Лучше купите замечательную книгу Дж. Либерти "Освой самостоятельно С++ за 21 день".
Со мной можно встретиться на www.clipper.borda.ru
Последний раз редактировалось Сыроежка; 20.11.2011 в 21:10. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
найти сумму элементов одномерного массива | мария 12 | Помощь студентам | 5 | 28.05.2011 15:28 |
суммирование вещ-х элементов одномерного массива... | uses_non | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 29.04.2011 08:39 |
заданиT на обработку элементов одномерного массива | Васильева Зинаида | Помощь студентам | 4 | 19.11.2010 18:55 |
Запись одномерного массива в столбец | Maxx | Microsoft Office Excel | 7 | 13.08.2010 20:34 |
Проблемы с заменой элементов одномерного массива | AlexanderIvanov | Общие вопросы C/C++ | 2 | 13.04.2010 10:23 |