Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141

Объединить 2 похожих метода в один

04.04.2012, 04:32. Показов 4646. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть написанные мной несколько методов
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
public static List<double> HaarTransform(List<double> f)
        {
          var copping = new List<double>();
            //var Sum = new List<double>();
            //int M = 3;
            int n = f.Count;
          var S = new List<double>(n/2);
           // double[] D=new double [n/2];
          do
          {
              for (int j = 0; j < n / 2; j++)
              {
                  S.Add((f[2 * j] + f[2 * j + 1]) / 2);
              }
              n = n / 2;
              copping = S;
              f = S;
          }
          while (n > 2);
          
           return copping;
           
        }
 
 
        public static List<double> HaarTransform1(List<double> f)
        {
            var mama = new List<double>();
            //var Sum = new List<double>();
            //int M = 3;
            int n = f.Count;
            
            var D = new List<double>(n / 2);
            // double[] D=new double [n/2];
            do
            {
                for (int j = 0; j < n / 2; j++)
                {
                    D.Add((f[2 * j] - f[2 * j + 1]) / 2);
                }
                n = n / 2;
                mama = D;
                f = D;
            }
            while (n > 2);
 
            return mama;
 
        }
 
        public static List<double> NULL(List<double> z)
        {
            double number = 210;
            var c = new List<double>(z);
            for (int l = 0; l < z.Count; l++)
            {
                if (c[l] < number)
                {
                    c[l] = 0;
                }
            }
            return c;
        }
Вот как я их применяю
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 private void button3_Click(object sender, EventArgs e)
        {
            //lstLoaded = new List<double>();
            lstHaar = Algorithms.HaarTransform(lstLoaded);
            foreach (double st in lstHaar)
            {
                //textBox1.Text += dbl.ToString();
                textBox5.AppendText(st.ToString() + "\r\n");
            }
            lstHaar1 = Algorithms.HaarTransform1(lstLoaded);
            foreach (double st in lstHaar1)
            {
                //textBox1.Text += dbl.ToString();
                textBox6.AppendText(st.ToString() + "\r\n");
            }
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            lstHaar = Algorithms.NULL(lstHaar);
            foreach (double st in lstHaar)
            {
                //textBox1.Text += dbl.ToString();
                textBox7.AppendText(st.ToString() + "\r\n");
            }
        }
Вопрос!?
Посмотрите методы HaarTransform и HaarTransform1
они делают почти одно и тоже, а как их запихнуть в один, так, чтобы выполнялось преобразование
исходный - 220, 211, 212, 218, 217, 214, 210, 202
после первого прохода (215.5, 215, 215.5, 206) и (4.5, -3, 1.5, 4)
после второго (215.25, 210.75) (0.25, 4.75). и т.д.
для того чтобы написать метод восстановления
аналогичны алгоритм прямого преобразования:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static List<Double> DirectTransform(List<Double> SourceList)
        {
            if (SourceList.Count == 1)
                return SourceList;
 
            List<Double> RetVal = new List<Double>();
            List<Double> TmpArr = new List<Double>();
 
            for (int j = 0; j < SourceList.Count; j+=2)
            {
                RetVal.Add((SourceList[j] - SourceList[j + 1]) / 2.0);
                TmpArr.Add((SourceList[j] + SourceList[j + 1]) / 2.0);
            }
 
            RetVal.AddRange(DirectTransform(TmpArr));
 
            return RetVal;
        }
аналогичный алгоритм восстановления:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static List<Double> InverseTransform(List<Double> SourceList)
        {
            if (SourceList.Count == 1)
                return SourceList;
 
            List<Double> RetVal = new List<Double>();
            List<Double> TmpPart = new List<Double>();
 
            for (int i = SourceList.Count / 2; i < SourceList.Count; i++)
                TmpPart.Add(SourceList[i]);
 
            List<Double> SecondPart = InverseTransform(TmpPart);
 
            for (int i = 0; i < SourceList.Count / 2; i++)
            {
                RetVal.Add(SecondPart[i] + SourceList[i]);
                RetVal.Add(SecondPart[i] - SourceList[i]);
            }
 
            return RetVal;
        }
пробовал подключать оба этих метода, но получал только последнее преобразование, а мне нужны все всключая первые N. Помогите пожалуйста. После завтра курсач, даже мысли не могу чётко изложить.......... если нужно то файл с проектом приложил.....
Вложения
Тип файла: rar 111111.rar (82.0 Кб, 8 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.04.2012, 04:32
Ответы с готовыми решениями:

Как объединить два похожих метода, инвертировать < > и свойства
Столкнулся с проблемой соединения двух методов, точнее раздвоения приложения на два режима. В первом режиме действия производятся с одним...

Возможно ли объединить 2 похожих метода?
Подскажите, возможно ли как то это все упростить? а то label-ов будет много которые будут обновляться из другого потока. и для каждого...

Как объединить два вычислительных метода используя классы в один программный код
Как объединить два вычислительных метода с помощью классов. Метод Ньютона и метод половинного деления. В ООП новичок, хотелось бы узнать...

4
49 / 49 / 5
Регистрация: 11.07.2011
Сообщений: 282
04.04.2012, 09:22
Насколько я понял, в методах HaarTransform и HaarTransform1 отличия только в том, что в одном методе в функции S.Add() сложение, а в другом вычитание. Значит, можно передать дополнительный параметр в определение функции и от него плясать, например:

C#
1
public static List<double> HaarTransformALL(List<double> f, string operation)
и в коде уже выполнять проверку
C#
1
2
3
4
(if operation == '+') 
S.Add((f[2 * j] + f[2 * j + 1]) / 2);
else
S.Add((f[2 * j] - f[2 * j + 1]) / 2);
вот и все)
1
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
04.04.2012, 10:10  [ТС]
да. но я после первого раза, записываю полученный результат выдаю в List, и хочу с ним работать снова,т.е провести преобразование с полученным и его не потерять

Добавлено через 5 минут
И при таком подходе пишет, что == не применяется к string..
0
20 / 19 / 0
Регистрация: 04.04.2012
Сообщений: 31
04.04.2012, 11:22
используйте две переменные - public static List<Double> PlusBuffer и MinusBuffer (к примеру), и каждый раз при прохождении метода сбрасывайте в них полученные List'ы.

Цитата Сообщение от maniac0192 Посмотреть сообщение
И при таком подходе пишет, что == не применяется к string..
вместо одинарных кавычек используйте двойные
1
17 / 17 / 5
Регистрация: 27.11.2011
Сообщений: 141
04.04.2012, 15:38  [ТС]
так вот новый код, он работает....
но вопрос, как мне теперь сделатьв один текстбокс один List а в другой текстбокс другой
вот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
 public static List<double> HaarTransformALL(List<double> f)
        {
          var SUM = new List<double>();
          var DIFF = new List<double>();
          var copy = new List<double>(f);
            //var Sum = new List<double>();
            //int M = 3;
            int n = f.Count;
          var S = new List<double>(n/2);
          var D = new List<double>(n/2);
           // double[] D=new double [n/2];
          do
          {
              for (int j = 0; j < n / 2; j++)
              {
                  S.Add((f[2 * j] + f[2 * j + 1]) / 2);
                  D.Add((copy[2 * j] - copy[2 * j + 1]) / 2);
              }
              n = n / 2;
              SUM = S;
              DIFF = D;
              f = S;
              copy = D;
          }
          while (n > 2);
          SUM.AddRange(DIFF);
           return SUM;
           
        }
и вот старый код кнопки
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
private void button3_Click(object sender, EventArgs e)
        {
            //lstLoaded = new List<double>();
            lstHaar = Algorithms.HaarTransformALL(lstLoaded);
            foreach (double st in lstHaar)
            {
                //textBox1.Text += dbl.ToString();
                textBox5.AppendText(st.ToString() + "\r\n");
            }
            lstHaar1 = Algorithms.HaarTransform1(lstLoaded);
            foreach (double st in lstHaar1)
            {
                //textBox1.Text += dbl.ToString();
                textBox6.AppendText(st.ToString() + "\r\n");
            }
        }
Добавлено через 6 минут
как разделить список SUM привыводе на 2 части, вывести обе в разные текст боксы, выполнить аогоритм NULL для плюсов, И затем обратное преобразование при нажатии следующей кнопки....?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.04.2012, 15:38
Помогаю со студенческими работами здесь

Объединить два похожих класса
Доброго времени суток. Есть два класса, полностью одинаковых в логике, различие только в том что один содержит один enum, второй другой....

Не срабатывает один из двух похожих батников
Первый работает на ура @echo off set TO=F:\backup\firebird_kartoteka\ md %TO% set vdate=%date:~-10% set vtime=%time:~0,3% set...

Один и тот же внешний жесткий диск по разному работает на двух похожих ноутбуках
Один и тот же внешний жесткий диск по разному работает на двух похожих ноутбуках. От чего это может быть? На одном ноутбуке Asus он...

Что означает первый параметр метода этого класса? И почему при вызове метода передаётся один параметр(второй)?
public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)

Объединить 4 модуля в один
Есть 4 модуля. По отдельности все они работают. Нужны для того, чтобы определить кто открыл файл, лежащий на сервере. Помогите их...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru