Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массивы 
V
    Опции темы
Studeht
  Дата 8.4.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.4.2009
Где: Тула

Репутация: нет
Всего: нет



Здравствуйте, Господа программисты! У меня возникла проблема с решением следующей задачи:
Вычислить z=x^k1 * y^k2/(s1+s2)
где s1 и k1 – сумма и количество положительных элементов массива    
(a1, a2, … , a15); s2 и k2 – сумма и количество положительных элементов массива (b1, b2,…, b15).

Вот мои мысли:
Код

#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>

void InputData()
{
        int x,y;
        cout<<"Введите x ";
        cin>>x;
        cout<<"\nВведите y ";
        cin>>y;
}

void MasA()
{
        randomize();
        int Mas[15];
        int i,Sum=0,Quantity=0;
          for (i=0; i<16; i++);
            {
             Mas[i]=random(40)-20;
             cout<<" "<<Mas[i];
            }
          for (i=0; i<16; i++);
            if (Mas[i]>0) Sum=Mas[i]+Sum && Quantity++;
}

void MasB()
{
        randomize();
        int Mas[15];
        int i,Sum1=0,Quantity1=0;
          for (i=0; i<16; i++);
            {
             Mas[i]=random(40)-20;
             cout<<" "<<Mas[i];
            }
          for (i=0; i<16; i++);
            if (Mas[i]>0) Sum1=Mas[i]+Sum1 && Quantity1++;
}

float OutputData(float Z)
{
        int x,y,Quantity,Quantity1,Sum,Sum1;
        Z=pow(x,Quantity)*pow(y,Quantity1)/(Sum+Sum1);
        return Z;
}

void main()
{
        float Z;
        InputData();
        MasA();
        MasB();
        OutputData(Z);
}


Только не судите строго это моя первая программа на C++.
PM MAIL   Вверх
InvalidProperty
Дата 8.4.2009, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: 2
Всего: 9



уфффф.... жуть.... можно книжки по C/C++ почитать. Можно даже сразу по C++. После прочтения отпадут многие вопросы, исправятся многие ошибки. Нашаряк сходу писать программу на языке нехорошо. Тем более, по всей видимости, это первая программа вообще, а не только на C++, я прав?

несколько указаний (сразу скажу, что код править не буду)

Код

int x,y,Quantity,Quantity1,Sum,Sum1;


должны быть для данного случая глобальными.

Код

if (Mas[i]>0) Sum1=Mas[i]+Sum1 && Quantity1++;


&& - логическое И, т.е. выражение абсурдно.

упростить можно все очень хорошо.

Советую прочитать хотя бы пару-тройку статей по С++, а лучше книгу. Лафоре или Страуструпа. Второй, по совместительству, еще и создатель языка smile


--------------------
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
PM MAIL ICQ Jabber   Вверх
Studeht
  Дата 8.4.2009, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.4.2009
Где: Тула

Репутация: нет
Всего: нет



Цитата

это первая программа вообще, а не только на C++, я прав?

Нет не прав, я изучаю Pascal, а c C++ столкнулся впервые
PM MAIL   Вверх
Ezik
Дата 8.4.2009, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.8.2007

Репутация: 2
Всего: 2



У нас в свое время такого рода задание было на изучение функции. Поэтому я позволил себе немного переделать Ваше решение. Будут вопросы - пишите.

Код

#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
  
void Mas(int *mas)
{

        for (int i=0; i < 15; i++)
                mas[i] = random(40)-20;

}

void SumAndCount(int *mas, int &sum, int &count)
{
          sum = 0;
          count = 0;
          for (int i=0; i<15; i++)
            if (mas[i] > 0)
            {
                 sum += mas[i];
                 count++;
            }
}

void PrintMas(int *mas)
{
        for (int i=0; i < 15; i++)
                cout << mas[i] << " ";
        cout << "\n";
}

void main()
{
        randomize();
        int x,y,masA[15],masB[15],sum1,sum2,count1,count2;
        float Z;

        cout << "VVedite x: ";
        cin >> x;
        cout<<"\nVVedite y: ";
        cin>>y;
        Mas(masA);
        Mas(masB);
        PrintMas(masA);
        PrintMas(masB);
        SumAndCount(masA, sum1, count1);
        SumAndCount(masB, sum2, count2);

        Z=pow(x,count1)*pow(y,count2)/(sum1+sum2);
        cout << Z;

        getch();

}

PM MAIL ICQ   Вверх
Studeht
Дата 8.4.2009, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.4.2009
Где: Тула

Репутация: нет
Всего: нет



Спасибо огромное Ezik!!! Только у меня 2 вопроса: int *mas что значит *? и int &sum - & это насколько я знаю операция взятия адреса?
PM MAIL   Вверх
InvalidProperty
Дата 8.4.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: 2
Всего: 9



Код

int *mas

mas будет передан по указателю. Т.к. все массивы суть указатели, то это то, что тебе нужно.

Цитата(Studeht @  8.4.2009,  13:28 Найти цитируемый пост)
int &sum - & это насколько я знаю операция взятия адреса? 

отчасти верно. Либо, если 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
PM MAIL ICQ Jabber   Вверх
Ezik
Дата 8.4.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.8.2007

Репутация: 2
Всего: 2



Не за что smile
звездочка - значит указатель. В данном случае указатель на начало массива, можно было написать 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 ,
}

PM MAIL ICQ   Вверх
InvalidProperty
Дата 8.4.2009, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

Репутация: 2
Всего: 9



Цитата(Ezik @  8.4.2009,  13:39 Найти цитируемый пост)
int &sum - & это говорит о том, что мы будем изменять значение переменной в процедуре, если бы мы написали int sum, то после выхода из процедуры - значение переменной осталось бы таким же, например:

некорректно, см. мой пост выше.
если не передавать по ссылке, то будет заведена копия переменной на время жизни функции, т.о. что эта новая копия никакого отношения к тому, что передавалось иметь не будет, за исключением того, что изначально примет его значение.
есть три вида передачи аргументов.
  •  по значению (int i)
  •  по ссылке (int &i)
  •  по указателю (int *i)



--------------------
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
PM MAIL ICQ Jabber   Вверх
Ezik
Дата 8.4.2009, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 15.8.2007

Репутация: 2
Всего: 2



Я видел твой пост, я попытался объяснить своими словами. Про передачу аргументов я в курсе и знаю как оно работает. "Не первый год замужем".
PM MAIL ICQ   Вверх
Studeht
Дата 8.4.2009, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 6.4.2009
Где: Тула

Репутация: нет
Всего: нет



Еще раз огромное спасибо!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0776 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.