Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
edikesh
1 / 1 / 1
Регистрация: 26.10.2011
Сообщений: 99
1

Небезопасный код с использованием указателей (операции с массивами)

17.02.2012, 15:50. Просмотров 1187. Ответов 3
Метки нет (Все метки)

Задан стековый массив А(N). Получить из него массив В(M), содержащий элементы массива А, кратные двум.

Помогите переделать код в небезопасный с использованием указателей.

вот код

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Введите размер матрицы n: ");
            int n = Convert.ToInt32(Console.ReadLine());
            int[] A = new int[n];
            Random rand = new Random();
            for (int i = 0; i < n; i++)
            {
                A[i]=rand.Next(0,10);
                Console.Write(A[i]);
            }
            Console.WriteLine();
            int[] B = new int[1];
            int k = 0;
            for (int i = 1; i < n; i++)
            {
                
                    if (A[i] % 2 == 0)
                    {
                        B[k] =A[i];
                        k++;
                        Array.Resize(ref B, k + 1);
                    }
                    
            }
            for (int i = 0; i < k; i++)
                Console.Write(B[i] + "  ");
 
            
                
            
 
        }
    }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2012, 15:50
Ответы с готовыми решениями:

Небезопасный код
Всем привет, интересует такой вопрос. Мне нужно создать public partial class MyForm : Form {...

Небезопасный код в C#
Всем здравствуйте. Собственно есть задание: Задан стековый массив А(N, N). Поменять местами...

небезопасный код (unsafe)
Столкнулся с проблемой: Visual Studio 2010 ругается на unsafe, а именно: &quot;ошибка CS0227:...

Безопасный и небезопасный код.
Есть некий класс unsafe class MyClass { //... public void SetKey(byte...

SharpDevelop и небезопасный код
Привет всем. Подскажите пожалуйста как разрешить небезопасный код в SharpDevelop Поиск по форуму...

3
NickoTin
Почетный модератор
Эксперт .NET
8646 / 3598 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
17.02.2012, 16:12 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
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
using System;
 
namespace ConsoleApplication30
{
    class Program
    {
        unsafe static void Main ( string[] args )
        {
            int    srcArrSize,
                   endArrSize;
            int    mod2         = 0;
            Random rand         = new Random();
 
            Console.Write( "Введите размер матрицы n: " );
 
            srcArrSize = Convert.ToInt32( Console.ReadLine() );
            int* srcArr = stackalloc int[srcArrSize];
 
            Console.Write( "Исходный массив:\t" );
            for ( int i = 0; i < srcArrSize; ++i )
            {
                srcArr[i] = rand.Next( 0, 10 );
 
                if ( srcArr[i] % 2 == 0 )
                    ++mod2;
 
                Console.Write( srcArr[i] + " " );
            }
 
            Console.WriteLine();
 
            if ( mod2 == 0 )
            {
                Console.WriteLine( "Нет элементов кратных 2." );
                Console.ReadKey();
                return;
            }
 
            endArrSize = mod2;
            mod2 = 0;
            int* endArr = stackalloc int[endArrSize];
 
            while ( mod2 != endArrSize )
            {
                if ( *srcArr % 2 == 0 )
                    endArr[mod2++] = *srcArr;
 
                srcArr++;
            }
 
            Console.Write( "Элементы кратные 2:\t" );
            for ( int i = 0; i < endArrSize; ++i )
                Console.Write( endArr[i] + " " );
 
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
Или через Marshal.
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
using System;
using System.Runtime.InteropServices;
 
namespace ConsoleApplication30
{
    class Program
    {
        unsafe static void Main ( string[] args )
        {
            int    srcArrSize,
                   endArrSize;
            int    mod2         = 0;
            Random rand         = new Random();
 
            Console.Write( "Введите размер матрицы n: " );
 
            srcArrSize = Convert.ToInt32( Console.ReadLine() );
            int* srcArr = (int*)Marshal.AllocHGlobal( srcArrSize * sizeof( int ) );
 
            Console.Write( "Исходный массив:\t" );
            for ( int i = 0; i < srcArrSize; ++i )
            {
                srcArr[i] = rand.Next( 0, 10 );
 
                if ( srcArr[i] % 2 == 0 )
                    ++mod2;
 
                Console.Write( srcArr[i] + " " );
            }
 
            Console.WriteLine();
 
            if ( mod2 == 0 )
            {
                Marshal.FreeHGlobal( (IntPtr)srcArr );
                Console.WriteLine( "Нет элементов кратных 2." );
                Console.ReadKey();
                return;
            }
 
            endArrSize = mod2;
            mod2 = 0;
            int* endArr = (int*)Marshal.AllocHGlobal( endArrSize * sizeof( int ) );
            int* temp = srcArr;
 
            while ( mod2 != endArrSize )
            {
                if ( *temp % 2 == 0 )
                    endArr[mod2++] = *temp;
 
                temp++;
            }
 
            Console.Write( "Элементы кратные 2:\t" );
            for ( int i = 0; i < endArrSize; ++i )
                Console.Write( endArr[i] + " " );
 
            Marshal.FreeHGlobal( (IntPtr)srcArr );
            Marshal.FreeHGlobal( (IntPtr)endArr );
 
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
0
FtarG
133 / 133 / 42
Регистрация: 02.11.2010
Сообщений: 316
17.02.2012, 16:14 3
Цитата Сообщение от edikesh Посмотреть сообщение
Console.Write("Введите размер матрицы n: ");
Одномерная матрица это массив. Вероятно лучше вывести "Введите размер массива n: ".

Цитата Сообщение от edikesh Посмотреть сообщение
for (int i = 1; i < n; i++)
Элементы в массиве нумеруются начиная с 0. Начиная с 1 вы пропускаете 1-ый элемент массива.

Цитата Сообщение от edikesh Посмотреть сообщение
Задан стековый массив
Если массив стековый, не лучше ли использовать для его реализации класс Stack?
0
edikesh
1 / 1 / 1
Регистрация: 26.10.2011
Сообщений: 99
17.02.2012, 17:11  [ТС] 4
спасибо большое. только получается вроде ноль исключить надо,он вроде не является кратным
0
17.02.2012, 17:11
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2012, 17:11

Небезопасный код: пример из книги не компилируется
Учу с# по книге Шилдта, в разделе про небезопасный код есть примеры работы с указателями, однако...

Небезопасный код, многоуровневая адресация - каково их назначение
Зачем она и с чем ее едят? Неужели бывают случаи когда нужно иметь адрес адреса? //с &quot;С&quot; знаком...

Небезопасный код. Битовое чтение файла и преобразование к определенному формату
Доброго времени суток. Решаю задачу битового чтения файла и преобразование к определенному...


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

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

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