![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Studeht |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 6.4.2009 Где: Тула Репутация: нет Всего: нет |
Здравствуйте, Господа программисты! У меня возникла проблема с решением следующей задачи:
Вычислить z=x^k1 * y^k2/(s1+s2) где s1 и k1 – сумма и количество положительных элементов массива (a1, a2, … , a15); s2 и k2 – сумма и количество положительных элементов массива (b1, b2,…, b15). Вот мои мысли:
Только не судите строго это моя первая программа на C++. |
|||
|
||||
InvalidProperty |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: 2 Всего: 9 |
уфффф.... жуть.... можно книжки по C/C++ почитать. Можно даже сразу по C++. После прочтения отпадут многие вопросы, исправятся многие ошибки. Нашаряк сходу писать программу на языке нехорошо. Тем более, по всей видимости, это первая программа вообще, а не только на C++, я прав?
несколько указаний (сразу скажу, что код править не буду)
должны быть для данного случая глобальными.
&& - логическое И, т.е. выражение абсурдно. упростить можно все очень хорошо. Советую прочитать хотя бы пару-тройку статей по С++, а лучше книгу. Лафоре или Страуструпа. Второй, по совместительству, еще и создатель языка ![]() -------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
||||
|
|||||
Studeht |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 6.4.2009 Где: Тула Репутация: нет Всего: нет |
Нет не прав, я изучаю Pascal, а c C++ столкнулся впервые |
|||
|
||||
Ezik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 15.8.2007 Репутация: 2 Всего: 2 |
У нас в свое время такого рода задание было на изучение функции. Поэтому я позволил себе немного переделать Ваше решение. Будут вопросы - пишите.
|
|||
|
||||
Studeht |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 6.4.2009 Где: Тула Репутация: нет Всего: нет |
Спасибо огромное Ezik!!! Только у меня 2 вопроса: int *mas что значит *? и int &sum - & это насколько я знаю операция взятия адреса?
|
|||
|
||||
InvalidProperty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: 2 Всего: 9 |
mas будет передан по указателю. Т.к. все массивы суть указатели, то это то, что тебе нужно. отчасти верно. Либо, если int &sum (как аргумент функции) - говорит о том, что sum будет передана по ссылке. Ссылка - алиас переменной, т.е. ты как будто бы работаешь в функции именно с той переменной, которая была в кач-ве ее аргумента. Почитай про ссылки и указатели в С++ - полезно Это сообщение отредактировал(а) InvalidProperty - 8.4.2009, 13:38 -------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
Ezik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 15.8.2007 Репутация: 2 Всего: 2 |
Не за что
![]() звездочка - значит указатель. В данном случае указатель на начало массива, можно было написать int mas[] или int mas[15]. int &sum - & это говорит о том, что мы будем изменять значение переменной в процедуре, если бы мы написали int sum, то после выхода из процедуры - значение переменной осталось бы таким же, например: void change(int a) { a = 1; } void main() { int a = 2; change(a); cout << a; // выведет 2 , а не один } void change(int &a) { a = 1; } void main() { int a = 2; change(a); cout << a; // выведет 1 , } |
|||
|
||||
InvalidProperty |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 356 Регистрация: 31.10.2007 Где: Россия, Казань Репутация: 2 Всего: 9 |
некорректно, см. мой пост выше. если не передавать по ссылке, то будет заведена копия переменной на время жизни функции, т.о. что эта новая копия никакого отношения к тому, что передавалось иметь не будет, за исключением того, что изначально примет его значение. есть три вида передачи аргументов.
-------------------- dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null echo $0 >> $0 |
|||
|
||||
Ezik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 15.8.2007 Репутация: 2 Всего: 2 |
Я видел твой пост, я попытался объяснить своими словами. Про передачу аргументов я в курсе и знаю как оно работает. "Не первый год замужем".
|
|||
|
||||
Studeht |
|
|||
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 6.4.2009 Где: Тула Репутация: нет Всего: нет |
Еще раз огромное спасибо!!!
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |