C#, Python и др. языки для числовых лотерей.

Программы для анализа и игры в лотереи

Модераторы: nord73, bubumbr

Ответить
Аватара пользователя
иван
Гуру
Гуру
Сообщения: 1311
Зарегистрирован: Пн янв 26, 2009 3:35 pm
Откуда: Краноярск
Благодарил (а): 95 раз
Поблагодарили: 143 раза

Re: C#, Python и др. языки для числовых лотерей.

Сообщение иван » Сб мар 14, 2020 3:50 pm

иван писал(а):
Ср мар 11, 2020 9:43 pm
Предварительная версия программы для выбора тиражей
2020-03-12_00-38-56.png

Код: Выделить всё

using System;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace Selecting_Rows
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //Выбрать место для открытия файла
            //Инициализуруем новый экземпляр этого класса 
            textBox1.Text = "";
            OpenFileDialog save = new OpenFileDialog();
            if (save.ShowDialog() == DialogResult.OK)
            {
                textBox1.Text = File.ReadAllText(save.FileName);
            }
            textBox1.Text = textBox1.Text.Trim();
            label1.Text = textBox1.Lines.Length.ToString();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //Выбрать место для сохранения файла
            //Инициализуруем новый экземпляр этого класса 
            SaveFileDialog save = new SaveFileDialog();
            save.DefaultExt = ".txt";
            save.Filter = "Сформированные ряды|*.txt ";
            if (save.ShowDialog() == DialogResult.OK)
            {
                StreamWriter data = new StreamWriter(save.FileName, true, Encoding.Unicode);
                data.WriteLine(textBox1.Text, true);
                data.Close();
            }

        }

        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Clear();
            textBox2.Clear();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            string strText = textBox1.Text;
            string strTab = strText.Replace("\t", " ");
            textBox1.Text = strTab;
        }

        private void button5_Click(object sender, EventArgs e)
        {
            textBox2.Clear();
            StringBuilder sb = new StringBuilder();
            string[] str = textBox1.Text.Split(new Char[] { '\r' });

            int n = int.Parse(numericUpDown1.Value.ToString());

            for (int i = n - 1; i < str.Length; i += n)
            {
                sb.AppendFormat(str[i]);
                sb.AppendLine();
            }

            textBox2.Text = sb.ToString();
            textBox2.Text = textBox2.Text.Trim();
            label4.Text = textBox2.Lines.Length.ToString();
        }
    }
}
Готовая программа
Selecting_Rows.rar
(177.42 КБ) 3 скачивания

Аватара пользователя
иван
Гуру
Гуру
Сообщения: 1311
Зарегистрирован: Пн янв 26, 2009 3:35 pm
Откуда: Краноярск
Благодарил (а): 95 раз
Поблагодарили: 143 раза

Re: C#, Python и др. языки для числовых лотерей.

Сообщение иван » Вс мар 22, 2020 4:22 pm

Пишу программу для сложения чисел.
Но при сложении программа тормозит
Скрины
2020-03-22_19-03-30.png
2020-03-22_19-03-30.png (35 КБ) 242 просмотра
2020-03-22_19-06-53.png
2020-03-22_19-06-53.png (35.16 КБ) 242 просмотра
При большом количестве вариантов считает долго
Думаю тормозит строка

Код: Выделить всё

 string str = textBox2.Lines[j];//Тормозит здесь
Что можно здесь сделать как оптимизировать на быстродействие.
Igor-san уже давал код для суммы строк.
Наверное нужно все что находиться в текстбоксе преобразовать в массив чисел (Есть быстрый метод преобразования строк текстбокса в массив чисел)
Но у меня в строке только одно число а не массив чисел
Код программы

Код: Выделить всё

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;

namespace SumNumbers
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Clear();


            List<int> listOfComb = new List<int>();//Объявляем объек класса с пустым значением
            int numbers = int.Parse(textBox1.Text);

            for (int i = 1; i <= numbers; i++)
            {
                listOfComb.Add(i);
            }
            textBox2.Text += string.Join("\r\n", listOfComb.ConvertAll(x => x.ToString("D6")));
            textBox2.Text = textBox2.Text.Trim();

        }

        private void button2_Click(object sender, EventArgs e)
        {
            textBox3.Clear();
            textBox4.Clear();
            var timer = new Stopwatch(); //для контроля быстродействия определенных мест
            timer.Start();

            List<int> listOfComb = new List<int>();//Объявляем объек класса с пустым значением

            int count = textBox2.Lines.Length;

            timer.Stop();
            textBox4.AppendText("Этап сумма 1: " + timer.Elapsed.ToString(@"m\:ss\.fff") + Environment.NewLine);
            timer.Restart();

            for (int j = 0; j < count; j++)
            {
                string str = textBox2.Lines[j];//Тормозит здесь

                char[] ch = str.ToCharArray(); //Преобразуем строку в массив

                int[] intArray = new int[ch.Length];//Вычисляем длинну массива

                for (int i = 0; i < ch.Length; i++)//Проходим в строке по элементам
                {
                    intArray[i] = int.Parse(ch[i].ToString());
                }
                listOfComb.Add(intArray.Sum());//Вычисляем сумму каждой строки              
            }
            timer.Stop();
            textBox4.AppendText("Этап сумма 2: " + timer.Elapsed.ToString(@"m\:ss\.fff") + Environment.NewLine);
            timer.Restart();

            textBox3.Text += string.Join("\r\n", listOfComb.ConvertAll(x => x.ToString("D2")));

            timer.Stop();
            textBox4.AppendText("Этап сумма 3: " + timer.Elapsed.ToString(@"m\:ss\.fff") + Environment.NewLine);
        }
    }
}
программа
SumNumbers.rar
(168.49 КБ) 3 скачивания

Аватара пользователя
Igor-san
Site Admin
Site Admin
Сообщения: 11519
Зарегистрирован: Чт май 08, 2003 4:00 am
Откуда: Moscow
Благодарил (а): 19 раз
Поблагодарили: 280 раз
Контактная информация:

Re: C#, Python и др. языки для числовых лотерей.

Сообщение Igor-san » Вс мар 22, 2020 5:35 pm

иван писал(а):
Вс мар 22, 2020 4:22 pm
Пишу программу для сложения чисел.
Но при сложении программа тормозит

При большом количестве вариантов считает долго

Igor-san уже давал код для суммы строк.
Наверное нужно все что находиться в текстбоксе преобразовать в массив чисел (Есть быстрый метод преобразования строк текстбокса в массив чисел)
Но у меня в строке только одно число а не массив чисел
1) Ну во первых есть numericUpDown для ввода одного числа - вместо textBox1
2) Для рабочей версии нужно в Release компилировать, значительно быстрее чем в Debug, который только для отладки
3) Немного переделать код что я тебе давал и все будет быстро.

Код: Выделить всё

 private void button2_Click(object sender, EventArgs e)
        {
            textBox3.Clear();
            textBox4.Clear();
            var timer = new Stopwatch(); //для контроля быстродействия определенных мест
            timer.Start();

            List<int> listOfComb = new List<int>();//Объявляем объек класса с пустым значением

            timer.Stop();
            textBox4.AppendText("Этап сумма 1: " + timer.Elapsed.ToString(@"m\:ss\.fff") + Environment.NewLine);
            timer.Restart();

            int textLength = textBox2.Lines.Length;
            List<string> tempInputList = new List<string>(textLength);
            tempInputList.AddRange(textBox2.Lines);

            for (int K = 0; K < textLength; K++)
            {
                char[] ch = tempInputList[K].ToCharArray(); //Преобразуем строку в массив

             //   listOfComb.Add(ch.Sum(x => x - 48)); это сокращает последующее преобразование, но не проверяет на число и все равно на доли секунды оказалось медленней, потому просто в качестве учебных целей оставлю

                int[] intArray = new int[ch.Length];//Вычисляем длинну массива

                for (int i = 0; i < ch.Length; i++)//Проходим в строке по элементам
                {
                    intArray[i] = int.Parse(ch[i].ToString());
                }

                listOfComb.Add(intArray.Sum());//Вычисляем сумму каждой строки
                
            }

            timer.Stop();
            textBox4.AppendText("Этап сумма 2: " + timer.Elapsed.ToString(@"m\:ss\.fff") + Environment.NewLine);
            timer.Restart();

            textBox3.Text += string.Join("\r\n", listOfComb.ConvertAll(x => x.ToString("D2")));

            timer.Stop();
            textBox4.AppendText("Этап сумма 3: " + timer.Elapsed.ToString(@"m\:ss\.fff") + Environment.NewLine);

        }

Аватара пользователя
иван
Гуру
Гуру
Сообщения: 1311
Зарегистрирован: Пн янв 26, 2009 3:35 pm
Откуда: Краноярск
Благодарил (а): 95 раз
Поблагодарили: 143 раза

Re: C#, Python и др. языки для числовых лотерей.

Сообщение иван » Вс мар 22, 2020 6:35 pm

Igor-san писал(а):
Вс мар 22, 2020 5:35 pm

1) Ну во первых есть numericUpDown для ввода одного числа - вместо textBox1
2) Для рабочей версии нужно в Release компилировать, значительно быстрее чем в Debug, который только для отладки
3) Немного переделать код что я тебе давал и все будет быстро.
Переделал первых два пункта и уже код работает не много быстрее
При подсчете 30000 комбинаций на 14 секунд быстрее
2020-03-22_21-32-59.png
2020-03-22_21-32-59.png (51.75 КБ) 221 просмотр
Пункт 3) вставил код под спойлером
Результат работы программы
2020-03-22_21-39-20.png
2020-03-22_21-39-20.png (32.22 КБ) 219 просмотров
Так и не могу разобраться где учат таким примерам как этот
Все что я учил таких примеров ни где не было ни на сайтах ни в книгах ни в ютубе.
Видимо нужно до такого доходить самому?
Igor-san а методы (преобразования текстбокса в массив чисел) что ты мне довал ты их сам написал или были какие то примеры?

Аватара пользователя
Igor-san
Site Admin
Site Admin
Сообщения: 11519
Зарегистрирован: Чт май 08, 2003 4:00 am
Откуда: Moscow
Благодарил (а): 19 раз
Поблагодарили: 280 раз
Контактная информация:

Re: C#, Python и др. языки для числовых лотерей.

Сообщение Igor-san » Вс мар 22, 2020 7:22 pm

иван писал(а):
Вс мар 22, 2020 6:35 pm
Так и не могу разобраться где учат таким примерам как этот
Все что я учил таких примеров ни где не было ни на сайтах ни в книгах ни в ютубе.
Видимо нужно до такого доходить самому?
Igor-san а методы (преобразования текстбокса в массив чисел) что ты мне довал ты их сам написал или были какие то примеры?
Гугл и опыт (храни все свои проекты чтобы потом вспоминать). Когда интернета не было или в самом его начале - было сложно и долго. Сейчас на 90% все есть в сети.

Аватара пользователя
Igor-san
Site Admin
Site Admin
Сообщения: 11519
Зарегистрирован: Чт май 08, 2003 4:00 am
Откуда: Moscow
Благодарил (а): 19 раз
Поблагодарили: 280 раз
Контактная информация:

Re: C#, Python и др. языки для числовых лотерей.

Сообщение Igor-san » Вс мар 22, 2020 9:48 pm

Решил сравнить скорость SumNumbers с Паскалем. Оказалось на нем быстрее обрабатывается эта задача
sumnum.png
sumnum.png (23.79 КБ) 198 просмотров

Код: Выделить всё

unit unitMain;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Spin;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    MemoInput: TMemo;
    MemoSum: TMemo;
    MemoWatch: TMemo;
    MemoLog: TMemo;
    SpinEdit1: TSpinEdit;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private

  public

  end;

var
  Form1: TForm1;

implementation
   uses mystopwatch;
{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  amount,i:integer;
  listOfComb:TStrings;
  sw:TStopWatch;
begin
   MemoInput.Clear;
   sw:= TStopwatch.StartNew;
   sw.Start;
   amount:=SpinEdit1.Value;
   try
   listOfComb := TStringList.Create;

     for i:=1 to amount do begin
      listOfComb.Add(format('%.6d',[i]));
     end;

     MemoInput.Text:=listOfComb.Text;
     sw.Stop;
     MemoLog.Lines.Add('Генерация номеров в поле: '+ sw.ToString);
   finally
     listOfComb.Free;
   end;



end;

procedure TForm1.Button2Click(Sender: TObject);
var
  count,i,j,sum,common:integer;
  listOfComb,tempList:TStrings;
  sw:TStopWatch;
  ch:Char;
begin
   MemoSum.Clear;
   MemoWatch.Clear;
   sw:= TStopwatch.StartNew;
   sw.Start;
   common:=0;
   try
   listOfComb := TStringList.Create;
   tempList:= TStringList.Create;
   count:=MemoInput.Lines.Count;

   tempList.Text:=MemoInput.Text;

   for i:=0 to pred(count) do begin

      sum:=0;
      for j:=1 to length(tempList[i]) do begin
       sum:=sum+ord(tempList[i][j])-48;
      end;
      common:=common+sum;
      listOfComb.Add(IntToStr(sum));
     end;

     MemoSum.Text:=listOfComb.Text;

     sw.Stop;

     MemoWatch.Lines.Add('Затрачено: '+ sw.ToString);
     MemoWatch.Lines.Add('Общая сумма:: '+ IntToStr(common));
   finally
     listOfComb.Free;
     tempList.Free;
   end;

   sw.Stop;
   MemoLog.Lines.Add('Подсчет сумм: '+ sw.ToString);
end;

end.


Аватара пользователя
иван
Гуру
Гуру
Сообщения: 1311
Зарегистрирован: Пн янв 26, 2009 3:35 pm
Откуда: Краноярск
Благодарил (а): 95 раз
Поблагодарили: 143 раза

Re: C#, Python и др. языки для числовых лотерей.

Сообщение иван » Пн мар 23, 2020 4:40 pm

Я почему то думал что язык C# самый быстрый из всех языков.
Вот для какой задачи я считал вчерашние суммы
Сделал предварительную версию программы для анализа суммы чисел выпавших комбинаций
Программа считает сумму выпавшей комбинации и сумму этой суммы
т.е. 1 2 3 4 5 сумма 1+2+3+4+5 = 15 далее сумма суммы 15 1+5=6
итог
1 2 3 4 5 - 015 - 06
А так же и считает полную систему 5 из 36
2020-03-23_19-30-07.png
2020-03-23_19-30-07.png (82.69 КБ) 174 просмотра
Если кому то интересен сам проект могу выложить.
Но там все так запутанно что сразу не разберешься нужно все по методам разложить.

Аватара пользователя
Igor-san
Site Admin
Site Admin
Сообщения: 11519
Зарегистрирован: Чт май 08, 2003 4:00 am
Откуда: Moscow
Благодарил (а): 19 раз
Поблагодарили: 280 раз
Контактная информация:

Re: C#, Python и др. языки для числовых лотерей.

Сообщение Igor-san » Пн мар 23, 2020 5:26 pm

иван писал(а):
Пн мар 23, 2020 4:40 pm
Я почему то думал что язык C# самый быстрый из всех языков.
Самый быстрый - ассемблер. А шарп на мой вкус самый удобный. Но так как он не компилируется в машинный код а выполняется виртуальной машиной .NET то в скорости он зачастую (но не всегда) уступает и С++ , Паскалю/Дельфи .. . Но всякие фичи в виде лямбд, расширений да и вообще распространенность - для нашего брата самое то. Не думаю что нам важны пара секунд на импорте миллиона строк. :-):

Аватара пользователя
иван
Гуру
Гуру
Сообщения: 1311
Зарегистрирован: Пн янв 26, 2009 3:35 pm
Откуда: Краноярск
Благодарил (а): 95 раз
Поблагодарили: 143 раза

Re: C#, Python и др. языки для числовых лотерей.

Сообщение иван » Пт апр 03, 2020 4:42 pm

Написал программу для подсчета чисел
2020-04-03_19-31-58.png
2020-04-03_19-31-58.png (24.11 КБ) 65 просмотров
Все вроде хорошо считает правильно и быстро но нужна универсальность
Чтобы можно было считать любые числа а не только от 1 до 16.
Как можно исправить код для универсальности

Код: Выделить всё

private void button2_Click_Count(object sender, EventArgs e)
        {
            textBox2.Clear();

            TextInArray textIn = new TextInArray();
            int[,] arr3 = textIn.GetArrayFromTextBox(textBox1);

            if (arr3 != null && arr3.Length > 0)
            {
                int coin1 = 0; //Переменная для подсчета чисел
                int coin2 = 0;
                int coin3 = 0;
                int coin4 = 0;
                int coin5 = 0;
                int coin6 = 0;
                int coin7 = 0;
                int coin8 = 0;
                int coin9 = 0;
                int coin10 = 0;
                int coin11 = 0;
                int coin12 = 0;
                int coin13 = 0;
                int coin14 = 0;
                int coin15 = 0;
                int coin16 = 0;

                for (int i = 0; i < arr3.GetLength(0); i++)
                {
                   
                    for (int j = 0; j < arr3.GetLength(1); j++)
                    {
                        if (arr3[i, j] == 1)
                        {
                            coin1++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 2)
                        {
                            coin2++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 3)
                        {
                            coin3++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 4)
                        {
                            coin4++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 5)
                        {
                            coin5++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 6)
                        {
                            coin6++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 7)
                        {
                            coin7++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 8)
                        {
                            coin8++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 9)
                        {
                            coin9++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 10)
                        {
                            coin10++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 11)
                        {
                            coin11++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 12)
                        {
                            coin12++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 13)
                        {
                            coin13++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 14)
                        {
                            coin14++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 15)
                        {
                            coin15++; //увеличиваем счетчик
                        }
                        if (arr3[i, j] == 16)
                        {
                            coin16++; //увеличиваем счетчик
                        }
                    }                  
                }
                textBox2.Text += "Чисел с 1 = " + coin1.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 2 = " + coin2.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 3 = " + coin3.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 4 = " + coin4.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 5 = " + coin5.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 6 = " + coin6.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 7 = " + coin7.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 8 = " + coin8.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 9 = " + coin9.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 10 = " + coin10.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 11 = " + coin11.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 12 = " + coin12.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 13 = " + coin13.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 14 = " + coin14.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 15 = " + coin15.ToString() + Environment.NewLine;
                textBox2.Text += "Чисел с 16 = " + coin16.ToString() + Environment.NewLine;               
            }
        }
Здесь весь проект
Sum of numbers 03.04.2020.rar
(51.55 КБ) 1 скачивание

Аватара пользователя
Igor-san
Site Admin
Site Admin
Сообщения: 11519
Зарегистрирован: Чт май 08, 2003 4:00 am
Откуда: Moscow
Благодарил (а): 19 раз
Поблагодарили: 280 раз
Контактная информация:

Re: C#, Python и др. языки для числовых лотерей.

Сообщение Igor-san » Пт апр 03, 2020 5:11 pm

иван писал(а):
Пт апр 03, 2020 4:42 pm
Написал программу для подсчета чисел
Все вроде хорошо считает правильно и быстро но нужна универсальность
Чтобы можно было считать любые числа а не только от 1 до 16.
Как можно исправить код для универсальности
1) Внутрь public string Generator(NumericUpDown numericUp, NumericUpDown upDown) лучше сразу числа передавать а не целый объект NumericUpDown. А вдруг ты в другом месте захочешь вызвать Generator и с другими параметрами?
2) То же и для GetListFromTextBox, туда лучше массив строк передавать, который есть и у textBox1 и сам можешь создать string[].
3) Помести coin1...coin16 (а минимум и максимум задавай в виде параметров) в массив int[] или list<int> (CoinArray например) - и работай с ними в цикле ()
вместо

Код: Выделить всё

if (arr3[i, j] == 1)
{
  coin1++; //увеличиваем счетчик
 }
будет еще один цикл по CoinArray

Аватара пользователя
иван
Гуру
Гуру
Сообщения: 1311
Зарегистрирован: Пн янв 26, 2009 3:35 pm
Откуда: Краноярск
Благодарил (а): 95 раз
Поблагодарили: 143 раза

Re: C#, Python и др. языки для числовых лотерей.

Сообщение иван » Пт апр 03, 2020 5:19 pm

Igor-san .Спасибо за совет сейчас буду пробовать пока вроде все понятно.

Аватара пользователя
иван
Гуру
Гуру
Сообщения: 1311
Зарегистрирован: Пн янв 26, 2009 3:35 pm
Откуда: Краноярск
Благодарил (а): 95 раз
Поблагодарили: 143 раза

Re: C#, Python и др. языки для числовых лотерей.

Сообщение иван » Пт апр 03, 2020 7:04 pm

Вроде понятно как сделать а не получаеться
Код

Код: Выделить всё

 TextInArray textIn = new TextInArray();
            int numMin = 0;//Минимальное число
            int numMax = 0;//Максимальное число
            int[,] arr3 = textIn.GetArrayFromTextBox(textBox1);

            if (arr3 != null && arr3.Length > 0)
            {
                for (int i = 0; i < arr3.GetLength(0); i++)
                {

                    for (int j = 0; j < arr3.GetLength(1); j++)
                    {
                       // Многомерный массив, в отличие от одномерного массива, 
                        //не позволяет нам напрямую обратиться к методу Min.Но, это можно легко исправить, 
                        //если воспользоваться методом Cast<T>, 
                        //с помощью которого можно преобразовать многомерный массив в обобщенную коллекцию 
                        //типа IEnumerable<T>. После чего нам станет доступен метод Min, 
                        //и мы сможем найти минимальное значение массива, например:
                        IEnumerable<int> colNumbs = arr3.Cast<int>();
                        numMin = colNumbs.Min();//Минимальное число
                        numMax = colNumbs.Max();//Максимальное число
                    }
                }
            }
            int[] CoinArray = new Int32[numMax];
            if (arr3 != null && arr3.Length > 0)
            {
               
                for (int k = numMin; k <= numMax; k++)
                {
                    for (int i = 0; i < arr3.GetLength(0); i++)
                    {

                        for (int j = 0; j < arr3.GetLength(1); j++)
                        {
                           
                            
                                if (arr3[i, j] == k)
                                {
                                    CoinArray[k]++;//Копим суммы чисел
                                }
                            
                        }
                    }
                }
               
            }

            //Вывод результата
            foreach (int item in CoinArray )
            {
                textBox2.Text += item.ToString() + "\r\n";
            }
Определил минимальное и максимальное число
Вставил в цикл for
Но повидимому не правильно Ошибка индекс находился вне диапазона
В дебаге проверял но понять не могу как исправить.

Аватара пользователя
Igor-san
Site Admin
Site Admin
Сообщения: 11519
Зарегистрирован: Чт май 08, 2003 4:00 am
Откуда: Moscow
Благодарил (а): 19 раз
Поблагодарили: 280 раз
Контактная информация:

Re: C#, Python и др. языки для числовых лотерей.

Сообщение Igor-san » Пт апр 03, 2020 7:28 pm

иван писал(а):
Пт апр 03, 2020 7:04 pm
Я не понял ход твоих мыслей. Вот как бы сделал я. Пока писал пришла мысль вообще сделать без начального задания максимальной суммы numericUpDownMaxCoin чтобы автоматом определяло что выводить - с помощью словаря, просто накапливаешь в ключе "Сумма" (1,2...Х) значение "Сколько было таких сумм".

Код: Выделить всё

 private void button2_Click_Count(object sender, EventArgs e)
        {
            textBox2.Clear();

            List<int> CoinArray = new List<int>();
            List<int> CoinSumArray = new List<int>();//для накопления сумм

            for (int i = 0; i < numericUpDownMaxCoin.Value; i++) // numericUpDownMaxCoin нумератор для ввожа до какой суммы будешь учитывать
            {
                CoinArray.Add(i + 1); //наполняем аналогами coin1...coin20
                CoinSumArray.Add(0);//наполняем нулями - типа инициализации начальных значений чтобы потом безопасно по индексу обращаться
            }

            TextInArray textIn = new TextInArray();
            int[,] arr3 = textIn.GetArrayFromTextBox(textBox1);

            if (arr3 != null && arr3.Length > 0)
            {
                for (int i = 0; i < arr3.GetLength(0); i++)
                {
                   
                    for (int j = 0; j < arr3.GetLength(1); j++)
                    {

                        for (int k = 0; k < CoinArray.Count; k++)
                        {
                            if (arr3[i, j] == CoinArray[k])
                            {
                                CoinSumArray[k]++; //увеличиваем счетчик
                            }
                        }

                    }                  
                }

                for (int k = 0; k < CoinSumArray.Count; k++)
                {
                    textBox2.Text += $"Чисел с {k+1} = " + CoinSumArray[k].ToString() + Environment.NewLine;
                }

            }
        }

Аватара пользователя
иван
Гуру
Гуру
Сообщения: 1311
Зарегистрирован: Пн янв 26, 2009 3:35 pm
Откуда: Краноярск
Благодарил (а): 95 раз
Поблагодарили: 143 раза

Re: C#, Python и др. языки для числовых лотерей.

Сообщение иван » Пт апр 03, 2020 8:45 pm

Igor-san. Спасибо за помощь теперь код более компактный и универсальный
2020-04-03_23-40-33.png
2020-04-03_23-40-33.png (33.71 КБ) 33 просмотра

Аватара пользователя
иван
Гуру
Гуру
Сообщения: 1311
Зарегистрирован: Пн янв 26, 2009 3:35 pm
Откуда: Краноярск
Благодарил (а): 95 раз
Поблагодарили: 143 раза

Re: C#, Python и др. языки для числовых лотерей.

Сообщение иван » Пт апр 03, 2020 9:23 pm

Код который выше нужен для программы Статистика суммы комбинаций
2020-04-04_00-13-06.png
2020-04-04_00-13-06.png (72.72 КБ) 29 просмотров
Осталось добавить фильтр который будет удалять или оставлять комбинации
по условию сумма сумма комбинаций.
Но пока не представляю как это реализовать.
С фильтром уже будет полноценная программа которая будет выдавать комбинации на игру.

Ответить

Вернуться в «Программы для лотереи»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 8 гостей