Форум программистов, компьютерный форум, киберфорум
Наши страницы
LINQ
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
letronas
34 / 34 / 29
Регистрация: 12.10.2014
Сообщений: 350
#1

Работа с массивом с помощью LINQ

10.09.2015, 11:46. Просмотров 687. Ответов 7
Метки нет (Все метки)

Начал писать свою проблему и решил её.Вообще рад,что попал сюда на форум.Здесь люди мотивируют)
Хотел бы показать свои задания и итог,к которому я пришёл,чтобы реализовать их.
Если есть какие-то замечания или возможности сделать код проще,то хотелось бы услышать.
Так же немного не смог понять,часть второго задания.Когда вставка невозможна?Только если положительного элемента нет,наверное...
Да и вообще,мне кажется,что я написал код именно под данный массив.То есть,если массив поменяется,то будет некорректно отображаться итог.
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int[] mas = { 0, 3, 4, 5, 6, 7, 8 };
 
        private void button1_Click(object sender, EventArgs e)
        {
            var min = mas.Min(a => a);
            var s = 0.0;
            var g = 0;
            s = mas.TakeWhile(a => a != min).Sum() * 1.0;
            g = mas.Reverse().TakeWhile(a => a != mas.Min()).Aggregate((x, y) => x * y);
            var otnosh = s / g;
            if (s == 0)
            {
                MessageBox.Show("До минимального элемента суммы нет(отсутствуют элементы).Отношение равно нулю");
                label1.Text = otnosh.ToString();
            }
            else if (g == 0)
            {
                MessageBox.Show("После минимального элемента произведения нет(отсутствуют элементы)");
            }
            else
            {
                label1.Text = otnosh.ToString(); 
                MessageBox.Show("Все параметры введены.Результат готов.");
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            int b = int.Parse(textBox1.Text);
            int c = int.Parse(textBox2.Text);
            var perv = mas.First(a => a > 1);
            var ostaln = mas.Reverse().TakeWhile(a => a != 0);
            var ss = mas.Take(1).Concat(new int[1] { b }).Concat(new int[1] { c }).Concat(mas.Skip(1)) ;
            foreach (int i in ss)
            {
                label2.Text += i + ",";
            }
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            int itog = 0;
            for (int i = 0; i < mas.Length;i++ )
            {
                if (mas[i] == 0)
                {
                    itog++;
                }
            }
            if (itog == 0)
            {
                MessageBox.Show("Нулевых элементов нет");
            }
            else
            { 
                MessageBox.Show("Нулевые элементы есть.Количество"+" "+itog);
            }
 
        }
    }
}
задания:
1)Определить отношение суммы элементов массива, расположенных до первого из минимальных элементов в массиве, к произведению элементов, расположенных после минимального. Если по какой-либо причине вычислить отношение не удается, выдать об этом сообщение с указанием причины.
2)Вставить после первого положительного элемента в массиве два элемента, равных заданному значению. Если вставка элементов невозможна, выдать об этом сообщение.
3)Проверить, есть ли в массиве нулевые элементы.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.09.2015, 11:46
Ответы с готовыми решениями:

Поиск узла по атрибуту с помощью LINQ to XML
Как найти узел по атрибуту и удалить? Как найти узел по атрибуту и изменить...

Возможно ли взять данные с базы MS SQL с помощью LINQ
Всем привет! Никогда не имел дело с LINQ. прочитав небольшие документации не...

Можно ли подключится с помощью Linq к базе данных Access
Доброго времени суток! Можно ли обратится(подключится) с помощью Linq к базе...

Найти максимальное число в двумерном массиве с помощью Linq-запроса
Задача: Найти максимальное число в двумерном массиве с помощью Linqзапроса.

Возможно ли с помощью LINQ вычислить среднее значение элементов коллекции
Здравствуйте! Возможно ли с помощью LINQ вычислить среднее значение элементов...

7
Woldemar89
TheGreatCornholio
1164 / 652 / 271
Регистрация: 30.07.2015
Сообщений: 2,259
Завершенные тесты: 1
10.09.2015, 12:08 #2
Цитата Сообщение от letronas Посмотреть сообщение
расположенных до первого из минимальных элементов в массиве
Что это значит?
Приведи пример.
23 -7 9 -7 34 34. Минимальные равные -7? И первый минимальный идет после 23? Так?

Цитата Сообщение от letronas Посмотреть сообщение
расположенных после минимального
После первого минимального, или последнего?
0
letronas
34 / 34 / 29
Регистрация: 12.10.2014
Сообщений: 350
10.09.2015, 12:12  [ТС] #3
До первого из минимальных
массив { -1,5,6,1,0,-4,5,6}
лол.Даже изменять текст не буду,потому что понял,на что ты заострил внимание.Задание не корректно.
Определить отношение суммы элементов массива, расположенных до минимальнОГО элементА в массиве, к произведению элементов, расположенных после минимального. Если по какой-либо причине вычислить отношение не удается, выдать об этом сообщение с указанием причины.

Добавлено через 45 секунд
Действительно,методички составляет безграмотный человек.
0
Woldemar89
TheGreatCornholio
1164 / 652 / 271
Регистрация: 30.07.2015
Сообщений: 2,259
Завершенные тесты: 1
10.09.2015, 12:17 #4
Цитата Сообщение от letronas Посмотреть сообщение
Вставить после первого положительного элемента в массиве два элемента, равных заданному значению.
Заданному значению это значению первого положительного?
0
letronas
34 / 34 / 29
Регистрация: 12.10.2014
Сообщений: 350
10.09.2015, 12:19  [ТС] #5
имеется ввиду,что после первого положительного элемента мы должны вставить два элемента,которые мы вводим в текст бокс на форме.Потом должна идти остальная часть массива,как вы поняли)
0
Woldemar89
TheGreatCornholio
1164 / 652 / 271
Регистрация: 30.07.2015
Сообщений: 2,259
Завершенные тесты: 1
10.09.2015, 14:26 #6
Лучший ответ Сообщение было отмечено letronas как решение

Решение

2 и 3 можно так. Массив вводится в текстбокс 1 в виде "32 23 -4 55".
В текстбокс 2 - значение которое нужно вставить.
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
private void button2_Click(object sender, EventArgs e)
        {
 
            try
            {
                List<int> mas = textBox1.Text.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(x => Convert.ToInt32(x)).ToList();
 
                mas.InsertRange(mas.IndexOf(mas.Where(x => x > 0).First()) + 1, new int[] { Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox2.Text) });
                
                label1.Text ="Массив после вставки значений: " + string.Join(" ", mas.Select(x => x.ToString()));
 
            }
            catch { MessageBox.Show("Положительные элементы отсутствуют || невозможно распознать строку в массив || заданное значение не является int."); }
        
        
        
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
 
                label1.Text = "Количество нулевых элементов в массиве: " + textBox1.Text.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(x => Convert.ToInt32(x)).Where(y => y == 0).Count().ToString();
                
            }
            catch { MessageBox.Show("Невозможно распознать строку в массив!"); }
        }
1
letronas
34 / 34 / 29
Регистрация: 12.10.2014
Сообщений: 350
11.09.2015, 21:58  [ТС] #7
Немного не понимаю ваше решение,касаемо второго задания.Можете объяснить что к чему.В особенности InsertRange
0
Woldemar89
TheGreatCornholio
1164 / 652 / 271
Регистрация: 30.07.2015
Сообщений: 2,259
Завершенные тесты: 1
11.09.2015, 22:03 #8
Цитата Сообщение от letronas Посмотреть сообщение
Немного не понимаю ваше решение,касаемо второго задания.
Я использую List, чтобы удобно было работать с индексами.
Прочитай описание функции InsertRange, она принимает в качестве аргумента индекс, то есть
то место, с которого начнется вставка диапазона значений (именно поэтому она InsertRange),
Ну а
C#
1
new int[] { Convert.ToInt32(textBox2.Text), Convert.ToInt32(textBox2.Text) }
является созданием этого диапазона, заполненного значениями, которые нужны.
0
11.09.2015, 22:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.09.2015, 22:03

Как через TextBox добавить данные в базу данных с помощью LINQ to SQL?
Доброго времени суток! а можно с помощью Linq to Sql Добавлять данные в базу...

Как с помощью LinQ запроса, получить множество значений из a, где нет указанной совокупности
Допустим у меня есть 2 множества: а:id,parentid,name b:id,parentid,name ...

LINQ to XML: работа с конкретным элементом
Всем доброго времени суток! Прошу помощи. Весь интернет перерыл, а ответа на...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru