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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Неадекватный результат, задание на функции 
:(
    Опции темы
Gadge
Дата 16.5.2009, 00:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Простое задание. На Visual C++ 2005.
user posted image

Проблема в том, что программа всегда выдаёт 0... =(( В чём ошибка?
Код

#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <time.h>
#include <math.h>
using namespace std;


int* zapoln(int max) 
{
   static int massiv[10];
   for(int i=0;i<max;i++) massiv[i]=rand()%5+4;
   return massiv;
}

void vuvod(int* massiv, int l)
{     int i;
     for (i=0;i<l;i++)
     {
cout << massiv[i]<< "  ";
     }
cout<<"\n ";
}

int proizv(int* massiv, int l, int minus) 
{
int q=1;
   for(int i=1;i<l;i++) q*=(massiv[i]-minus);
   return q;
}

double formula(int* M, int* L, int* C) {
  double Z=(proizv(M, 8, 1)-proizv(C, 9, 5))/(proizv(L, 7, 0)-proizv(M, 8, 0));
   return Z;
}

int main() 
{
   srand( (unsigned)time( NULL ) );
   int* M=zapoln(7);
   int* L=zapoln(6);
   int* C=zapoln(8);
   double Z=formula(M,L,C);

vuvod(M, 7);
vuvod(L, 6);
vuvod(C, 8);
   
cout<<"Z="<<Z<<"\n";
   
   return 0;

PM MAIL   Вверх
NightmareZ
Дата 16.5.2009, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


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

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



Дэбаггером пользоваться не пробывал?


--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
Dmi3ev
Дата 16.5.2009, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1698
Регистрация: 28.11.2007

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



Первая глупость, которая уж очень бросается в глаза... это 
Цитата

int* zapoln(int max) 
{
   static int massiv[10];
   for(int i=0;i<max;i++) massiv[i]=rand()%5+4;
   return massiv;
}

и вот это ее использование...
Цитата

   int* M=zapoln(7);
   int* L=zapoln(6);
   int* C=zapoln(8);

вы знаете, что будет?
Расскажу по колхозному, допустим после выполнения 
Цитата

   int* M=zapoln(7);

*M или M[0] будет равно 5 (допустим)
потом выполняется
Цитата

   int* L=zapoln(6);

*L или L[0] будет равно 7 (допустим), а теперь внимание вопрос, а чему равно *М или М[0]? 5 ? как бы не так оно будет равно 7!!!
Остальное даже не смотрел... нет смысла...

Это сообщение отредактировал(а) Dmi3ev - 16.5.2009, 01:10


--------------------

PM MAIL   Вверх
artsb
Дата 16.5.2009, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Gadge, у тебя проблема в том, что ты в функции zapoln объявил массив как статический. В результате, после выполнения этих операций:
Код

   int* M=zapoln(7);
   int* L=zapoln(6);
   int* C=zapoln(8);
   double Z=formula(M,L,C);

И M, и L, и C ссылаются на один и тот же массив. Потом в функции formula ты делаешь с ними какие-то операции. Я не разбирался какие (хочу спасть smile), но мне кажется, что дело в этом.

Добавлено @ 01:10
Dmi3ev, опередил. smile Медленно я печатаю в сонном состоянии smile

Это сообщение отредактировал(а) artsb - 16.5.2009, 01:14


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Dov
Дата 16.5.2009, 03:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(Gadge @  16.5.2009,  00:29 Найти цитируемый пост)
Проблема в том, что программа всегда выдаёт 0... =(( В чём ошибка?

так нужно, хотя бы:
Код
double Z=double(proizv(M, 8, 1)-proizv(C, 9, 5))/(proizv(L, 7, 0)-proizv(M, 8, 0));




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
NightmareZ
Дата 16.5.2009, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


[хакер]
**


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

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



Код

#include <iostream>
#include <time.h>

int* fillArray(int count) 
{
   int* arr = new int[count];
   for(int i = 0; i < count; i++) arr[i] = rand() % 5 + 4;
   return arr;
}

void output(int* arr, int count)
{
    for (int i = 0; i < count; i++)
        std::cout << arr[i]<< "  ";

    std::cout << std::endl;
    delete[] arr;
}

double mul(int* arr, int count, int minus)
{
    double result = 1;
    for (int i = 0; i < count; i++)
        result *= arr[i] - minus;
    return result;
}

double mul(int* arr, int count)
{
    double result = 1;
    for (int i = 0; i < count; i++)
        result *= arr[i];
    return result;
}

int main()
{
    srand(time(NULL));

    int* M = fillArray(7);
    int* L = fillArray(6);
    int* C = fillArray(8);

    double Z = (mul(M, 7, 1) + mul(C, 8, 5)) / (mul(L, 6) - mul(M, 7));

    output(M, 7);
    output(L, 6);
    output(C, 8);

    std::cout << "Z = " << Z << std::endl;

    return 0;
}



--------------------
NightmareZ.net - мой блог и сайт, мои проекты и прочий трэш
Ely-Art.ru - наша маленькая домашняя арт-студия
mugcraft.ru - кружки на любой вкус
PM WWW ICQ Skype GTalk AOL YIM   Вверх
Gadge
Дата 16.5.2009, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем откликнувшимся - спасибо.  smile 
Насколько я понял:
1) вносим изменение, которое подсказал Dov
2) первый блок, в котором заполняется массив, берём из варианта который предложил NightmareZ . (что бы было 3 разных массива а не один.)

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

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

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

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

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


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

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


 




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


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

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