[C#] Arrays - 2 задача


1
2.Write a program that reads two arrays from the console and compares them element by element.



Отговори



1
http://pastebin.com/nNW0VD73

от SNeykov (176 точки)


0
http://pastebin.com/yS8Em2sB



1
http://pastebin.com/GQkZLk5Z
Чета последователно елементите с еднакъв индекс на двата масива и при разлика в някой от тях веднага извеждам, че не са еднакви, без да се прави въвеждането на останалите елементи.

от shristoff (747 точки)


0
Според мен никъде не се използва подобен подход. Защото дори и от файл да се подават, със сигурност последователно ще са ти подадени елементите само на 1 масив, а не по индекса. Да, твоето решение работи, но на практика няма как реално да се приложи.

от simeon.bg (462 точки)

0
Да и аз съм на това мнение, защото тук да кажем се брой за вярно решение, но попринцип такива проверки се правят на предварително зададени да кажем n на брой елементи.

от Plamen.Minkov (216 точки)



2
http://pastebin.com/dAeLuPzS



6

Според мен проверката за дължините на двата масива трябва да е първа и ако двете числа не са равни, то резултатът е ясен. Това е моето решение :

http://pastebin.com/f8BY8SVM


от son4etyyy (416 точки)


0
Доста елегантно решение. :) Само ако може да вмъкна нещо. Т.е. нещо като съвет :) Ей този ред int n = int.Parse(Console.ReadLine()); бих те посъветвал да не правиш така, защото не можеш да го дебъгнеш лесно. Вярно спестява ти един ред, ама според мен по-добре нещо от сорта на: string s = Console.ReadLine(); int n = int.Parse(s); По този начин разделено, с дебъгера можеш да проследиш всичко подробно ;) И int.Parse() метода, очаква стринг, а не друг метод. Ама за тези късичките задачи, не е фатално да ползваш и съкратения вариант :)) Може би при по-дълги ще е хубаво да е по-разделено, споерд мен.

от p.tseperski (10 точки)

0
Здравей и мерси:) Относно въвеждането, аз в началото го правех както ти казваш, но после забелязах, че може да се напише по-кратко и за това го пиша така. Защо мислиш, че е по- добре да се пишат отделно, според мен този ред почти никога не би могъл да създаде грешка.

от son4etyyy (416 точки)



2

Едит: Преместих решението и обяснението в блога си. Ето линк:

http://goo.gl/qjQ1K
 

 


от Teodor92 (13062 точки)


0
Теодоре, имам въпрос - Защо сортираш двата масива? Ако имаме един масив с елементи 1, 2, 3, 4 и друг масив - 2, 4, 1, 3 - след като ги сортираш ще са равни - но иначе не са равни.

от sabrie_n (625 точки)

0
Зависи, как интерпретираш "равни" - като да имат еднакви елементи или да имат еднакви елементи на еднакви позиции. Не съм сигурен какво са имали в предвид авторите и за това съм избрал втория. Утре на лекцията ще питам какво са имали точно в предвид :)

от Teodor92 (13062 точки)



0
от мен:

http://pastebin.com/3PXYZ4qa

от Dimov (907 точки)


0
Добро решение но условието не изключва възможността двата масива да са с различен брой елементи, бях допуснал същата грешка ;)



4
Това е моето решение: http://pastebin.com/BKF3yuWc
По примера на колегата Теодор, ще обясня своята логика:
1. Прочитам от колко елемента ще е първия масив. Правя проверка на прочетеното от конзолата. Проверявам дали е число и ако е число дали е >0. Ако не е коректно въведен броя на елементите от първия масив, съответно изписвам съобщение и подканям отново да се въведе броя, докато не получа коректно въведени данни.
2. Прочитам от конзолата всеки елемент и го записвам на съответната позиция в първия масив. Като отново правя проверка по описания по-горе начин, за да си гарантирам коректно въвеждане на данните.
3. Горните две стъпки ги повтарям и за втория масив.
4. На променливата от тип bool, която съм използвала по-горе при проверката на въвежданите данни, присвоявам стойност true. Ще използвам тази променлива при сравняване на елементите на масивите.
5. След като вече съм прочела всички елементи на двата масива, първо проверявам дали имат еднакъв на брой елементи. Ако масивите нямат еднаква дължина, тогава няма как да са еднакви. Изписвам на конзолата, че не са еднакви и с това програмата приключва.
Ако масивите са с еднаква дължина, тогава преминавам към сравнение на елементите. Като съответно сравнявам първия елемент на единия масив с първия елемент на другия масив (те са на позиции 0). После сравнявам вторите елементи(които са на позиции 1), третите и т.н.
При сравнение на елементите, ако се окаже, че не са еднакви тогава на булевата променлива check присвоявам false и с break излизам от цикъла. Това е с цел да не се върти излишно цикъла. Ако всички елеметни от първия масив са равни на съответстващите им по индекс елементи от втория масив, тогава променливата check си остава със стойност true.
След това, ако check е със стойност true - тогава изписвам, че масивите са еднакви, в противен случай, съответно че не са еднакви.

от dani.georgieva (3072 точки)


0
Както винаги за пример;) Поне за мен:)))



0

Here is my try ;) http://pastebin.com/iETbFFGE

 

Regards

Iliya


от iliyahristov (0 точки)


0
Според мен е странно да сравняваш масивите, при положение, че си видял, че са с различна дължина. Харесва ми, че осигуряваш винаги валидни входни данни :)

от PBorukova (1129 точки)

0
Мисля, че трябва от сега да свиквам максимално да предвиждам и избягвам предпоставките за грешка :) Поздрави Илия

от iliyahristov (0 точки)


0
using System;
class CompareArrays { static void Main(string[] args) { int n = int.Parse(Console.ReadLine()); int[] firstArray = new int[n]; int[] secondArray = new int[n]; bool equal = true;
for (int i = 0; i < n; i++) { firstArray[i] = int.Parse(Console.ReadLine()); } for (int i = 0; i < n; i++) { secondArray[i] = int.Parse(Console.ReadLine());
if (firstArray[i] != secondArray[i]) { equal = false; break; } } Console.Write("The arrays are equal --> "); Console.WriteLine(equal); } }
Ако пък се задава отделно дължинaта на втори масив m = нещо-си, може да се сложат всички цiкли в един if (equal = ( n == m))