ИЗМЕНИТЬ РАЗМЕР МАССИВА | увеличить массив C# | уменьшить массив | СИ ШАРП ДОМАШНИЕ ЗАДАНИЯ # 12
Vložit
- čas přidán 11. 09. 2024
- В этом уроке мы узнаем как работает метод Resize класса Array, а так же напишем собственную его реализацию. В ходе урока мы выясним как написать метод для изменения размера любого массива (увеличения, уменьшения). При выполнении домашнего задания мы повторим темы массивов, циклов и методов, а так же рассмотрим пример применения ключевого слова ref в языке программирования C#.
➡️ Мой курс C# ОТ НОВИЧКА К ПРОФЕССИОНАЛУ на Udemy
👉 www.udemy.com/...
✅ИСХОДНЫЙ КОД УРОКА bit.ly/3029jWQ
✅Если вам нравятся мои уроки, вы хотите поддержать меня и развитие канала, то можете сделать это тут!=)
✅Доступ к исходному коду и спонсорство / simplecode
✅ donatepay.ru/d...
✅BTC кошелек: 12oYfJnvt76wjJbpvfhM41m6KPz6uz4LD4
✅ Telegram канал t.me/SergeySim...
Уроки по программированию
✅Наша группа ВК smplcode
✅Подписывайтесь на канал / @simplecodeit
#сишарп #simplecode #урокипрограммирования
Cамый лучший способ сказать "спасибо" - поставить лайк и и поделиться уроком с друзьями. Это очень мотивирует создавать полезные уроки =)
✅Доступ к исходному коду и спонсорство www.patreon.com/SimpleCode
✅ donatepay.ru/don/SimpleCode
✅BTC кошелек: 12oYfJnvt76wjJbpvfhM41m6KPz6uz4LD4
пон
"потому что мы пытаемся впихнуть невпихуемое" :D
Круто когда материал по интересующей теме можно найти именно на твоем канале. Спасибо!
Спасибо за уроки! Жаль что эти нюансы в начале видео вы не описываете в описании к ДЗ, хочется сделать самому, но не до конца понятно, что именно имел ввиду автор.
Согласен, было не понятно, что делать со значениями в исходном массиве - удалять или сохранять.
Я сначала удалял значения, но когда услышал в начале видео как надо, все переделал, нпотом продолжил просмотр
@@user-xt8gt7ev5p также посмотрел начало и понял как именно надо было, а то изначально я указывал параметр сколько нужно добавить элементов
я даже код написал но он не подходит
{
internal class Program
{
static void Main(string[] args)
{
int IndexDel = 0;
string Info;
int[] myArray;
Console.WriteLine("Wratin pls Count for myArray: ");
int Count = int.Parse(Console.ReadLine());
myArray = new int[Count];
Console.WriteLine("Info");
Info = Console.ReadLine();
Console.WriteLine("IndexDeF");
IndexDel = int.Parse(Console.ReadLine());
switch (Info)
{
case "Add":
ForAddInArray(ref IndexDel, ref myArray);
break;
case "Deletel":
ForDeletelInArray(ref IndexDel, ref myArray);
break;
}
for (int i = 0; i < myArray.Length; i++)
{
Console.Write(myArray[i] + "\t");
}
}
static void ForAddInArray(ref int Add, ref int[] arr)
{
arr = new int[arr.Length + Add];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = int.Parse(Console.ReadLine());
}
}
static void ForDeletelInArray(ref int Del, ref int[] arr)
{
if (arr.Length - Del
Наверное в этом и кайф, пытаться сделать "невозможное"
Обожаю твои видеоуроки по c#
Уже два дня подряд взахлёб поглощаю твой божественный, царский контент.
Огромное тебе спасибо за твои видеоролики!!!!!
А я год подряд!
Привет, Сергей! Бесконечная тебе благодарность за твои труды!
пока этот канал не нашел вообще не мог структурировать обучение(там что то почитал тут то почитал, а в итоге нифига) наконец то начал понимать и вливаться в этот мир так сказать. код уже не выглядит белибердой, начинаю понемногу понимать что гуглить и в чем искать проблемы и их решения (хочется поскорее до ООП дойти )
сейчас учу С++. кайфую. я тащусь от уроков. сейчас на 48 уроке. раньше учил яву под депрессией, ничего не понимал, но тут нашел это чудо.
Я от джавы тащусь
@@vip51000 добью с++ потом перейду вспоминать джаву.
@@mannas273 , ну как, вспомнил?)))
@@bombilovka16gd17 нет
@@mannas273 как успехи у тебя сейчас,остался в програмировании,либо перешёл на что-то другое ?
Супер. В каждом уроке что- то интересное
Как же приятно, что домашние задания получаются. Сидишь, перепроверяешь себя, радуешься :)
Как успехи за 3 месяца?
@@ptichkasinichkamia к сожалению, у меня обучение программированию отошло на второй план на данный момент. Но весь базовый курс, который дан на данном канале, успешно освоен. Также были частично освоены другие технологии, с помощью которых реализовывал некоторые проекты для себя. Ничего серьёзного не делал, ибо не было нужды/цели, но в очень многих областях знаний покопался. Разве только в геймдев не залезал, хотя интерес есть. От себя скажу, что считаю канал Сергея - это лучшее, что может попасться начинающему программисту, просто чтобы получить хороший (позитивный) пинок. Очень жаль, что курс по C# в итоге так и не закончен :(
@@silent_woolf. А я как раз для геймдева и учу) Да, согласен, жаль что курс не закончен. Что можете посоветовать после прохождения данного курса?
@@ptichkasinichkamia программист чаще всего - это самообучающаяся единица, которая выгрызает информацию из всех щелей, откуда может :)))) Так что после освоения синтаксиса и базиса языка, (что и даёт данный курс) самое лучшее - это начать делать что-либо, а в процессе уже гуглить то, что интересует. :) Вот например из самого простого: я писал ребёнку программу для повторения изученных английских. Интерфейс на WinForms, по своей сути программа изначально банальна донельзя - даётся слово на одном языке, а он должен ввести на другом и наоборот. Можно сделать всё крайне примитивно - рандомное слово из массива и его ответная пара (red - красный, например). Дальше будет, возможно, дикий треш для знающих людей, но Я ХУДОЖНИК - Я ТАК ВИЖУ, поэтому делал так, как придумал и как смог. Рефакторить можно и нужно, но это уже "другая история". Короче, в результате неких размышлений, под возможные будущие доработки и масштабирования (да-да, я люблю мыслить глобально) был выделен аж целый класс WORD всего с двумя полями - СЛОВО и ПЕРЕВОД. Сделал подпрограмму "добавитель слов в словарь", в которой реализовал счётчик слов, убрал некоторые "косяки" интерфейса, добавил возможность изменять/удалять слова, сохранять/загружать словарь, возможность добавлять слова без использования мыши и переключения языка (он переключается автоматически на тот, который должен быть в данном поле - либо русский, либо английский), вход в редактор словаря по паролю (не, ну ребёнок же хитрый, он там подсмотреть сможет иначе :D). В основной же программе банальные счётчики правильных/неправильных ответов, несколько режимов (простой слово-ответ, опрос на N слов без повторов), шанс "выпадения" слов (те, которые хуже отвечает, попадаются в итоге чаще), глобальную статистику, озвучку слова голосом и т.п. и т.д. Я всё это к чему? Каждая из этих вещей требовала некоторых размышлений, изысканий и т.п. Вот так из простой маленькой программки я почерпнул гору опыта. :) В геймдеве всё точно также - осваиваешь, например, базово Unity (если знаешь английский, это вообще шик! Могу порекомендовать пару каналов), а потом ставишь себе цель - запилить какую-то игрушку, пусть даже маленькую, бестолковенькую, но СВОЮ. А дальше уже фантазия не даст спокойно сидеть на попе ровно)))))
@@silent_woolf. Спасибо огромное за совет (кстати, можете пожалуйста порекомендовать эти пару каналов?)
Я пошел еще дальше и сделал рандомную генерацию как самого массива, так и его длины. А в методе у меня впринципе тоже самое:
static void Resize( ref int [] YArray, int F )
{
int[] Mass = new int[F];
for (int i = 0; i < YArray.Length && i
Я вот так сделал
static void GetArray() //Метод, отвечающий а заполнение массива
{
Random random = new Random();
int[] myArray = new int[11];
for (int i = 0; i < myArray?.Length; i++)
{
myArray[i] = random.Next(0, 10);
}
Resize(ref myArray, 6, false);
}
static void Main(string[] args)
{
GetArray();
}
static void Resize(ref int[] source, int resize, bool absolute)
{
int currentSize = source.Length;
int newSize = absolute ? currentSize + resize : resize;
if (newSize < 0)
throw new Exception("size of array is less 0");
int[] dest = new int[newSize];
int copySize = newSize > currentSize ? currentSize : newSize;
Array.Copy(source, dest, copySize);
source = dest;
}
@@user-jm9jq7yj4k настоящий абсолют)
Спасибо за урок, слежу за каждым видео, также как и мой друг, изучаем c#, у тебя очень хорошая подача, не видел у других на Ютубе, перешёл к тебе по рекламе блогера (давно) желаю успехов, жду новые уроки
Очень круто рассказываешь нюансы синтаксиса! «почему именно буква Т» прекрасно отложилось в памяти
Спасибо за урок
Спасибо, как всегда все круто, жду следующих уроков !
Безумно интересно смотреть ваши уроки и делать дз)
Спасибо огромное за ваш труд!!!
Я в программировании - null, но посмотрел все уроки с#, которые вышли и уже начал писать простецкие коды, более того нашел сайт с заданиями и стал выполнять для закрепления. Очень четко и понятно объясняешь. Почти всё с первого раза понимаю! Ты крут!!! Очень крут! Спасибо!
Не подскажешь название этого сайта?)
Давай название сайта))
@ChronicuM
И мне тоже))
За generic огромный лайк! А то видел иногда такие функции, пытался разобраться - непонятно было. А тут такое понятное объяснение! Вообще уроки очень хорошие! Хотелось бы, чтобы вы продолжали!
Спасибо, классный урок.
А я то думаю чего я после того как увеличил массив он стал весь заполнен нулями)) А оказывается как все хитро придумано. Благодарю за разъяснение, очень познавательно.
Ещё раз спасибо за подобный курс!)
До решения в видео я не догадался, хотя 2ю и 3ю часть только так и надо решать. Поэтому решил так, буду рад обратной связи:
static void Mass(ref uint Ml) //в методе меняется длина рандомного одномерного массива
{
Random random = new Random();
int[] mass = new int[Ml];
for (int i = 0; i < mass.Length; i++)
{
mass[i] = random.Next();
Console.Write(mass[i] + "\t"); //на печать массив и длину (ниже) выводил для себя/удобства
}
Console.WriteLine("
" + mass.Length);
Console.ReadLine();
}
Console.WriteLine("Сколько будет элементов в массиве: "); //задаётся новая длина для массива
uint Ma = uint.Parse(Console.ReadLine());
Mass(ref Ma);
Супер! Особенно фишка с дженерик
До просмотра так сделал:
static void Resize(ref int[] arr, int count)
{
int[] newArr = new int[count];
if (arr.Length < count)
{
for (int i = 0; i < arr.Length; i++)
{
newArr[i] = arr[i];
}
}
if (arr.Length > count)
{
for (int i = 0; i < count; i++)
{
newArr[i] = arr[i];
}
}
arr = newArr;
}
static void Main(string[] args)
{
int[] myArray = {1, 4, 6};
Resize(ref myArray, 10);
}
Как же приятно когда сделал ДЗ именно так, поняв тему.
блин из-за нагромождения терминологий я перестаю понимать что вообще происходит. не хватает бытовых примеров, смотрю и не понимаю где я могу это применить. кроме калькулятора и обменника валют, примеров не было и поэтому тяжело воспринимаю обучение. но автору огромный респект, человек явно шарющий и с талантом преподавателя.
Урок пока не смотрел.
принимаем пользовательский массив и число на которое хотим изменить
далее если оно больше 0 (то есть увеличиваем массив) предлагаем пользователю либо самому заполнить либо забить новые значения рандомом. Если меньше т опросто уменьшаем.
static void ArraySizeChange(ref int[] userArray, int amount)
{
Random random = new Random();
int[] newArray = new int[userArray.Length + amount];
if (amount >= 0)
{
for (int i = 0; i < userArray.Length; i++)
{
newArray[i] = userArray[i];
}
Console.WriteLine("
Fill it with random numbers?");
string choice = Console.ReadLine();
if (choice == "yes")
{
for (int i = userArray.Length; i < newArray.Length; i++)
{
newArray[i] = random.Next(100);
}
}
else
{
for (int i = userArray.Length; i < newArray.Length; i++)
{
Console.WriteLine("Enter value for index " + i);
newArray[i] = int.Parse(Console.ReadLine());
}
}
}
else
{
for (int i = 0; i < newArray.Length; i++)
{
newArray[i] = userArray[i];
}
}
userArray = newArray;
}
после просмотра:
задумался над тем, что получется что мой метод делает больше 1 явного действия, что как говорил Сергей не хорошо. Видимо придется перепесать)
Спасибо огромное!
Удивляюсь людям, которым легко делать дз, я так и не понял как его делать, пока не посмотрел начало урока.
Привет, ещё кодишь? Или забросил?
@@user-jk2rp7nt9k Привет, все ещё прогаю
@@user-jk2rp7nt9kПривет, все ещё прогаю
17:06 - Я хочу, чтобы на месте null выводилась не пустота, а надпись "пусто", поэтому мне нужно использовать оператор объединения с null. Только как мне это сделать, если вместо типов данных используются "джинерики"?
Спасибо тема нужная и важная,успехов Вам,и за помощь благодарен
Решил так, сначала подумал, что не надо сохранять значения в старом массиве, а в видео их сохранили...переделал под сохранение вот, что вышло:
namespace ConsoleApp33
{
internal class Program
{ static void CicleB(ref int b, ref string str)
{ while (b < 0)
{
Console.WriteLine("Массив не может быть с отрицательным числом");
StringReturn(ref str);
Parse(ref str, ref b);
}
while (b == default)
{
Console.WriteLine("Кажется, вы ввели не число");
StringReturn(ref str);
Parse(ref str, ref b);
}
}
static void Parse(ref string str, ref int b)
{
if (str == String.Empty)
{
Console.WriteLine("Вы ничего не ввели");
}
else
{
int.TryParse(str, out b);
}
}
static void StringReturn(ref string str)
{
Console.WriteLine("Введите сколько элементов массива вы хотите сделать");
str = Console.ReadLine();
}
static void arraynew(ref int[] array, ref int b)
{
int[] NewArray = new int[b];
for (int i = 0; i < array.Length; i++)
{
NewArray[i] = array[i];
}
array = NewArray;
}
static void Main(string[] args)
{
int[] array = { 1, 2, 3, 4, 5 };
int b = 0;
string str = "default";
StringReturn(ref str);
Parse(ref str, ref b);
CicleB(ref b, ref str);
arraynew(ref array, ref b);
for (int i = 0;i < array.Length;i++)
{
Console.WriteLine(array[i]);
}
}
}
}
Добрый день. Сделал все тоже самое только через иф=( забыл про логический элемент. На написание программы ушло мин 10-15. Это первый язык программирования. Спасибо за уроки!
Спасибо за урок!!! Где то я потерял нить повествования и перестал поинмать что происходит =(. Придется вернуться на несколько уроков назад
Хороший урок! Спасибо Сергей!
Пртвет Сергей! Спосибо за уроки! Можно узнать когда выйдет следущий?
После ваших подробных уроков дз вообще без проблем выполняю хотелось бы так же по окнам уроки тоже с домашками
Это ДЗ я смог сделать только через статический метод Resize) Но как он работает додуматься не смог. Спасибо за урок!
Спасибо за урок!
Мне аж стало жалко "сборщика мусора", теперь буду стараться не писать лишнего кода =). И еще мне понравилась фраза "впихнуть невпихуемое".
Все понятно и очень круто жалко не всегда сам додумать могу, а так все очень четко!
если не понимаете уроков , елси проблемы в восприятии уроков. проверьте себя на депрессию ребята. это реально проблема.
тогда + 1 проблема - как избавится от депрессии
static condition DepressionRemover(person, target)
{
person = me;
depression = null;
}
Спасибо за отличное решение!
так то можно было захардкодить условие в цикле (i < array.Length-1) но все равно видео полезное, ты отлично объясняешь!
Сначала не понял как делать, потом все же пересилил себя и решил самому сделать все, было куча ошибок но в итоге я сделал без подсказок, но все же у меня не много иначе, массив заполняется рандомными значениями и рандомным размером, далее надо выбрать увеличить или уменьшить и после выбрать число на сколько, и далее если массив увеличивается новые значения заполняются случайными числами.
static void Resize(ref int[] array, int newSize) // изменение массива
{
int[] NewArray = new int[array.Length + newSize];
for (int i = 0; i < NewArray.Length; i++) // присваиваем значения из старого массива в новый
{
if (i < array.Length)
{
NewArray[i] = array[i];
}
else
{
NewArray[i] = random.Next(1, 10);
}
}
array = NewArray;// присваиваем новый массив старому
}
Поддерживающий комментарий для дальнейшего развития канала
В принципе ДЗ лёгкое, я смог его даже в уме представить и видео показало что я не ошибался.
Спасибо за видео-уроки с ДЗ!
Спасибо за уроки! лучший! )
Супер!
Благодарю за урок.
12:46 "Впихнуть невпихуемое" )) надо запомнить
Шикарно объяснено! Спасибо
Большое спасибо за ДЗ!
Наверное судьба есть благодаря этому каналу и стану программистом сколько раз бросал
Ооо, за джинерики огромное спасибо
круто!
Я бы в метод добавил еще проверку, если вдруг кто-то решит ресайзить, например, массив из 2х элементов в массив из двух элементов:
if (array.Length == NewSize)
return;
лайк и благодарность автору
Долго думал, но вот, что получилось
static void Resize(ref int[] arr, int resizemulti)
{
int[] Array = new int [resizemulti];
if (Array.Length >= arr.Length)
{
for (int i = 0; i < arr.Length; i++)
{
Array[i] = arr[i];
}
}
else
{
for (int i = 0; i < Array.Length; i++)
{
Array[i] = arr[i];
}
}
arr = Array;
}
int[] myArray = { 2, 5, 8};
int Value = 6; --- изменяет размер цикла.
Благодарю!
Да, да, да! ведь говорилось ранее, что если значение для элемента массива не указано, оно по дефолту заполняется 0 (для инта). А я в нулевые элементы еще раз записал нули... мда.
А я сделал запрос - сколько добавить и допилил туда еще ввод элементов в цикле.
как всегда хорошо
Спасибо большое))
А почему в c# нет методов для добавления или удаления элемента из массива?
Я так сделал:
static void Resize(ref int[] myArray)
{
Console.WriteLine("Изменение кол-во элементов массива");
Console.WriteLine();
Console.WriteLine("Введите новое кол-во элементов: ");
int opperation = int.Parse(Console.ReadLine());
myArray = new int[opperation];
}
static void Main(string[] args)
{
int[] myArray = new int[10];
Resize(ref myArray);
Console.WriteLine("Количество элементов в массиве: " + myArray.Length);
}
А я так )))
static void Resize(ref int[] arr)
{
int a;
int[] b = new int[arr.Length];
for (int i = 0; i < b.Length; i++)
{
b[i] = arr[i];
}
Console.WriteLine("Сколько элементов вы хотите в массиве?");
while (true)
{
try
{
a = int.Parse(Console.ReadLine());
}
catch (Exception)
{
Console.WriteLine("Не корректный ввод.");
continue;
}
if (a > 0 && a < 101)
{
arr = new int[a];
if (arr.Length > b.Length)
{
for (int i = 0; i < b.Length; i++)
{
arr[i] = b[i];
}
}
if (arr.Length < b.Length)
{
for (int i = 0; i < arr.Length; i++)
{
arr[i] = b[i];
}
}
break;
}
else
{
Console.WriteLine("Не корректный ввод. Введите целое число от 1 до 100");
}
}
}
Благодарю
Спасибо!!
Спасибо тебе большое бро
А я создал промежуточный массив для хранения данных из старого массива, потом в старой ссылке на массив заменил на новый массив с заданным размером. И все данные из промежуточного массива перевёл в заданный массив... Как-то так: Промежуточный массив = старый массив. Старый массив = новый размер. Цикл
@Easy Fate Я вот так сделал)))
static void Resize(ref int[] arr)
{
int a;
int[] b = new int[arr.Length];
for (int i = 0; i < b.Length; i++)
{
b[i] = arr[i];
}
Console.WriteLine("Сколько элементов вы хотите в массиве?");
while (true)
{
try
{
a = int.Parse(Console.ReadLine());
}
catch (Exception)
{
Console.WriteLine("Не корректный ввод.");
continue;
}
if (a > 0 && a < 101)
{
arr = new int[a];
if (arr.Length > b.Length)
{
for (int i = 0; i < b.Length; i++)
{
arr[i] = b[i];
}
}
if (arr.Length < b.Length)
{
for (int i = 0; i < arr.Length; i++)
{
arr[i] = b[i];
}
}
break;
}
else
{
Console.WriteLine("Не корректный ввод. Введите целое число от 1 до 100");
}
}
}
Я короче не понял походу дз, сделал так. Ну изменяет же количество элементов))
internal class Program
{
static void Resaize(ref int[] a)
{
int elements = int.Parse(Console.ReadLine());
a = new int[elements];
}
static void Main(string[] args)
{
int[] b = {354, 53, 675 };
Resaize(ref b);
Console.WriteLine("Количество элементов массива " + b.Length);
}
}
Я по другому написал с одним входящим параметром - самим массивом. А при выполнении метода программа спрашивает сколько должно быть элементов)) Но он работает корректно. Тут в методе 4 строчки кода а у меня 22 ))
привет а уроки по джаве планируются?)
Сергей, добрый день! Я Ваш удаленный ученик. Посмотрел видео, где Вы рассказали про то, как писали первую программу. После этого, у меня созрела идея какое именно нужно написать приложение мне. И уже в процесс создания осваивать материал. В связи с этим у меня вопрос. Приложения для мобильного устройства. Это будет маленький справочник с поисковиком по очень узкой тематике. Графики минимум, в основном таблицы и календарь с привязками к датам и напоминалками. Не буду углубляться. Какой язык для этого более подходит. Буду очень благодарен если вы ответите. Это не означает, что C# я заброшу, он мне очень нравится. При этом я понимаю, что на C# я для компа, смогу реализовать это приложение, написать алгоритм и т.д., но вот для мобильных устройств не знаю какой язык использовать.
Судя по всему приложение довольно простое и одним из критериев является желание изучать C#. В таком случае я бы посмотрел в сторону Xamarin, он позволяет разрабатывать кросплатформенные приложения на C#.
Спасибо!
У меня также, только в добавок я заполнила все нули рандомными значениями =)
static void Resize(ref int[] iMassiv, int SIZE, Random Rand)
{
int[] Array = new int[SIZE];
for (int i = 0; i < Array.Length && i < iMassiv.Length; i++)
{
Array[i] = iMassiv[i];
}
for (int i = iMassiv.Length; i
спасибо
12:46 Впихнуть невпихуемое как смысл жизни
11:04
Не понимаю, зачем внутри метода Resize создавать цикл for. Почему нельзя просто сделать так?
namespace HomeWork
{
internal class Program
{
static void Resize(ref int[] array, int newSize)
{
array = new int[newSize];
}
static void Main(string[] args)
{
int[] myArray = { 1, 4, 6 };
Array.Resize(ref myArray, 10);
}
}
}
мда как обычно я не понял что нужно сделать и написал совсем другой код под совсем другую задачу
{
internal class Program
{
static void Main(string[] args)
{
int IndexDel = 0;
string Info;
int[] myArray;
Console.WriteLine("Wratin pls Count for myArray: ");
int Count = int.Parse(Console.ReadLine());
myArray = new int[Count];
Console.WriteLine("Info");
Info = Console.ReadLine();
Console.WriteLine("IndexDeF");
IndexDel = int.Parse(Console.ReadLine());
switch (Info)
{
case "Add":
ForAddInArray(ref IndexDel, ref myArray);
break;
case "Deletel":
ForDeletelInArray(ref IndexDel, ref myArray);
break;
}
for (int i = 0; i < myArray.Length; i++)
{
Console.Write(myArray[i] + "\t");
}
}
static void ForAddInArray(ref int Add, ref int[] arr)
{
arr = new int[arr.Length + Add];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = int.Parse(Console.ReadLine());
}
}
static void ForDeletelInArray(ref int Del, ref int[] arr)
{
if (arr.Length - Del
я хз кому это будет интересно
Вот мой пример решения задания, где так же можно увеличить, либо уменьшить количество элементов массива, на определенное значение с сохранением числовой последовательности
static void Resize(ref int[] array, int increaseArray, int downArray)
{
int[] newAray = new int[(array.Length + increaseArray) - downArray];
for (int i = 0; i < array.Length; i++)
{
for (int j = i; j < newAray.Length; j++)
{
newAray[j] = j + 1;
}
}
array = newAray;
}
static void Main(string[] args)
{
int[] myArray = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Resize(ref myArray, 10, 0);
for (int i = 0; i < myArray.Length; i++)
{
Console.Write(myArray[i] + " ");
}
Console.ReadKey();
}
👍👍👍
static void Resize(ref int[] arr, uint size)
{
if ((arr??=new int[size]).Length==size) return; //обработка null или одинаковый размер
int[] newArr = new int[size]; //новый массив нужного размера
for(int i=0;i
thanks, cool !!!
Ещё не посмотрел видос, но хочу предположить, что решение будет примерно таким:
public static void Resize (ref T[] OldArr, int NewCap)
{
T[] Temp = new T[NewCap];
for (int i = 0; i < Temp.Length; i++)
{
try
{
Temp[i] = OldArr[i];
}
catch
{
Temp[i] = default(T);
}
}
OldArr = Temp;
}
З.Ы Делал для любого типа данных
ну и зачем тут try catch?
А почему и нет?) Просто здесь применяется дефолтное значение для обобщений, но в уроках этот момент ещё не объяснялся. Немного другая реализация и чуть больше кода, а по факту всё верно.
Алексей Мощенко потому что это очень накладная операция в виде вброса исключения и его отлавливание, намного дешевле использовать if
Впихнуть невпихуемое)
Ура
а по динамическим массивам будет видео? Очень интересуют методы с внесением и удалением данных List.
в C# в safe-коде нельзя устроить динамические массивы, так как в safe-коде нет указателей. Они есть в unsafe-коде, который позваляет работать с указателями и прочими гадостями. В LIst, наверное, есть методы с лишним выделением памяти под массив, чтобы не пересоздавать по многу раз массивы в памяти, либо же методы основаны на unsafe-коде.
я сделал по другому использовав сам метод Array.Resize и оператор switch для прибавления или уменьшения количества элементов, правда я не понял как заполнить новые элементы массива не меняя старые
все 3 задания в одном
static void Resize(ref int[] arr, int JelaemoeKolichestvo, int min, int max)
{
int[] gav = new int[JelaemoeKolichestvo];
Array.Copy(arr, gav, Math.Min(arr.Length, JelaemoeKolichestvo));
arr = gav;
Random random = new Random();
for (int i = 0; i < arr.Length; i++)
arr[i] = random.Next(min, max);
}
static void AddElementToStart(ref int[] arr, int element)
{
int[] newArr = new int[arr.Length + 1];
newArr[0] = element;
Array.Copy(arr, 0, newArr, 1, arr.Length);
arr = newArr;
}
static void AddElementToEnd(ref int[] arr, int element)
{
int[] newArr = new int[arr.Length + 1];
Array.Copy(arr, newArr, arr.Length);
newArr[arr.Length] = element;
arr = newArr;
}
static void AddElementAtIndex(ref int[] arr, int element, int index)
{
int[] newArr = new int[arr.Length + 1];
Array.Copy(arr, 0, newArr, 0, index);
newArr[index] = element;
Array.Copy(arr, index, newArr, index + 1, arr.Length - index);
arr = newArr;
}
static void Main(string[] args)
{
Random rnd = new Random();
int[] myArray = new int[rnd.Next(50, 100)];
for (int i = 0; i < myArray.Length; i++)
myArray[i] = rnd.Next(100, 500);
Console.WriteLine($"Сейчас в массиве {myArray.Length} элементов:
{string.Join(" ", myArray)}");
Console.Write("Введите желаемое кол-во элементов: ");
int a = int.Parse(Console.ReadLine());
Console.WriteLine("Минимальное значение каждого элемента? ");
int min = int.Parse(Console.ReadLine());
Console.WriteLine("Максимальное значение каждого элемента? ");
int max = int.Parse(Console.ReadLine());
Resize(ref myArray, a, min, max);
Console.WriteLine($"Ваш новый массив на {a} элементов:
{string.Join(" ", myArray)}");
Console.Write("Введите элемент для добавления в начало массива: ");
int startElement = int.Parse(Console.ReadLine());
AddElementToStart(ref myArray, startElement);
Console.WriteLine($"Массив после добавления элемента в начало:
{string.Join(" ", myArray)}");
Console.Write("Введите элемент для добавления в конец массива: ");
int endElement = int.Parse(Console.ReadLine());
AddElementToEnd(ref myArray, endElement);
Console.WriteLine($"Массив после добавления элемента в конец:
{string.Join(" ", myArray)}");
Console.Write("Введите элемент для добавления: ");
int element = int.Parse(Console.ReadLine());
Console.Write("Введите индекс для добавления элемента: ");
int index = int.Parse(Console.ReadLine());
AddElementAtIndex(ref myArray, element, index);
Console.WriteLine($"Массив после добавления элемента по индексу:
{string.Join(" ", myArray)}");
Console.ReadLine();
}
незнаю,в тему ли я, но на просторах рунета нет нормальных уроков по опенгл.Можно ли ето исправить плиз ^_^
Сделал дз правильно (работает правильно ). Но написал его , как обычно , в 2 раза больше чем у вас ....... АААААА
static void Resize( ref int[] array, int size)
{
int[] newArray = new int[array.Length];
for (int i = 0; i < newArray.Length; i++)
newArray[i] = array[i];
array = new int[size];
for (int i = 0; i < newArray.Length && i
добрый день Сергей! у меня есть один вопрос,есть ли на языке с# такой код который изменяет конкретный элемент массива, при этом только тот элемент который вы исправили,а другие элементы которые остались на месте то есть неизменым, есть ли такой код на языке с#!?
А как в новом массиве проименовать элементы???
У меня так вышло :)
internal class Program
{
static void Main(string[] args)
{
int[] myArray = { 3, 8, 1, 7 };
Resize(ref myArray, 10);
for (int i = 0; i < myArray.Length; i++)
{
Console.Write(myArray[i] + " | ");
}
Console.WriteLine();
}
static void Resize(ref int[] array, int value)
{
int[] tempArray = new int[value];
for (int i = 0; i < array.Length; i++)
{
if (i >= tempArray.Length)
{
break;
}
tempArray[i] = array[i];
}
array = tempArray;
}
}
Можно было и без условия после цикла обойтись (в счетчик т.е. в цикл сам прописать), но рада, что правильно мыслила)
Я узнал, что могу писать название методов и переменных русскими буквами. Как это возможно?
Сделал 2 метода, которые просто увеличивают массив либо же уменьшают без переноса значений
а почему все так сложно в видео? разве нельзя было сделать вот так?
using System;
using System.Linq;
namespace crossplatforn
{
class Program
{
static void grus(ref int[] gif)
{
Array.Resize(ref gif, int.Parse(Console.ReadLine()));
}
static void Main(string[] args)
{
Console.Write("Please enter number of massive elements: ");
int[] bio = { 2, 3, 5 };
grus(ref bio);
for (int i = 0; i < bio.Length; i++)
{
Console.WriteLine($"massive:{i} " + bio[i]);
}
}
}
}
@@kompotalive логично ))
Спасибо за урок ! Можете сказать ,почему когда я это хочу запустить на консоле оно пишет System.Toint32[]?
Скорее всего вы не зациклили вывод массива.
for (int i = 0; i < myArr.Length; i++)
{
Console.WriteLine(" " + myArr[i]);
}
Хмм интересно лайки 620, а просмотров 6к++. Вот халявщики лайки зажали :=)
Впихнул невпихуемое
Ссылка на ссылку... Теперь я видел всё
Это 12-е дз
пофиксал