Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
PS5124
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 16
1

Удаление элементов из массива

21.11.2016, 18:34. Просмотров 489. Ответов 7
Метки нет (Все метки)

Дан целочисленный массив размера N. Удалить из массива все одинаковые элементы, оставив их первые вхождения.



Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    int n,i,j,k;
Console.Write("n=");
n = Convert.ToInt32(Console.ReadLine());
 int [] a = new int[n];
Console.WriteLine("Исходный массив:");
for( i=0; i<n; i++) {
  Console.Write("Элемент",a[i]);
     a[i]= Convert.ToInt32(Console.ReadLine());}
Console.WriteLine();
                        do{j=i+1;
do {
    if (a[j] == a[i])
    {
        for (k = j; k < n - 1; k++) { a[k] = a[k + 1]; n = n - 1; }
    }
    else j = j + 1;
} while (j <= n);
   i = i + 1; 
                        }
while (i<=n);
Console.WriteLine("Массив без повторений");
for (i = 1; i < n; i++) { Console.Write("{0}", a[i]); }
Console.ReadKey();


Суть:
Ругается на фрагмент
C#
1
if (a[j] == a[i])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.11.2016, 18:34
Ответы с готовыми решениями:

Удаление элементов из массива
Как удалить отрицательные элементы между двумя положительными?

Удаление элементов из массива
Кто может помочь с алгоритмом удаления? Вот задание: удалить элементы, значение...

Удаление элементов массива
Всем доброго времени суток. Мне нужно удалить первые элементы массива до...

Удаление элементов из массива по значению
Добрый вечер. Дан одномерный массив. Необходимо удалить элементы из массива по...

Удаление четных элементов из массива
Помогите разобраться с проблемой. При помощи данного метода пытаюсь удалить из...

7
TuM0xA
200 / 200 / 137
Регистрация: 21.12.2015
Сообщений: 545
21.11.2016, 18:51 2
"индекс вышел за границы массива" и что не понятно?
i и j получают значение больше максимального индекса
вы не сбрасываете значение i после цикла for
0
Diamante
1307 / 1027 / 650
Регистрация: 14.08.2016
Сообщений: 3,557
Завершенные тесты: 1
21.11.2016, 20:36 3
PS5124, ругается, и правильно делает, у вас i внешняя переменная, и после цикла ввода массива вашего, значение ее n-1, далее вы j присваиваете значение i+1, и оно, ессно, получается равно n. А что у вас в массиве под индексом n?!
0
PS5124
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 16
22.11.2016, 05:39  [ТС] 4
Кол-во элементов в массиве
0
Diamante
1307 / 1027 / 650
Регистрация: 14.08.2016
Сообщений: 3,557
Завершенные тесты: 1
22.11.2016, 14:46 5
я про то, какое значение хранится в a[n]?
0
PS5124
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 16
24.11.2016, 17:03  [ТС] 6
Не могу понять,где нужно обнулить именно
0
Diamante
1307 / 1027 / 650
Регистрация: 14.08.2016
Сообщений: 3,557
Завершенные тесты: 1
24.11.2016, 17:05 7
между 9й и 10й строками
0
PS5124
0 / 0 / 0
Регистрация: 22.03.2016
Сообщений: 16
24.11.2016, 20:04  [ТС] 8
без методов новых работает, с ними не так
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
 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void enter(out int[] a,int n)
        {
          
            
            a = new int[n];
            int i;
            for (i = 0; i < n; i++)
            {
                Console.Write("Элемент ");
                a[i] = int.Parse(Console.ReadLine());
            }
 
            // здесь должен находиться код программы для ввода массива
        }
       
       public static void process(ref int[] a)
        {
            int  i, j, k, c;
           
            j = 1;
            for (i = 1; i < n; i++)// сравнение каждого отдельно взятого элемента по отдельности
            {
 
 
                for (c = 2; c <= n; c = c + i) Console.WriteLine("J {0}", j); { if (a[j] == a[i - 1]) { Console.WriteLine("Ravno}"); for (k = j; k < n - 1; k++) { a[k] = a[k + 1]; } n = n - 1; } else j = j + 1; }//формируем новый массив уменьшая последовательно кол-во повторяющихся элементов
 
                j = i + 1;
                Console.WriteLine("i {0}",i);
 
 
            }
 
            Console.WriteLine("Массив без повторений");
            for (i = 0; i < n; i++) { Console.Write("{0}", a[i]); }
            Console.ReadKey();
 
 
 
 
            // здесь должен находиться код программы обработки массива 
 
        }
        // подпрограмма для вывода массива на экран
        static void print(int[] a)
        {
            int i;
            int n = 3;
            Console.WriteLine("Массив без повторений");
            for (i = 0; i < n; i++) { Console.Write("{0}", a[i]); }
            Console.ReadKey();
 
 
 
            // здесь должен находиться код программы для вывода массива 
        }
      
         
 
        static void Main(string[] args)
        {
            //основная программа
            Console.Write("Кол-во элементов n= ");
 
            int n = Convert.ToInt32(Console.ReadLine());
            int[] a;
            enter(out a,n);
            process(ref a);
            //print(a);
           
            Console.ReadKey();
 
        }
    }
}
Рабочая,но без методов.
В чем ошибка в верхнем коде?
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
 
 
            int n, i, j, k, c;
            Console.Write("Кол-во элементов n= ");
            n = Convert.ToInt32(Console.ReadLine());
            int[] a = new int[n];
           
            Console.WriteLine("Исходный массив:");
            for (i = 0; i < n; i++)
            {
                Console.Write("Элемент ", a[i]);
                a[i] = Convert.ToInt32(Console.ReadLine());
            }
            j = 1;
           
            for (i = 1; i < n; i++)// сравнение каждого отдельно взятого элемента по отдельности
            {
 
 
                for (c = 2; c <= n; c = c + i)/*пробегаем по каждому элементу*/ {  if (a[j] == a[i - 1]) {  for (k = j; k < n - 1; k++) { a[k] = a[k + 1]; } n = n - 1; } else j = j + 1; }//формируем новый массив уменьшая последовательно кол-во повторяющихся элементов
                
                j = i+1;
               
 
               
            }
 
 
          
 
 
 
            Console.WriteLine("Массив без повторений");
             for (i = 0; i < n; i++)   { Console.Write("{0}", a[i]); }
            Console.ReadKey();
 
 
 
        }
    }
}
0
24.11.2016, 20:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2016, 20:04

Удаление, редактирование элементов массива
Если я добавляю таким образом работников в конец массива, то как их можно будет...

Удаление элементов из ступенчатого массива
Здравствуйте, уважаемые. Все голову уже сломал, но никак не могу додуматься,...

Удаление нулевых элементов из массива
У меня есть код, пользователь вводит двоичные числа в переменные x и y,...


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

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

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