103 lines
4.4 KiB
PHP
103 lines
4.4 KiB
PHP
<?php
|
|
?>
|
|
<!doctype html>
|
|
<html lang="pl">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport"
|
|
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
|
|
<meta http-equiv="X-UA-Compatible" content="ie=edge">
|
|
<title>Z97 - suma w wierszu tablicy</title>
|
|
<link rel="stylesheet" href="style.css">
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<h1>Zadanie Z97</h1>
|
|
<h2>Autor: Jakub Grzegorczyk</h2>
|
|
</header>
|
|
<div class="box">
|
|
<p>Napisz program, który wczytuje liczby do tablicy o wymiarach n x m i oblicza sumę wartości we wskazanym wierszu. Numer wiersza podaje użytkownik (numerowanie od 0). Użytkownik wprowadza n, m, liczby do komponentu textarea oddzielone przecinkami oraz numer wiersza. Program powinien zweryfikować, czy n, m i numer wiersza są liczbami całkowitymi, czy podane wartości są liczbami, czy ich liczba zgadza się z n x m, a następnie wyświetlić tablicę i sumę wartości w wybranym wierszu.</p>
|
|
<h3>Wskazówki dla ucznia:</h3>
|
|
<ul>
|
|
<li>Sprawdź, czy n i m są liczbami całkowitymi (is_numeric() i is_int() po konwersji).</li>
|
|
<li>Użyj explode(), aby rozdzielić ciąg z textarea na tablicę liczb na podstawie przecinków.</li>
|
|
<li>Zweryfikuj, czy każda wartość jest liczbą całkowitą za pomocą is_numeric() i sprawdzenia, czy po konwersji na int nie traci wartości dziesiętnej.</li>
|
|
<li>Przekształć jednowymiarową tablicę na dwuwymiarową, rozdzielając ją na wiersze po m elementów.</li>
|
|
<li>Użyj array_sum() lub pętli, aby obliczyć sumę wartości w wybranym wierszu.</li>
|
|
<li>Zabezpiecz dane wejściowe za pomocą htmlspecialchars() przy pobieraniu, aby chronić przed XSS.</li>
|
|
</ul>
|
|
</div>
|
|
<div class="box">
|
|
<form action="index.php" method="post">
|
|
<fieldset>
|
|
<legend>Wymiary tablicy</legend>
|
|
<label for="n">Liczba wierszy (n):</label>
|
|
<input type="number" name="n" id="n" max="100" min="0" required>
|
|
<label for="m">Liczba kolumn (m):</label>
|
|
<input type="number" name="m" id="m" max="100" min="0" required>
|
|
<label for="rowNum">Numer wiersza (0 do n-1):</label>
|
|
<input type="number" name="rowNum" id="rowNum" min="0" required>
|
|
</fieldset>
|
|
<fieldset>
|
|
<legend>Wartości tablicy (liczby całkowite oddzielone przecinkami):</legend>
|
|
<label for="values"></label>
|
|
<textarea name="values" id="values" cols="30" rows="10" placeholder="np. 1, 2, 3, 4"></textarea>
|
|
</fieldset>
|
|
<button type="submit">Wyślij</button>
|
|
</form>
|
|
</div>
|
|
<?php
|
|
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
|
|
$nInput = htmlspecialchars($_POST['n']);
|
|
$mInput = htmlspecialchars($_POST['m']);
|
|
$rowNumInput = htmlspecialchars($_POST['rowNum']);
|
|
$valuesInput = htmlspecialchars($_POST['values']);
|
|
|
|
$isValidDimensions = is_numeric($nInput) && is_numeric($mInput) &&
|
|
(int)$nInput == $nInput && (int)$mInput == $mInput &&
|
|
(int)$nInput > 0 && (int)$nInput <= 100 &&
|
|
(int)$mInput > 0 && (int)$mInput <= 100;
|
|
|
|
$n = (int)$nInput;
|
|
$m = (int)$mInput;
|
|
$rowNum = (int)$rowNumInput;
|
|
|
|
$values = array_map('trim', explode(',', $valuesInput));
|
|
$count = count($values);
|
|
$isCountValid = $count === ($n*$m);
|
|
|
|
$areAllValuesValid = true;
|
|
for ($i = 0; $i < $count; $i++) {
|
|
if (!is_numeric($values[$i])) {
|
|
$areAllValuesValid = false;
|
|
} else {
|
|
$values[$i] = (int)$values[$i];
|
|
}
|
|
}
|
|
echo '<div class="box">';
|
|
if ($areAllValuesValid && $isValidDimensions && $isCountValid) {
|
|
$values2d = array_chunk($values, $m);
|
|
echo "Wymiary tablicy: n = $n, m = $m<br>";
|
|
echo "Wprowadzone liczby: ";
|
|
echo implode(', ', $values);
|
|
echo "<br>Tablica $n x $m:";
|
|
echo '<table>';
|
|
for ($i = 0; $i < $n; $i++) {
|
|
echo '<tr>';
|
|
for ($j = 0; $j < $m; $j++) {
|
|
echo '<td>' . $values2d[$i][$j] . '</td>';
|
|
}
|
|
echo '</tr>';
|
|
}
|
|
echo '</table>';
|
|
echo 'Suma wartości w wierszu ' . $rowNum . ': ' . array_sum($values2d[$rowNum]) . '<br>';
|
|
echo '</div>';
|
|
} else {
|
|
echo 'Dane wejściowe nie są poprawne! Sprawdź wymiary, liczbę wartości lub czy wszystkie są liczbami.';
|
|
}
|
|
echo '</div>';
|
|
}
|
|
?>
|
|
</body>
|
|
</html>
|