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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2011, 09:54   #1
RANLOD
Новичок
Джуниор
 
Регистрация: 10.11.2011
Сообщений: 2
По умолчанию Не работает алгоритм создания двумерной матрицы

В программе не строится двумерная матрица(выдаёт нули). В программе по сути нужно посчитать количество значений удовлетворяющие определённому критерию. Я уже всё перепробовал(в меру своей соображалки).
Код:
namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            double[] znachen, obuch, proc; ;
            //decimal[] obuch, proc;
            // znachen - Исходные значения
            znachen = new double[] {};
 
            //Считаем процентное измененние
            proc = new double[znachen.Length-1];
                   
            for (int i = 0; i < proc.Length; i++) 
                proc[i] = (znachen[i] / znachen[i+1] - 1) * 100;
 
                                              
            obuch = new double[5000];  // Обучающая выборка
 
            for (int i = 5000, y = 0; i > 0; i--, y++)
                obuch[y] = proc[proc.Length - i];
            //foreach (double x in obuch) Console.WriteLine(x);
 
            // Находим max и min obuch[], а так же количество значений(colznach) в пределах которого ои изменяется
            int max = (int) (obuch.Max()+1), min = (int) (obuch.Min()-1);
            int predel = max+Math.Abs(min);
            Console.WriteLine("MAX: "+max + "  "+obuch.Max() +" MIN:  "+ min+"   "+obuch.Min()+ "\nPREDEL " +predel);
            int colznach = (int)((predel / 0.050)+2);
            Console.WriteLine("COLICH ZNACHEN: "+colznach);
            
            // Интервал между min и max с учётом количествва значений
            double[] interval = new double[colznach]; 
            interval[0]=min;
            for (int i = 1; i < colznach; i++) // Заполняем массив
                interval[i] = interval[i - 1] + 0.050;
 
            // Двумерный массив и его заполнения
            
            double[,] arg = new double[colznach, colznach];  // Двумерный массив и его заполнение
            for (int i = 0; i < colznach-1; i++)    // Строки
            {
                Console.Write("Построение строки {0}: ", i);
                for (int y = 0; y < colznach-1; y++)  // Столбцы
                {
                    int[] s = new int[obuch.Length - 1];
                    for (int z = 0; z < obuch.Length-1; z++)
                    {
                        if (obuch[z] >= interval[y])
                        {
                            if (obuch[z] < interval[y + 1])
                            {
                                if (obuch[z + 1] >= interval[i])
                                {
                                    if (obuch[z + 1] < interval[i + 1])
                                        s[z] = 1;
                                    else s[z] = 0;
                                }
                                else s[z] = 0;
                            }
                            else s[z] = 0;
                        }
                        else s[z] = 0;
                    }
                    int sum = 0;
                    for (int w = 0; w < s.Length; w++)
                        sum = sum + s[w];
                        arg[i, y] = (double)(sum / (obuch.Length - 1));
                }
                Console.WriteLine("Окончено.");
            }
            // Вывод середины массива
            for (int i = 30; i <= 50; i++)
            {
                for (int u = 30; u <= 50; u++)
                {
                    Console.Write(arg[i, u] + " ");
                }
                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }
}

Последний раз редактировалось RANLOD; 11.11.2011 в 09:58.
RANLOD вне форума Ответить с цитированием
Старый 11.11.2011, 11:16   #2
alexmelyon
 
Регистрация: 04.06.2010
Сообщений: 5
По умолчанию

Ну во первых надо было объяснить в чём дело, где массив и тд.
А во вторых у тебя делятся две переменные int. Компилятор считает что раз они обе int, то результат надо тоже выдать int (там перегруженное деление). Так что по факту преобразуется в (double) у тебя int. Умножь всю эту байду на 0.0 и заработает.
alexmelyon вне форума Ответить с цитированием
Старый 11.11.2011, 11:16   #3
alexmelyon
 
Регистрация: 04.06.2010
Сообщений: 5
По умолчанию

Всмысле байду в скобках. И умножай внутри скобок тоже.
alexmelyon вне форума Ответить с цитированием
Старый 11.11.2011, 14:52   #4
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

А вообще, есть хорошая штука - дебагер.
dampirik вне форума Ответить с цитированием
Старый 11.11.2011, 16:54   #5
RANLOD
Новичок
Джуниор
 
Регистрация: 10.11.2011
Сообщений: 2
По умолчанию

alexmelyon спасибо. Я почему то думал, что указать явное приведение типов будет достаточно(опыт в программировании не большой).
Только небольшая поправка умножить не 0.0 а 1.0, а так заработало.
RANLOD вне форума Ответить с цитированием
Старый 11.11.2011, 19:05   #6
dampirik
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 722
По умолчанию

Цитата:
alexmelyon спасибо. Я почему то думал, что указать явное приведение типов будет достаточно(опыт в программировании не большой).
Явное приведение достаточно, просто нужно понимать где и как использовать. Просто есть разница между:
int a = 8;
int b = 3;
double c1 = (double)(a/b);
double c2 = (double)a/(double)b;
чувствуйте разницу?
dampirik вне форума Ответить с цитированием
Старый 11.11.2011, 23:37   #7
alexmelyon
 
Регистрация: 04.06.2010
Сообщений: 5
По умолчанию

RANLOD не беспокойся, это действительно не простая ошибка.
alexmelyon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
диапозон значений элементов для каждой строки двумерной матрицы gagarin614 Visual C++ 1 09.11.2011 12:37
Алгоритм создания ключа ZvEr_HaCkEr Свободное общение 5 23.05.2011 07:19
Алгоритм создания TEdit. Alex Cones Свободное общение 23 05.12.2010 21:39
Преобразование двумерной матрицы в одномерную shamrock Помощь студентам 7 18.06.2009 18:09
Удаление элементов из двумерной матрицы Димитрон Помощь студентам 8 28.05.2009 22:38