Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 11
1

Сравнение массивов

03.04.2011, 12:46. Показов 6040. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дан двойной массив и обычный. Надо проверить сколько чисел из обычного массива совпадает с числами в каждой строке двоичного массива.
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
 class LotoAvto
    {
        static Random rnd = new Random();
       // static public int[,] mat;
        
        public static void Avto()
        
         {            
            int x;
            Console.SetCursorPosition(5, 2);
            Console.ResetColor();
            Console.Write("Enter number of row <1-14>:");
            x = int.Parse(Console.ReadLine());
            Console.WriteLine();
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("This is your number choose avtomaticly:");
            Console.WriteLine();
                      
            int[,] mat = new int[x, 6];
 
            for (int i = 0; i < mat.GetLength(0); i++)
            {
                for (int j = 0; j < mat.GetLength(1); j++)
                {
                    int value; 
                    bool a = true;
                    while (a)
                    {
                        a = false;
                        value = rnd.Next(1, 45);
                        for (int k = 0; k < mat.GetLength(0); k++)
                        {
                            for (int l = 0; l < mat.GetLength(1); l++)
                            {
                                if (value == mat[k, l])
                                    a = true; 
                            }
 
                        }
 
                        mat[i, j] = value;
 
                    }
 
                }
 
            }
 
 
 
            for (int i = 0; i < mat.GetLength(0); i++)
            {
                for (int j = 0; j < mat.GetLength(1); j++)
                {                    
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.Write("{0, 5}", mat[i, j]);
                }
 
                Console.WriteLine();
            }
 
            string str = "***** The winning numbers are: *****";
            Console.ForegroundColor = ConsoleColor.Blue;
            Console.WriteLine();
            Console.WriteLine(str.PadRight(5, '*'));
            Console.WriteLine();
            Result.WinNumbers();
            Console.WriteLine();
           
           // Result.CheakResult(mat, wnarr);// ВОТ ЗДЕСЬ ПРОБЛЕМА!!!!! 
 
 /* public static void CheakResult( int[,] mat,int[] wnarr)// вот здесь у меня проблема начинается.... 
         {
             int index;           
      
        for (int i = 0; i <= mat.GetLength(0); i++)
            {
                   index = 0;
                   for (int j = 0; j <= mat.GetLength(1); j++)
                 {
                for (int w = 0; w < wnarr.Length; w++)
                {                     
                    if (mat[i,j]==wnarr[w])
                    {
                        index++;
                    }
                }
      
                 }
            score[i] = index;
                           
 
            }*//- Это как я написала метод, только он не работает, в чем ошибка?!! 
                
            Console.ReadLine();
        }
       
    }
                     // и вот простой массив:
  class Result
    {
        static int[] wnarr;
        static int[]score;
        static Random rnd = new Random();
 
        public static void WinNumbers()
        {
            const int SIZE = 6;
            int[] wnarr = new int[SIZE];
            InitArr(wnarr);
            PrintArr(wnarr);
        }
 
        private static void PrintArr(int[] wnarr)
        {
            for (int i = 0; i < wnarr.Length; i++)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("{0, 5}", wnarr[i]);
 
            }
 
 
        }
 
        private static void InitArr(int[] wnarr)
        {
            for (int i = 0; i < wnarr.Length; i++)
            {
                wnarr[i] = rnd.Next(1, 45);
                for (int j = 0; j < i; j++)
                {
                    if (wnarr[i] == wnarr[j])
                    {
                        j = -1;
                        i--;
                        break;
                    }
                }
            }
        }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.04.2011, 12:46
Ответы с готовыми решениями:

Сравнение массивов
Добрый день Задание такое: Строка, содержащая произвольный русский текст, состоит не более чем из...

Сравнение массивов
Вот такая конструкция: int first = new int { 1, 1, 1, 1 }; int second = new int { 1, 1, 1, 1,...

Сравнение массивов
Я думаю вам понятно что делает код. Вот только как сюда впихнуть перегрузку? using System;...

Сравнение массивов
Есть массив finiteVector и рваный массив Vectors. Нужно узнать какой из Vectors больше похож на...

14
aj
9 / 9 / 0
Регистрация: 26.04.2010
Сообщений: 43
03.04.2011, 15:44 2
Чтобы проверить сколько значений двумерного массива == одномерного массиву я бы сделал так
C#
1
2
3
4
5
6
7
8
9
10
11
static void Main(string[] args)
        {
            int[,] mas1 = new int[6, 6]; //например
            int[] mas2 = new int[6];     
            int schetchik = 0;
 
            foreach (int temp in mas1)
                for (int i = 0; i < mas2.Length; i++)
                    if (temp == mas2[i])
                        schetchik++;
        }
Вы конечно сами решите какие значения должны иметь массивы и их размер.
0
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 11
03.04.2011, 22:27  [ТС] 3
Дело в том, что у меня есть уже массивы, и мне надо проверить именно их. Это контрольная по лотторее. К примеру двойной массив: это сколько строк(row) выбрал клиент и он заполняется автоматом случайн ыми цифрами от 1-45, по 6 в строке, а простой массив - это выигрышные номера(тоже 6). Теперь мне надо проверить сколько номеров совпало с выигрышными в каждой строке. Как я могу сделать new int[,]?
0
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
03.04.2011, 23:34 4
Цитата Сообщение от Hana Посмотреть сообщение
сколько номеров совпало с выигрышными в каждой строке
C#
1
2
3
var selected = new List<int[]> { new int[]{1,2,3}, new int[]{2,3,4 } }; //массив "выбранных строк"
var numbers = new int[] { 2,3 }; //Выйгрышные номера
for (int i=0; i<selected.Count; i++) Console.WriteLine("В строке №{0} найдено {1} номеров", i, row.Where(e=>numbers.Contains(e)).Count());
0
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 11
04.04.2011, 01:18  [ТС] 5
var selected = new List<int[]> { new int[]{1,2,3}, new int[]{2,3,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
  public  static void WinNumbers()
        {
           // const int SIZE = 6;
            int[]wnarr = new int[6];
            InitArr(wnarr);
            PrintArr(wnarr);
        }
 
        static void PrintArr(int[] wnarr)
        {
            for (int i = 0; i < wnarr.Length; i++)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Write("{0, 5}", wnarr[i]);
 
            }
 
 
        }
 
        static void InitArr(int[] wnarr)
        {
            for (int i = 0; i < wnarr.Length; i++)
            {
                wnarr[i] = rnd.Next(1, 45);
                for (int j = 0; j < i; j++)
                {
                    if (wnarr[i] == wnarr[j])
                    {
 
                        j = -1;
                        i--;
                        break;
                    }
                }
               
            }
0
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
04.04.2011, 08:10 6
Цитата Сообщение от Hana Посмотреть сообщение
Так у меня же двойной массив...
Замените в том коде в цикле for неопределенную row на что-то типа такого метода вычлинения i-ой строки:
C#
1
2
3
4
static int[] GetRow(int[,] array, int row_no)
{
return (from i in Enumerable.Range(0,array.GetLength(1) select array[row_no, i]).ToArray();
}
0
aj
9 / 9 / 0
Регистрация: 26.04.2010
Сообщений: 43
04.04.2011, 08:54 7
Посмотрите на этот код правда на методы не разделил и проверку на random не делает. Надеюсь вы сами доделаете
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Random rnd = new Random();
            int x;
            int[] viyg_ch = new int[6];
            bool flag = false;
 
            Console.Write("число строк в массиве: ");
            x = int.Parse(Console.ReadLine());
            int[,] chisla = new int[x, 6];
            for (int i = 0; i < x; i++)
                for (int j = 0; j < 6; j++)
                {
                    chisla[i, j] = rnd.Next(1, 45);
                }
 
            Console.WriteLine("Введите выигрышные числа: ");
            for (int i = 0; i < 6; i++)
            {
                viyg_ch[i] = int.Parse(Console.ReadLine());
            }
            for (int i = 0; i < x; i++)
                for (int j = 0; j < 6; j++)
                {
                    for (int k = 0; k < 6; k++)
                        if (viyg_ch[k] == chisla[i, j])
                        {
                            Console.WriteLine("В {0} строке выиграли числа {1}", (i + 1), viyg_ch[k]);
                            flag = true;
                        }
                }
            if (!flag)
                Console.WriteLine("Выигрышных номеров не совпало");
        }
    }
}
Добавлено через 11 минут
Цитата Сообщение от Hana Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
for (int i = 0; i < wnarr.Length; i++)
{
    wnarr[i] = rnd.Next(1, 45); 
    for (int j = 0; j < i; j++)
    {
         if (wnarr[i] == wnarr[j])  
          j = -1; i--; break;
    }
}
Этот ваш код мне вообще не понравился, я бы сказал пугает
0
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
04.04.2011, 09:09 8
Цитата Сообщение от aj Посмотреть сообщение
int[,] chisla = new int[x, 6]; for (int i = 0; i < x; i++)
Лучше константу вынесете:
C#
1
2
3
4
5
6
7
private const int size = 6;
...
int[,] chisla = new int[x, size]; 
..
//for (int j = 0; j < size; j++)
или же:
for (int j = 0; j < chisla.GetLength(1); j++)
0
aj
9 / 9 / 0
Регистрация: 26.04.2010
Сообщений: 43
04.04.2011, 12:47 9
Цитата Сообщение от SandWraith Посмотреть сообщение
Лучше константу вынесете:
Ну это кому как, я просто показал путь.
0
24 / 23 / 5
Регистрация: 14.04.2010
Сообщений: 41
04.04.2011, 20:41 10
C#
1
2
3
var selected = new List<int[]> { new int[] { 1, 2, 3 }, new int[] { 2, 3, 4 } }; //массив "выбранных строк"
var numbers = new int[] { 1, 3 }; //Выйгрышные номера
var result = selected.Select(row => row.Count(e => numbers.Contains(e))).ToList();
Имеются строки:
1 2 3
2 3 4

В первой строке у массив (1,3) совпадают 2 числа, во второй - 1.
Соответственно result содержит массив (2,1), то есть количество совпадений для каждой строки двумерного массива

Если надо посчитать общее число совпадений, то

C#
1
int count = result.Sum();
З.Ы. заюзал пример SandWraith, надеюсь он не против)
0
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 11
05.04.2011, 13:50  [ТС] 11
Народ, спасибо, пошла терзать проект...используя ваши советы. Дело еще в том, что выигрышные номера я не могу ввести : это случайные числа. Скоро буду с новыми проблемами...

Добавлено через 1 час 53 минуты
C#
1
2
3
4
5
6
7
8
9
10
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
        Console.WriteLine("Введите выигрышные числа: ");
            for (int i = 0; i < 6; i++)
            {
                viyg_ch[i] = int.Parse(Console.ReadLine());
            }
Я не могу ввести выигрышные числа вручную. В то то и дело, что это отдельная функция со случайными числами. Но она мне возращает 0!! вместо значения. Поэтому я и не могу сравнить массивы....
0
189 / 189 / 38
Регистрация: 11.04.2009
Сообщений: 497
05.04.2011, 14:03 12
Цитата Сообщение от Hana Посмотреть сообщение
Но она мне возращает 0
Вернет массив длиной count из случайных элементов в диапазоне 0..max

C#
1
2
3
4
5
int[] GetRandomArray(int count, int max)
{
var rnd = new Random();
return Enumerable.Range(0,count).Select(i=>rnd.Next(max)).ToArray();
}
0
начал понимать msdn
57 / 57 / 6
Регистрация: 11.03.2010
Сообщений: 232
05.04.2011, 23:00 13
Держи файлик, правда он сделан в виндовс форм, но все же.
И еще код наверно немного "туповат" но работает, проверял.

Если нужно будет лотерейный билет сделать рандомно, напишешь, сделаю.
Вложения
Тип файла: rar WindowsFormsApplication4.rar (43.1 Кб, 10 просмотров)
0
0 / 0 / 0
Регистрация: 08.03.2011
Сообщений: 11
07.04.2011, 23:10  [ТС] 14
Народ! Всем спасибо, добила я все таки свой проект. Как всегда оказалось когда сделаешь - так просто.. Можете глянуть мой проект по лотторее и "сравнение массивов".
Вложения
Тип файла: zip Lotto.zip (80.0 Кб, 35 просмотров)
0
6048 / 3457 / 335
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
08.04.2011, 18:49 15
Цитата Сообщение от Hana Посмотреть сообщение
Народ! Всем спасибо
 Комментарий модератора 
Если какой-либо пост на форуме показался вам полезным, нажмите кнопку "Спасибо" внизу самого поста.(Правила п.4.5)
0
08.04.2011, 18:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.04.2011, 18:49
Помогаю со студенческими работами здесь

сравнение трёх массивов
Исходные данные Входные данные состоят из трёх блоков по две строки. Первая строка каждого блока...

Сравнение массивов на идентичность
Есть такая задача: распознавание двух объектов. Короткий алгоритм такой: я ввожу данные 1-го...

Сравнение строковых массивов
Здравствуйте. У меня есть 2 массива и 2 текстовых файла (в одном лежат вопросы, в другом -...

Сравнение двух массивов.
Вопрос такой ,как сравнить 2 массива, и если они равны, то в тест боксе писать текст. Использовал...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru