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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с сортировкой массива [C++] 
:(
    Опции темы
GOBLIN_TT
Дата 8.11.2007, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Всем привет!)

Ребят помогите решить задачку по С++, чесно говоря ломаю 3й день голову и ни как, решил попросить о помощи вас )
Вобщем есть программа, в ней 2 функции, в 1 функции, мы вводим элементы массива, и передаём заполненный массив во 2ю функцию.
Во 2й функции, мы сортируем массив, тоесть находим сумму отрицательных эллементов массива, и произведение положительных. (то есть она должна перемножить положительные, и найти сумму отрицательных.)
Вот проблема, в том что когда мы передаём массив из первой функции, во 2ю то все весь массив заполняется первой строкой.
Пример:
вводим
1
5
-2
Передаём во вторую функцию, получаем.
1
1
1

Почему это происходит я и немогу понять(
Ребят помогите пожалуйста, в субботу сдавать экзамен, а я сам неуспею(
Помогите найти ошибку))

Заранее ОГРОМНОЕ СПАСИБО!)
 smile 
Код

#include <iostream.h>
#include <windows.h>

char bufRus[256];
char *Rus (const char* text)

{
 CharToOem(text,bufRus);
 return bufRus;
}

int n;

double *func () // Объявляем функцию, и переменные в ней
{

    cout <<Rus ("Введите колличество эллементов массива: ");
    cin >>n;

    double *ptr = new double[n];

 for (int i=0; i < n; i++)
 {
    cout << "array["<<i <<"] :"; // Пополняем массив!)
    cin >>ptr[i];
 }

return ptr;
}

int main ()
{

 double otr = 0,pol = 0;

 double *numb = func (); // Передаём массив в функцию!

 system("cls");

 for (int f=0; f<n; f++)
    cout <<"array[" <<f <<"] = " <<numb[f] <<endl;


 for (int r=0; r<n; r++)
 {
     cout <<">>" <<*numb <<endl;


 }


 for (int d=0; d <n; d++)
 {
    if (numb[d] > 0)
    pol = numb[d] * numb[d]; //Сортируем массив

    if (numb[d] < 0)
    otr = numb[d] + numb[d];
 
 }

 cout <<Rus ("Произведение положительных элементов = "); cout <<pol <<endl;
 cout <<Rus ("Сумма отрицательных элементов = "); cout <<otr <<endl;

 delete []numb;
 
 
 return 0;
}


--------------------
PM MAIL WWW ICQ   Вверх
marcusmae
Дата 8.11.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


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

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



Код

 for (int r=0; r<n; r++)
 {
     cout <<">>" <<numb[r] <<endl;
 }

?


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Dogo
  Дата 8.11.2007, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

#include "stdafx.h"
#include <iostream>    
#include <windows.h>
#include <conio.h>

using std::cout;
using std::cin;
using std::endl;
    

char bufRus[256];    
char *Rus (const char* text)
{    
 CharToOem(text,bufRus);    
 return bufRus;    
}
    

void func(double dArr_[], int iLength) // Объявляем функцию, и переменные в ней    
{
 for (int i=0; i < iLength; i++)    
 {    
    cout << "array["<<i <<"] :"; // Пополняем массив!)    
    cin >>dArr_[i];    
 }        
}
    

int main ()    
{
 int n;
 double *dArr = new double[n];
 double otr = 0, pol = 1;  //Заменил инициализацию произведения единицей.

 cout <<Rus ("Введите колличество эллементов массива: ");    
 cin >>n;

 func(dArr, n); //Вот теперь действительно "Передаём массив в функцию!" !!!
 system("cls");
 for (int f=0; f<n; f++)    
    cout <<"array[" <<f <<"] = " <<dArr[f] <<endl;

 for (int r=0; r<n; r++)    
   cout <<">>" <<dArr[r] <<endl; 
    


 for (int d=0; d <n; d++)    
 {    
    if (dArr[d] > 0)    
    pol *= dArr[d]; //Сортируем массив
    if (dArr[d] < 0)    
    otr += dArr[d];    
 }
    

 cout <<Rus ("Произведение положительных элементов = "); cout <<pol <<endl;    
 cout <<Rus ("Сумма отрицательных элементов = "); cout <<otr <<endl;    

 delete []dArr;    
 getch();    
 return 0;
    
}

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


Шустрый
*


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

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



Dogo  - спасибо, слушай ты на чём компилил на VC 6 она скомпилилась, но вывела просто чёрный экран..)

Пытался найти ошибку и понял что проблемма здесь.

Код

for (int d=0; d <n; d++)
{
    if (numb[d] > 0)
        for (int q=0; q<n; q++) pol+=numb[q];
    if (numb[d] < 0)
        for (int w=0; w<n; w++) otr*=numb[w];
}


Потому,что если сделать без IF то она отличо скаладывает эллементы.
for (int q=0; q<n; q++) pol+=numb[q];

Но при создании сортировки начинает косячить (
в чём фишка?
значит функция пердаётся но проблема в сортировке.

marcusmae  - делал для себя, забыл убрать.
--------------------
PM MAIL WWW ICQ   Вверх
Dims
Дата 9.11.2007, 02:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я что-то не понял, чего ты делаешь и почему ты это называешь "сортировкой".

Насколько я понял тебе надо написать не так:

Код

 for (int d=0; d <n; d++)
 {
    if (numb[d] > 0)
    pol = numb[d] * numb[d]; //Сортируем массив
    if (numb[d] < 0)
    otr = numb[d] + numb[d];
 
 }


а вот так

Код

 for (int d=0; d <n; d++)
 {
    if (numb[d] > 0)
    pol *= numb[d]; //Сортируем массив
    if (numb[d] < 0)
    otr += numb[d];
 
 }


Что вот это такое

Код


for (int d=0; d <n; d++)
{
    if (numb[d] > 0)
        for (int q=0; q<n; q++) pol+=numb[q];
    if (numb[d] < 0)
        for (int w=0; w<n; w++) otr*=numb[w];
}


я вообще не понял.

Это сообщение отредактировал(а) Dims - 9.11.2007, 02:58
PM MAIL   Вверх
Dogo
Дата 9.11.2007, 04:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(GOBLIN_TT @  9.11.2007,  02:50 Найти цитируемый пост)
Потому,что если сделать без IF то она отличо скаладывает эллементы.for (int q=0; q<n; q++) pol+=numb[q];

Нет, ифы не убирай! Нарушиться логика программы, первый иф проверяет если элемент - число положительное, то он значение переменной хранящей произведение положительных чисел домножает на значение этого эл-а. Второй иф прибавляет значение отрицательного элемента к значению переменной хранящей сумму отрицательных чисел.

Цитата(GOBLIN_TT @  9.11.2007,  02:50 Найти цитируемый пост)
Dogo  - спасибо, слушай ты на чём компилил на VC 6 она скомпилилась, но вывела просто чёрный экран..)Пытался найти ошибку и понял что проблема здесь.

Хым, да я не компилил вообще листинг из своего первого поста...  smile 
А ошибка там кроется в том что переменная n используется раньше чем она получает значение... 

Цитата(Dogo @  9.11.2007,  00:49 Найти цитируемый пост)
int n; double *dArr = new double[n]; double otr = 0, pol = 1;  //Заменил инициализацию произведения единицей. cout <<Rus ("Введите колличество эллементов массива: ");     cin >>n;


нужно перенести строку
Код

double *dArr = new double[n];

Она должна идти следующей, после строки 
Код

cin >>n;


Перенеси строчку кода и все заработает  smile  (Проверял в VS2003)
--------------------
 
PM MAIL ICQ   Вверх
GOBLIN_TT
Дата 10.11.2007, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ребят спасибо вам большое!!!))

Очень выручли!) smile 
--------------------
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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