Два въпроса относно масиви в C#


0
здравейте. Става въпрос за първа задача от домашното по C# part2.
Условието е следното: Write a program that allocates array of 20 integers and initializes each element by its index multiplied by 5. Print the obtained array on the console.
Това ми е решението. Имам въпрос относно резултатния масив arr1, който не отпечатва правилно ако въведения елемент е по-голям от 425,000,000 , та би трябвало да извежда резултат за всяко число в обхвата на integer. от какъв тип да създам ресултатния масив arr1 за да работи?? например ако въведа 500,000,000, извежда 1797967296, а пък при 999,999,999 извежда 705032699

using System;
class Program { static void Main() { //Write a program that allocates array of 20 integers and initializes each element by its index multiplied by 5. Print the obtained array on the console. Console.WriteLine("Enter Arr[i]"); int[] arr = new int[5]; double[] arr1=new double[5]; for (int i = 0; i < arr.Length; i++) { arr[i] = int.Parse(Console.ReadLine()); arr1[i] = arr[i] * 5; } for (int i = 0; i < arr.Length; i++) { Console.WriteLine("Array[i*5]= {0}",Math.Abs(arr1[i])); } } }

този код без масив си отпечатва и за n=2,147,483,647
int n = int.Parse(Console.ReadLine()); double p = 5; Console.WriteLine(n * p);
А и още едно питане. дали може да се избегне наличието на двата цикъла(за въвеждане и за извеждане) ??
мерси



Отговори



5

решението на тази задача е това.

int[] arr = new int[20];

for (int i = 0; i < arr.Length; i++)
{

arr[i] = i * 5;

Console.Write(arr[i]+ " ");
                
}

Console.WriteLine();

 

Допълнение

а това решението на твоя въпрос... не ти трябва втори масив за това.

BigInteger[] arr = new BigInteger[20];

//тука си вкарваш елементите на масива

for (int i = 0; i < arr.Length; i++)

{

//или тука си вкарваш елементите на масива

arr[i] =  arr[i] * 5;

Console.Write(arr[i]+ " ");               

}

Console.WriteLine();

 


от lithical (0 точки)


0
Твоят вариант не въвежда числа. arr[i] = int.Parse(Console.ReadLine()) * 5; така въвеждаш и умножаваш едновременно.

от tddhome (3086 точки)

0
Е то на практика не се изисква да прочиташ числа от конзолата, а: initializes each element by its index multiplied by 5 Дори Google преводач го превежда правилно(да не повярва човек :D). Та идеята е да инициализираш всеки елемент от масива като умножиш индекса му по 5.

от RANOPILE (1038 точки)


0
Принципно с BigInteger, но условието на задачата не е ли числата в масивите да са равни на съответните им индекси умножените по 5?
Иначе за циклите в първия цикъл можеш след като го умножиш по 5 да сложиш Console.Writeline да го печата и така.

от Yordan.Bonev (780 точки)


0

1. Не си разбрала добре условието - елеминтите на масива не се въвеждат от конзолата, а се калкулират само на база на индекс и константа.

2. По принцип в твоя пример (при някакъв хипер масив от 2,147,483,647 елемента) първо се умножава максималната ст-ст на int по 5, надхвърля лимита и започва да пише отначало и чак тогава резултата го конвертира към double. По-удачно решение би-било с масив от long.

3. Тъй като няма въвеждане от конзолата, всичко става с един цикъл. Ето едно решение

П.П: По принцип е добре да се ползват линки към code storages като pastebin.com за да се избегнат много дълги постове.


от STzvetkov (1330 точки)


0
да знам, че е по-добре да препращам към pastebin , но тъй като кода е супер малък . извинете ме

от geripetkova (104 точки)


0
lithical твоят вариант работи , но моят не става, може би когато създавам друг масив не го умножава коректно. Прилагам моя код, който не работи (в мномента е с big integer) например при въвеждане на 430,000,000 показва резултат -2,144,967,296
//Write a program that allocates array of 1 integer and print the array element multiplied by 5 //first way Console.WriteLine("Enter Arr[i]"); int[] arr = new int[1]; BigInteger[] arr1 = new BigInteger[1]; for (int i = 0; i < arr.Length; i++) { arr[i] = int.Parse(Console.ReadLine()); arr1[i] = arr[i] * 5;
} for (int i = 0; i < arr.Length; i++) { Console.WriteLine("Array[i*5]= {0}", arr1[i]); }
А този код е на колегата lithical , който си ОК и при въвеждане на 430,000,000, изкарва резултат 2,150,000,000
//second way BigInteger[] arr = new BigInteger[1];
for (int i = 0; i < arr.Length; i++) { arr[i] = int.Parse(Console.ReadLine()); } for (int i = 0; i < arr.Length; i++) { arr[i] = arr[i] * 5; Console.Write(arr[i] + " "); } Console.WriteLine();
не мога да разбера къде греша. при по - малки стойности под 425,000,000 и моят код работи коректно.
п.п Моля не ме флагвайте, защото хич не ми помагате по-този начин , а напротив само ме притеснявате. или поне пишете коментари за съответния флаг. Опитвам се да науча нещо в крайна сметка, както всички вас

от geripetkova (104 точки)


0
ами трябва да направиш двата масива BigInteger

от lithical (0 точки)

0
Пробвай така:
arr1[i] = (BigInteger)arr[i] * (BigInteger)5;

от lnxslackware (416 точки)