Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2011, 15:26   #1
Annabel
Пользователь
 
Аватар для Annabel
 
Регистрация: 14.11.2009
Сообщений: 29
По умолчанию проблема с петлёй С++

Опять слёзно прошу о помощи=\
смысл куска задачи таков:
алтернативы-строчки, критерии-столбцы. Критерии представлены в форме интервала, соответственно приделяем к критерию 2 столбца.
для нормализации нужно суммировать все значения в двух столбцах данного критерия возведённые в квадрат. на полученный результат поделить по очереди каждое значение данного критерия. и так от столбца к столбцу. в общем, не знаю что творится с суммой
Помогите, Люди Добрые, кто чем может

#include<iostream>
#include<math.h>
using namespace std;
//----------------------------------------------------
void wprowadzanie( float **_a, int _m, int _n )
{
int c=1;
for(int i=0; i<_m; i++)
{
for(int j=0; j<_n; j++)
{
cout<<"Dla kryterium "<<c<<" : "<<endl;
if(j%2==0)
{
cout<<"Wprowadz poczatek przedzialu"<<endl;
cin>>_a[i][j];
}
else
{
cout<<"Wprowadz koniec przedzialu"<<endl;
cin>>_a[i][j];
c++;
}
}
}
}
//------------------------------------------------------
void wypisywanie( float **_a, int _m, int _n )
{
cout<<"tablica"<<endl;
for(int i=0; i<_m; i++)
{
for(int j=0; j<_n; j++)
{
cout<<_a[i][j]<<" ";

}
cout<<endl;
}
}
//--------------------------------------------------------
void normalizacja( float **_a, int _m, int _n )
{
int s=_n/2;
float suma[s];
for(int l=0; l<s; l++)
{
suma[l]=0;
}

for(int i=0; i<_m; i++)
{
for(int l=0; l<s; l++)
{
for(int j=0; j<_n; j++)
{
if(j%2==0)
{
suma[l]=suma[l]+(_a[i][j]*_a[i][j])+(_a[i][j+1]*_a[i][j+1]);

}
}
}
}

for(int l=0; l<s; l++)
{
for(int j=0; j<_n; j++)
{
if(j%2==0)
{
for(int i=0; i<_m; i++)
{
_a[i][j]=_a[i][j]/suma[l];
_a[i][j+1]=_a[i][j+1]/suma[l];
}
}
}
}
}
//------------------------------------------------------
int main()
{
float **a;
int m, n;
cout<<"Wprowadz ilosc alternatyw"<<endl;
cin>>m;
cout<<"Wprowadz ilosc kryteriow"<<endl;
cin>>n;
n=n*2;
a= new float *[m];
a[n]= new float[n];
wprowadzanie(a, m, n);
wypisywanie(a, m, n);
normalizacja(a, m, n);
wypisywanie(a, m, n);
system("PAUSE");
}
Annabel вне форума Ответить с цитированием
Старый 16.02.2011, 16:16   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

1. POWAŻNY BŁĄD przy przydzielaniu pamięci pod tablicę dwuwymiarową! Czytać do pełnej jasności umysłu K&R lub Grębosza!!

2. Żeby "Ludzie dobrzy" lepiej zrozumiali warunki zadania... Weźmiemy przykładową tablicę:
1 2
3 4
Jak musi wyglądać tablica znormalizowana? Proszę Pani - ołówkiem na papierze, krok za krokiem, i po tym tu napisać.

3. Pętla = цикл (ros.)
Vago вне форума Ответить с цитированием
Старый 16.02.2011, 17:29   #3
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Annabel, я конечно не приветствую таки посты как у Vago, но разбираться в вашем коде, с таким сумбурным описанием никто не будет.
Мой совет. Локализируйте ошибку и выложите проблеммный участок кода.
Если я выложу 2000 сток своей программы и попрошу мне помочь, я буду выглядеть просто смешно. А для "напишите за меня", есть рубрика ФРИЛАНС.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 16.02.2011, 17:34   #4
Annabel
Пользователь
 
Аватар для Annabel
 
Регистрация: 14.11.2009
Сообщений: 29
По умолчанию

właśnie nie umiem się operować tablicami wielowymiarowymi i udało mi się tylko w ten sposób=\
Напишу всё-таки по-русски
под нормализацией я имела ввиду нечто такое:
допустим у нас есть 2 критерия и 2 альтернативы.
положим:
1 критерий для 1 альтернативы
(1; 2)
2 критерий для 1 альтернативы
(3; 4)
1 критерий для 2 альтернативы
(3; 4)
2 критерий для 2 альтернативы
(5; 6)
т.е. если представить в форме таблицы:
1 2 3 4
3 4 5 6

s1=1^2+2^2+3^2+4^2=30
s2=3^2+4^2+5^2+6^2=86

1/30 2/30 3/86 4/86
3/30 4/30 5/86 6/86

вот как-то так, надеюсь, немного прояснила ситуацию
Annabel вне форума Ответить с цитированием
Старый 16.02.2011, 17:36   #5
Annabel
Пользователь
 
Аватар для Annabel
 
Регистрация: 14.11.2009
Сообщений: 29
По умолчанию

я не прошу за меня ничего писать просто не могу найти ошибку, которая кроется где-то здесь:

void normalizacja( float **_a, int _m, int _n )
{
int s=_n/2;
float suma[s];
for(int l=0; l<s; l++)
{
suma[l]=0;
}

for(int i=0; i<_m; i++)
{
for(int l=0; l<s; l++)
{
for(int j=0; j<_n; j++)
{
if(j%2==0)
{
suma[l]=suma[l]+(_a[i][j]*_a[i][j])+(_a[i][j+1]*_a[i][j+1]);

}
}
}
}

for(int l=0; l<s; l++)
{
for(int j=0; j<_n; j++)
{
if(j%2==0)
{
for(int i=0; i<_m; i++)
{
_a[i][j]=_a[i][j]/suma[l];
_a[i][j+1]=_a[i][j+1]/suma[l];
}
}
}
}
}
Annabel вне форума Ответить с цитированием
Старый 16.02.2011, 18:15   #6
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Что это за конструкция?
for(int i=0; i<_m; i++)
В C++ надо писать так:
for(int i=0; i<=m; i++)
Ошибки не выдаёт? Если не выдаёт, смените компилятор.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 16.02.2011, 18:21   #7
Д_М
Пользователь
 
Регистрация: 02.02.2011
Сообщений: 92
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Что это за конструкция?
for(int i=0; i<_m; i++)
В C++ надо писать так:
for(int i=0; i<=m; i++)
Ошибки не выдаёт? Если не выдаёт, смените компилятор.
_m - аргумент функции, компилятор менять не надо
Д_М вне форума Ответить с цитированием
Старый 16.02.2011, 19:56   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Annabel, если Вы, действительно, хотите разобраться - возьмите Вордовский редактор формул (или TEX, или то, к чему привыкли, и напишите общие формулы для suma[l] (со знаками суммы, правильно расставив индексы ) через соответствующие эл-ты массива и потом - общие формулы для нового массива через только что вычисленные suma[l]. Дальнейшее программирование циклов в программе - это уже будет дело голой техники. Ну и, ещё раз, - у Вас место под матрицу неправильно выделяется! Пока Вы это не исправите - дальше идти нет смысла.
Vago вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД DRAGGER Компьютерное железо 6 04.01.2009 23:37