Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

patryk2205

Losowanie - tablice

Rekomendowane odpowiedzi

Witam ponownie :)

Borykam się z kolejnym problemem i nie mogę znaleźć rozwiązania więc proszę o pomoc. Treść zadania w plik. Gdy uruchamiam program wyskakuje mi błąd, ale rozwiązanie pokazuje tylko ze indeks 0 w tablicy parzysta nie ma żadnej wartości:

Notice: Undefined offset: 50 in F:.. on line 32

 

<?php

function losowanie($n)
{
	if($n>=50 && $n<=60)
	{

		for($i=0; $i<$n; $i++)   // losowanie n liczb
		{
			$los = rand(10,99);
			$losowane[$i] = $los;  // tablica $losowane przechowuje wszystkie wylosowane liczby
		}

	}
	else
	{
		echo "Złe dane"; 
	}

	if($n%2==0) 					// jeśli ilosc elementów jest parzysta
	{	
		$c = 0;
		$y = 0; 
		for($x=0; $x<$n; $x++) 	// ilosc wszystkich losowan
		{
			while($i>0)	
			{

					if($i%2==0)		//co druga liczba o indeksie parzystym idzie do tablicy parzysta  

					{
						$parzysta[$c] = $losowane[$i];	// <-- to ta linia z błędem!!!!
						$i--;							// indeksy z tablic odejmowane o 1 
						$c++;
					}
					else
					{
						$nieparzysta[$y] = $losowane[$i];
						$i--;
						$y++;
					}

			}
		}


	}
	else		// jesli ilosc elementów jest nieparzysta
	{
		$l = rand(10,99);
		$losowane[$i] = $l; 
	}

	echo "<pre>";
	print_r($parzysta);
	echo "<pre>";

	echo "<br/>";
	echo "<pre>";
	print_r($nieparzysta);
	echo "<pre>";

}

	echo losowanie(50);


?>

zadanie.txt

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

<?php
function losowanie (int $n)
{
   if ($n < 50 || $n > 60) {
       return;
   }

   $n = ($n % 2 == 0) ? $n : $n + 1;

   $losowanie = [];
   for ($i = 1, $l = $n / 2; $i <= $n; $i++) {
       $tab = ($i <= $l) ? 1 : 2;
       $losowanie[$tab][] = rand(0, 99);
   }
   return $losowanie;
}

var_dump(losowanie(50));

 

Można się pobawić array_split, array_chunk itp.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

OK, a tak nawiązując do mojego programu to co muszę zmienić żeby mi do indeksu 0 tez przypisywało wartość w tablicy parzysta?

 

A dobra już wiem, użyc array_chunk żeby podzielić tablice na dwie mniejsze równe. Spróbuje ogarnąć. Dzięki za podpowiedź :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tylko zwróć uwagę że u ciebie niespelnienie podstawowego warunku nie przerywa kodu i daje niespójne wyniki.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Użyłem array_chnuk i faktycznie tablica dzieli się na dwie mniejsze. Jest sposób żeby te dwie tablice nazwać? Żebym mógł się do nich oddzielnie odwoływać? Użyłem jak na razie polecenia: print_r(array_chunk($losowane,$n/2));

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Description

array array_chunk ( array $wejście , int $rozmiar [, bool $zachowaj_klucze ] )

 

masz definicję funkcji

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Wiem jaka jest definicja tej funkcji. Zastanawiam się jak te wartości umieścić jeszcze do dwóch osobnych tablic.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...