Logo

Főoldal

Blog

Elmélet

3D Studio

Adatvédelmi nyilatkozat

GY.I.K.

Házirend

Szerző: Marosi Csaba / marosi.csaba@3d-studio.hu

DiscordGitHubLinkedIn
Developedia
Developedia
/Feladatgyűjtemény
Feladatgyűjtemény
/Tömbök és Listák
Tömbök és Listák
Tömbök és Listák

Tömbök és Listák

‣
Tömb szorzata

Írj metódust, ami kiszámolja egy paraméterben kapott float tömb elemeinek szorzatát és visszatér az eredménnyel!

‣
Megoldás:
float Mean(float[] array)
{
	float product = 1;
	for (int i = 0; i < array.Length; i++)
	{
		product *= array[i];
	}
	return product;
}
‣
Tömb átlaga

Írj metódust, ami kiszámolja egy paraméterben kapott float tömb elemeinek átlagát és visszatér az eredménnyel!

‣
Megoldás
float Mean(float[] array)
{
	float sum = 0;
	for (int i = 0; i < array.Length; i++)
	{
		sum += array[i];
	}
	return sum / array.Length;
}
‣
Tömb feltöltése sorban

Írj metódust, ami kap egy int típusú paramétert, nevezzük length-nek!

A metódus létrehoz egy length elemű int tömböt, és feltölti azt 1-től length-ig sorban számokkal. A metódus ezzel a tömbbel tér vissza.

‣
Megoldás:
int[] GetFilledArray(int length)
{
	int[] array = new int[length];
	for (int i = 1; i <= length; i++)
	{
		array[i] = i;
	}
	return array;
}
‣
Tömb feltöltése 2

Írj metódust, ami egy paraméterben kap egy egész számot, nevezzük length-nek.

A metódus létrehoz egy length elemű int tömböt, és feltölti azt első length darab olyan természetes számmal, ami nem osztható sem 4-mal sem 5-tel!

‣
Megoldás
int[] GetFilledArray(int length)
{
	// Létrehozom tömböt és feltöltöm
	int[] array = new int[length];
	int count = 0;
	for (int i = 1; count < length; i++)
	{
		if(i % 4 != 0 && i % 5 != 0)
		{
			arrayA[count] = i;
			count++;
		} 
	}
}
‣
Tömb feltöltése 3

Írj metódust, ami egy paraméterben kap egy egész számot, nevezzük max-nek.

A metódus létrehoz egy int tömböt, és feltölti azt az összes olyan természetes számmal, ami nem osztható sem 4-mal sem 5-tel és kisebb vagy egyenlő, mint max!

A tömb pont annyi elemű legyen, mint ahány ilyen szám létezik!

‣
Megoldás
int[] GetFilledArray(int max)
{
	// Először megszámoljuk az elemeket
	int count = 0;
	for (int i = 1; i < max; i++)
	{
		if(i % 4 != 0 && i % 5 != 0)
		{ 
			count++;
		} 
	}

	// Létrehozom tömböt és feltöltöm 
	int[] array = new int[count ];
	count = 0;
	for (int i = 1; i < max; i++)
	{
		if(i % 4 != 0 && i % 5 != 0)
		{
			arrayA[count] = i;
			count++;
		} 
	}
}

Megoldás 2: Egyszerűbb listával dolgozni:

int[] GetFilledArray(int max)
{
	// Létrehozom listát és feltöltöm 
	List<int> list = new List<int>();
	for (int i = 1; i < max; i++)
	{
		if(i % 4 != 0 && i % 5 != 0)		
			list.Add(i);		
	}

	return list.ToArray();
}
‣
Minimum- és maximumkereső függvény tömbön

Írj függvényt, ami visszaadja egy paraméterben kapott float tömb legkisebb értékét!

Írj függvényt, ami visszaadja egy paraméterben kapott float tömb legnagyobb értékét!

‣
Megoldás
‣
Tartalom megfordítása

Írjunk eljárást, ami egy paraméterben kapott int tömböt átalakít úgy, hogy a tartalma fordított sorrendben szerepeljen benne!

Pl.: { 1, 2, 3, 4, 5 } → { 5, 4, 3, 2, 1 }

A feladatot oldd meg, hogy az eljáráson belül nem hozol létre új tömböt!

‣
Megoldás
void ChangeOrder(int[] array)
{
	if (array == null)
		return; 
	        
	// A sorozat hosszának feléig iterálok:
	for (int i = 0; i < array.Length / 2; i++)
	{
		// Hátulról i-edik index
		int i2 = array.Length - 1 - i;
		
		// Kicserélem i-edik és i2-edik indexen lévő elemet
		int temp = array[i];    // Szükség van egy segédváltozóra
		array[i] = array[i2];
		array[i2] = temp;
	} 
}
‣
Fordítva másolás

Írj függvényt, ami egy paraméterben megadott int tömb tartalmát fordított sorrendben átmásolja egy újonnan létrehozott tömbbe és visszatér vele!

‣
Megoldás
int[] ChangeOrder(int[] array)
{
	if (array == null)
		return null; 
	        
	int[] newArray = new int[array.Length];
	        
	for (int i = 0; i < array.Length; i++)
	{
		// Hátulról i-edik index
		int i2 = array.Length - 1 - i;
		            
		// Fordítva töltöm fel az új tömböt:
		newArray[i] = array[i2];
	}

	return newArray;
} 
‣
Tömbegyesítő

Írj függvényt, ami két paraméterként kapott string tömböt összefűz egy új hosszabb tömbbé, amiben mindkét tömb elemei szerepelnek, majd visszaadja ezt a nagyobb tömböt.

Pl: {”AAA”, “BBB”, ”CCC”} + {”DDD”, ”EEE”} → { "AAA”, “BBB”, “CCC”, “DDD”, “EEE” }

‣
Megoldás
string[] Combine(string[] a1, string[] a2)
{
	string[] c = new string[a1.Length + a2.Length];
	
	for (int i = 0; i < a1.Length; i++)
		c[i] = a1[i];
	
	for (int i = 0; i < a2.Length; i++)
		c[a1.Length + i] = a2[i];
	
	return c;
}
‣
Tömbből string

Írj függvényt, ami kap egy int tömböt paraméterként. A függvény egy string-gel tér vissza aminek tartalma a tömb elemei vesszővel elválasztva.

A string elején és végén kapcsos zárójel van.

Példa kimenet: {4, 5, 54, 32, -6, 0}

‣
Megoldás
string ArrayToString(int[] a)
{
	if(a == null || a.Length == 0)
		return "{ }";
	        
	string result = "{";
	for (int i = 0; i < a.Length-1; i++)    
		result += a[i] + ", ";
	
	result += a[a.Length-1];
	        
	result += "}";
	return result;
}
‣
Contains függvény

Írj függvényt, ami visszaadja egy elemről, hogy szerepel-e egy tömbben.

A függvény két paramétere a tömb és a tesztelt elem.

‣
Megoldás
bool Contains(string[] strings, string element)
{
	foreach (string str in strings)
	{
		if (str == element)
			return true;
	}
	return false;
}
‣
Fibonacci sor

Írj függvényt, ami visszaad egy int tömböt, aminek tartalma a Fibonacci sor első első n száma!

‣
Fibonacci sor definíciója
💡
A fibonacci sorozat olyan számsor, aminek első két eleme 0 és 1 és utána minden szám az előző kettő összege.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34 …

”n” szám a függvény int típusú és egyetlen paramétere.

‣
Megoldás
int[] Fibonacci(int length)
{
	int[] result = new int[length];
	        
	if(length > 0)
		result[0] = 0;
	        
	if(length > 1)
		result[1] = 1;
	
	for (int i = 2; i < length; i++)
		result[i] = result[i - 1] + result[i - 2];
	        
	return result;
}
‣
Keverő

Írj komponenst, aminek meg lehet adni [SerializeField] beállításként GameObject-eknek egy sorozatát (tömbjét vagy listáját).

A komponens gombnyomásra példányosít (Instantiate), azaz létrehoz egy véletlen elemet a sorozatból, de mindenképp olyat, amiből (ebben a körben) még nem hozott létre.

Ha elfogynak az elemek kezdi elölről az egészet. (Új kör)

‣
Megoldás:
‣
Palindrom

Írj függvényt, ami paraméterként megadott string-ről mondjátok meg, hogy palindrom-e! A választ egy kimeneti bool változó tartalmazza!

icon
A palindrom olyan szó vagy szókapcsolat, amely visszafelé olvasva is ugyanaz.
‣
Példák

török → ❌ false, 

görög → ✅ true

Apáca ette cápa → ❌ false

A cápa ette apáca → ✅ true

Ha tudod, old meg ne csak szavakra, de mondatokra is a feladatot!

‣
Megoldás
‣
Összes különböző betű

Írj függvényt, ami egy string-ben megszámolja az összes különböző betűt!

‣
Példák

Abrakadabra → 5 (A, B, R, K, D)

Karaktertömb → 8 (K, A, R, T, E, Ö, M, B)

Unity → 5 (U, N, I, T, Y)

‣
Megoldás
int CountUniqCharacters(string s)
{
	// Egyedi karaktereket tertalmazó tömb
	List<char> characters = new List<char>();
	foreach (char c in s) // minden karaktert megnézünk
	{
		if(!characters.Contains(c))
		characters.Add(c);
	}
	
	return characters.Count;
}
‣
Prímtényezős felbontás

Írj függvényt, ami egy listával tér vissza, amibe beírja egy paraméterben kapott egész szám prímtényezős felbontását!

‣
Példák

8 → {2, 2, 2}

15 → {3, 5}

66 → {2, 3, 11}

90 → {2, 3, 3, 5}

image
‣
Megoldás
‣
Ötöslottó

Írj függvényt, ami kisorsolja a lottószámokat!

Nem kell a jövő heti lottószámokat (ha valaki ilyen programot is tudna írni, annak szívesen visszafizetem a képzés árát. 🙂), elég véletlenszerűen találni 90-ből 5-öt.

Az eredményt egy 5 elemű int tömbbe adja vissza a függvény.

‣
Véletlen szám létrehozásának módja
// Ezt egyszer kell létrehozni:
Random random = new Random((int)DateTime.Now.Ticks);  

// Az eredmény legalább min nagzságú és mindenképp kisebb, mint max:
int randomNumber = random.Next(min, max);

int randomNumber = random.Next(0, 15);    //   0 -  14
int randomNumber = random.Next(2, 6);     //   2 -  5
int randomNumber = random.Next(-11, 11);  // -11 -  10
int randomNumber = random.Next(1, 101);   //   1 - 100
‣
Megoldás
‣
Szerencse szimuláció

Írj függvényt, ami paraméterként vár egy int tömböt a megjátszott lottószámokkal és egy int számot arról, hogy hány hétig játsszuk meg azokat.

A függvény térjen vissza az összeggel, hogy mennyit nyertünk ha az egész időszakot véletlenszerűen szimuláljuk.

A nyeremények:

  • 2 találat - 1 000 Ft
  • 3 találat - 10 000 Ft
  • 4 találat - 5 000 000 Ft
  • 5 találat - 1 000 000 000 Ft
‣
Véletlen szám létrehozásának módja
// Ezt egyszer kell létrehozni:
Random random = new Random((int)DateTime.Now.Ticks);  

// Az eredmény legalább min nagzságú és mindenképp kisebb, mint max:
int randomNumber = random.Next(min, max);

int randomNumber = random.Next(0, 15);    //   0 -  14
int randomNumber = random.Next(2, 6);     //   2 -  5
int randomNumber = random.Next(-11, 11);  // -11 -  10
int randomNumber = random.Next(1, 101);   //   1 - 100
‣
Megoldás
‣
Minden második

Írjatok metódust, ami kiveszi egy listából annak minden máodik elemét!

‣
Megoldás
// Minimum kereső függvény float-okon
float Min(float[] array)
{
	if(array == null || array.Length == 0)
		return 0;
	        
	float min = array[0];
	        
	for (int i = 1; i < array.Length; i++)
	{
		if (array[i] < min)
		min = array[i];
	}
	return min;
}
    
// Maximum kereső függvény float-okon
float Max(float[] array)
{
	if(array == null || array.Length == 0)
		return 0;
	        
	float max = array[0];
	
	for (int i = 1; i < array.Length; i++)
	{
		if (array[i] > max)
		max = array[i];
	}
	return max;
}
using System.Collections.Generic;
using UnityEngine;

public class Shuffler : MonoBehaviour
{
    // Beállítás:
    [SerializeField] List<GameObject> objects;
    
    // Privát változó:
    List<GameObject> notInstantiated = new List<GameObject>(); // Tartalmát változtatni fogom
    
    void Update()
    {        
        if (Input.anyKeyDown) // Ha a egy gombot lenyomtak
        {
            if(notInstantiated.Count == 0) // Ha üres a lista
            { 
                // Feltöltöm a listát az objektumokkal
                foreach (GameObject obj in objects)
                    notInstantiated.Add(obj);
            }
            
            int index = Random.Range(0, notInstantiated.Count); // Ebből sorsolok egyet véletlenszerűen
            GameObject newObject = Instantiate(notInstantiated[index]); // Példányosítom az objektumot
            notInstantiated.RemoveAt(index);    // Törölöm a listából
            newObject.transform.position = transform.position;  // Beállítom a pozíciót
        }
    }
}
bool IsPalindrome(string s)
{
	if (s == null)
		return false;
	
	s = s.ToLower();   // Csupa negybetű
	// Kiveszem a különleges karesszimbólumokat:
	s = s.Replace(" ", "");
	s = s.Replace(",", "");
	s = s.Replace(".", "");
	s = s.Replace("!", "");
	s = s.Replace("?", "");
	        
	char[] a = s.ToCharArray();
	
	// Tömb feléig eliterálok:
	for (int i = 0; i < a.Length / 2; i++)
	{
		// Ha az i-edik betű nem egyezik  a hátulról i-edik betűvel,
		if (a[i] != a[a.Length - 1 - i])
			return false;                  		// akkor nem palindrom
	}
	return true;
}
// Prímtényezős felbontás
List<int> ToPrimeFactors(int n)
{
        n = Mathf.Abs(n);
        
        List<int> result = new List<int>();
        if(number == 1)
            return result;
        
        int prime = 2;
        while (n > 1)
        {
            while (n % prime == 0)
            {
                result.Add(prime);
                n /= prime;
            }
            prime = NextPrime(prime);
        }

        return result;
}

// Megtalálja a következő prím számot
int NextPrime(int prime)
{
        int next = prime + 1;
        while (!IsPrime(next))
            next++;
        return next;
}

// Megadja egy számról, hogy prím-e
bool IsPrime(int num)
{
        if (num <= 1)
            return false;
        for (int i = 2; i * i <= num; i += 2)
            if (num % i == 0)
                return false;
        return true;
}
int[] Lottery(int allNumbers, int chosenNumbers)
{
    // Összes szám listája:
    List<int> allNumbersList = new List<int>();
    for (int i = 1; i <= allNumbers; i++)
        allNumbersList.Add(i);

    // Nyert számok tömbje:
    int[] lottery = new int[chosenNumbers]; 
    
		Random random = new Random((int)DateTime.Now.Ticks);  

    // Véletlen számok kiválasztása:
    for (int i = 0; i < chosenNumbers; i++)
    {
        int randomIndex = random.Next(0, allNumbersList.Count);
        lottery[i] = allNumbersList[randomIndex];

        // Ha egy számot már kisorsol, akkor azt kivesszük a listából:
        allNumbersList.RemoveAt(randomIndex);
    }
    return lottery;
}
int TestLotteryMultipleWeek(int[] myNumbers, int playCount)
{
    int prize = 0;
    for (int i = 0; i < playCount; i++)
        prize += TestLottery(myNumbers);

    return prize;
}

int TestLottery(int[] myNumbers)
{
    int[] winningNumbers = Lottery(90, 5);
    int matchCount = MatchCount(myNumbers, winningNumbers);

    if (matchCount == 2)
    {
        Console.WriteLine($"2-es: {ArrayToString(winningNumbers)}");
        return 1000;
    }

    if (matchCount == 3)
    {
        Console.WriteLine($"3-as egyezés! {ArrayToString(winningNumbers)}");
        return 10000;
    }

    if (matchCount == 4)
    {
        Console.WriteLine($"4-ES EGYEZÉS!! {ArrayToString(winningNumbers)}");
        return 5000000;
    }

    if (matchCount == 5)
    {
        Console.WriteLine($"5-ÖS EGYEZÉS!!! {ArrayToString(winningNumbers)}");
        return 1000000000;
    }

    return 0;
}

// Nyertes számokat visszaadó függvény
int[] Lottery(int allNumbers, int chosenNumbers)
{
    // Összes szám listája:
    List<int> allNumbersList = new List<int>();
    for (int i = 1; i <= allNumbers; i++)
        allNumbersList.Add(i);

    // Nyert számok tömbje:
    int[] lottery = new int[chosenNumbers];

		Random random = new Random((int)DateTime.Now.Ticks);  

    // Véletlen számok kiválasztása:
    for (int i = 0; i < chosenNumbers; i++)
    {
        int randomIndex = random.Next(0, allNumbersList.Count);
        lottery[i] = allNumbersList[randomIndex];

        // Ha egy számot már kisorsol, akkor azt kivesszük a listából:
        allNumbersList.RemoveAt(randomIndex);
    }
    return lottery;
}

// Egyezések számát visszaadó függvény
int MatchCount(int[] a, int[] b)
{
    int matchCount = 0;
    for (int i = 0; i < a.Length; i++)
    {
        if (b.Contains(a[i]))
            matchCount++;
    }
    return matchCount;
}

string ArrayToString(int[] a)
{
    string result = "{";
    for (int i = 0; i < a.Length; i++)
    {
        if (i != a.Length - 1)
            result += a[i] + ", ";
        else
            result += a[i];
    }

    result += "}";
    return result;
}
void RemoveEverySecond(List<string> list)
{
    // Ellenőrizzük, hogy a lista hossza páros-e
    bool isEven = list.Count % 2 == 0;

    // Ha páros, az utolsó elemtől kezdjük, ha páratlan, az utolsó előtti elemtől
    int startIndex = isEven ? (list.Count - 1) : (list.Count - 2);

    // Végigmegyünk a listán visszafelé, és minden második elemet eltávolítunk
    // Azért visszafelé, mert ha előre mennénk,
     akkor az eltávolítás miatt az indexek megváltoznának
    for (int i = startIndex; i >= 0; i -= 2)
    {
        // Kiveszem az elemet ami az i-edik helyen van
        list.RemoveAt(i);
    }
}