04.12
This commit is contained in:
@@ -0,0 +1,82 @@
|
|||||||
|
<?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>Z94 - max i indeksy w tablicy jednowymiarowej</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1>Zadanie Z94</h1>
|
||||||
|
<h2>Autor: Jakub Grzegorczyk</h2>
|
||||||
|
</header>
|
||||||
|
<div class="box">
|
||||||
|
<p>
|
||||||
|
Napisz program, który wczytuje liczby całkowite do jednowymiarowej tablicy, wyświetla tę tablicę, wyświetla maksymalną wartość zapisaną w tablicy oraz wskaźniki elementów zawierających tę maksymalną wartość. Użytkownik wprowadza liczby do komponentu textarea oddzielone przecinkami. Program powinien zweryfikować, czy podane wartości są liczbami całkowitymi, a w odpowiedzi podać liczbę elementów, maksymalną wartość oraz indeksy elementów o tej wartości.
|
||||||
|
<br><br>
|
||||||
|
Uwaga: Do wygenerowania liczb oddzielonych przecinkami możesz wykorzystać zadanie z85.
|
||||||
|
</p>
|
||||||
|
<h3>Wskazówki dla ucznia:</h3>
|
||||||
|
<ul>
|
||||||
|
<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>Użyj max(), aby znaleźć maksymalną wartość, a następnie przeszukaj tablicę, aby znaleźć indeksy za pomocą pętli lub array_keys().</li>
|
||||||
|
<li>Liczbę elementów uzyskaj za pomocą count().</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>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') {
|
||||||
|
$valuesInput = htmlspecialchars($_POST['values']);
|
||||||
|
$values = array_map('trim', explode(',', $valuesInput));
|
||||||
|
$n = count($values);
|
||||||
|
$areValid = true;
|
||||||
|
for ($i = 0; $i < $n; $i++) {
|
||||||
|
if (!is_numeric($values[$i])) {
|
||||||
|
$areValid = false;
|
||||||
|
} else {
|
||||||
|
$values[$i] = (float)$values[$i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$maxIndex = array();
|
||||||
|
for ($i = 0; $i < $n; $i++) {
|
||||||
|
if ($values[$i] == max($values)) {
|
||||||
|
$maxIndex[] = $i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo '<div class="box">';
|
||||||
|
if ($areValid) {
|
||||||
|
|
||||||
|
echo 'Wprowadzone wartości: ' . implode(', ', $values) . '<br>';
|
||||||
|
echo "Tablica jednowymiarowa ($n elementów):";
|
||||||
|
echo '<pre>';
|
||||||
|
for ($i = 0; $i < $n; $i++) {
|
||||||
|
echo "tab[$i] = " . $values[$i] . '<br>';
|
||||||
|
}
|
||||||
|
echo '</pre>';
|
||||||
|
echo "Liczba elementów: $n<br>";
|
||||||
|
echo "Maksymalna wartość: " . max($values) . '<br>';
|
||||||
|
echo "Indeksy elementów z maksymalną wartością: " . implode(', ', $maxIndex) . '</div>';
|
||||||
|
} else {
|
||||||
|
echo 'Dane wejściowe nie są poprawne! Sprawdź czy wszystkie są liczbami.';
|
||||||
|
}
|
||||||
|
echo '</div>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
300
Zadania/Z94 - max i indeksy w tablicy jednowymiarowej/style.css
Normal file
300
Zadania/Z94 - max i indeksy w tablicy jednowymiarowej/style.css
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
/* === UNIVERSAL SCHOOL TEMPLATE CSS (BLACK & WHITE EDITION) === */
|
||||||
|
/* clean, modern, and copy-paste friendly for all projects */
|
||||||
|
|
||||||
|
/* === RESET === */
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === VARIABLES === */
|
||||||
|
:root {
|
||||||
|
--accent: #000;
|
||||||
|
--border: #000;
|
||||||
|
--bg: #fff;
|
||||||
|
--bg-alt: #f7f7f7;
|
||||||
|
--text: #111;
|
||||||
|
--shadow: rgba(0, 0, 0, 0.15) 3px 3px 6px;
|
||||||
|
--radius: 1em;
|
||||||
|
--max-width: 1300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === PAGE === */
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Verdana, sans-serif;
|
||||||
|
background: linear-gradient(180deg, #ffffff 0%, #f5f5f5 100%);
|
||||||
|
color: var(--text);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === HEADER === */
|
||||||
|
header {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 20px 30px;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
background: var(--bg);
|
||||||
|
width: 95%;
|
||||||
|
max-width: var(--max-width);
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 25px;
|
||||||
|
transition: box-shadow 0.3s ease, transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
header:hover {
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 4px 4px 10px;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
font-size: 2.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === BOX === */
|
||||||
|
.box {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 25px 35px;
|
||||||
|
margin-top: 25px;
|
||||||
|
background: var(--bg);
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
width: 95%;
|
||||||
|
max-width: var(--max-width);
|
||||||
|
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 4px 4px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === TEXT ELEMENTS === */
|
||||||
|
p {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box > p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4 {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #000;
|
||||||
|
text-decoration: underline;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === LISTS === */
|
||||||
|
ul, ol {
|
||||||
|
margin: 1rem 0 1rem 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === TABLES === */
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 1rem 0;
|
||||||
|
background: var(--bg);
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.6em;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td {
|
||||||
|
padding: 10px 12px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background: var(--bg-alt);
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:hover {
|
||||||
|
background: #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === FORMS === */
|
||||||
|
form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box:has(> form) {
|
||||||
|
padding: 35px 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.8em;
|
||||||
|
padding: 1.2rem 1.5rem;
|
||||||
|
background: var(--bg-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000;
|
||||||
|
padding: 0 0.4rem;
|
||||||
|
font-size: 1.05rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="email"],
|
||||||
|
input[type="password"],
|
||||||
|
input[type="number"],
|
||||||
|
input[type="tel"],
|
||||||
|
input[type="date"],
|
||||||
|
textarea,
|
||||||
|
select {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 1rem;
|
||||||
|
margin-top: 6px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.5em;
|
||||||
|
padding: 0.4rem 0.5rem;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
background: var(--bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
resize: vertical;
|
||||||
|
min-height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus,
|
||||||
|
textarea:focus,
|
||||||
|
select:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: #000;
|
||||||
|
box-shadow: 0 0 6px rgba(0, 0, 0, 0.4);
|
||||||
|
background: #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
accent-color: #000;
|
||||||
|
transform: scale(1.2);
|
||||||
|
margin-right: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === BUTTONS === */
|
||||||
|
button,
|
||||||
|
input[type="submit"],
|
||||||
|
input[type="button"],
|
||||||
|
input[type="reset"] {
|
||||||
|
padding: 10px 20px;
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.5em;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1rem;
|
||||||
|
background: linear-gradient(180deg, #fff 0%, #f2f2f2 100%);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
align-self: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover,
|
||||||
|
input[type="submit"]:hover,
|
||||||
|
input[type="button"]:hover,
|
||||||
|
input[type="reset"]:hover {
|
||||||
|
background: #eaeaea;
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 3px 3px 6px;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:active,
|
||||||
|
input[type="submit"]:active,
|
||||||
|
input[type="button"]:active,
|
||||||
|
input[type="reset"]:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.15) 1px 1px 3px;
|
||||||
|
background: #f7f7f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === HR, CODE, ETC. === */
|
||||||
|
hr {
|
||||||
|
border: 0;
|
||||||
|
border-top: 2px solid var(--border);
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
background: #f4f4f4;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 0.4em;
|
||||||
|
padding: 0.3em 0.5em;
|
||||||
|
font-family: "Courier New", monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 1em;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === RESPONSIVE === */
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
header, .box {
|
||||||
|
width: 95%;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
header h1 {
|
||||||
|
font-size: 1.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
font-size: 0.95rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
102
Zadania/Z95 - max w tablicy dwuwymiarowej/index.php
Normal file
102
Zadania/Z95 - max w tablicy dwuwymiarowej/index.php
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
<?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>Z95 - max w tablicy dwuwymiarowej</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1>Zadanie Z95</h1>
|
||||||
|
<h2>Autor: Jakub Grzegorczyk</h2>
|
||||||
|
</header>
|
||||||
|
<div class="box">
|
||||||
|
<p>
|
||||||
|
Napisz program, który wczytuje liczby całkowite do tablicy o wymiarach n x m, wyświetla tę tablicę i wyświetla maksymalną wartość zapisaną w tablicy. Użytkownik podaje n i m oraz wprowadza liczby do komponentu textarea oddzielone przecinkami. Program powinien zweryfikować, czy n i m są liczbami całkowitymi, czy podane wartości są liczbami całkowitymi, oraz czy ich liczba zgadza się z n x m, a następnie wyświetlić tablicę w czytelny sposób wraz z maksymalną wartością.
|
||||||
|
<br><br>
|
||||||
|
Uwaga: Do wygenerowania liczb oddzielonych przecinkami możesz wykorzystać zadanie z85.
|
||||||
|
</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 max() na spłaszczonej tablicy, aby znaleźć maksymalną wartość.</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">
|
||||||
|
<label for="m">Liczba kolumn (m):</label>
|
||||||
|
<input type="number" name="m" id="m" max="100" min="0">
|
||||||
|
</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']);
|
||||||
|
$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;
|
||||||
|
|
||||||
|
$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 "Maksymalna wartość: " . max($values) . '</div>';
|
||||||
|
} else {
|
||||||
|
echo 'Dane wejściowe nie są poprawne! Sprawdź wymiary, liczbę wartości lub czy wszystkie są liczbami.';
|
||||||
|
}
|
||||||
|
echo '</div>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
300
Zadania/Z95 - max w tablicy dwuwymiarowej/style.css
Normal file
300
Zadania/Z95 - max w tablicy dwuwymiarowej/style.css
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
/* === UNIVERSAL SCHOOL TEMPLATE CSS (BLACK & WHITE EDITION) === */
|
||||||
|
/* clean, modern, and copy-paste friendly for all projects */
|
||||||
|
|
||||||
|
/* === RESET === */
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === VARIABLES === */
|
||||||
|
:root {
|
||||||
|
--accent: #000;
|
||||||
|
--border: #000;
|
||||||
|
--bg: #fff;
|
||||||
|
--bg-alt: #f7f7f7;
|
||||||
|
--text: #111;
|
||||||
|
--shadow: rgba(0, 0, 0, 0.15) 3px 3px 6px;
|
||||||
|
--radius: 1em;
|
||||||
|
--max-width: 1300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === PAGE === */
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Verdana, sans-serif;
|
||||||
|
background: linear-gradient(180deg, #ffffff 0%, #f5f5f5 100%);
|
||||||
|
color: var(--text);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === HEADER === */
|
||||||
|
header {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 20px 30px;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
background: var(--bg);
|
||||||
|
width: 95%;
|
||||||
|
max-width: var(--max-width);
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 25px;
|
||||||
|
transition: box-shadow 0.3s ease, transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
header:hover {
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 4px 4px 10px;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
font-size: 2.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === BOX === */
|
||||||
|
.box {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 25px 35px;
|
||||||
|
margin-top: 25px;
|
||||||
|
background: var(--bg);
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
width: 95%;
|
||||||
|
max-width: var(--max-width);
|
||||||
|
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 4px 4px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === TEXT ELEMENTS === */
|
||||||
|
p {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box > p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4 {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #000;
|
||||||
|
text-decoration: underline;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === LISTS === */
|
||||||
|
ul, ol {
|
||||||
|
margin: 1rem 0 1rem 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === TABLES === */
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 1rem 0;
|
||||||
|
background: var(--bg);
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.6em;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td {
|
||||||
|
padding: 10px 12px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background: var(--bg-alt);
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:hover {
|
||||||
|
background: #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === FORMS === */
|
||||||
|
form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box:has(> form) {
|
||||||
|
padding: 35px 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.8em;
|
||||||
|
padding: 1.2rem 1.5rem;
|
||||||
|
background: var(--bg-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000;
|
||||||
|
padding: 0 0.4rem;
|
||||||
|
font-size: 1.05rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="email"],
|
||||||
|
input[type="password"],
|
||||||
|
input[type="number"],
|
||||||
|
input[type="tel"],
|
||||||
|
input[type="date"],
|
||||||
|
textarea,
|
||||||
|
select {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 1rem;
|
||||||
|
margin-top: 6px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.5em;
|
||||||
|
padding: 0.4rem 0.5rem;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
background: var(--bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
resize: vertical;
|
||||||
|
min-height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus,
|
||||||
|
textarea:focus,
|
||||||
|
select:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: #000;
|
||||||
|
box-shadow: 0 0 6px rgba(0, 0, 0, 0.4);
|
||||||
|
background: #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
accent-color: #000;
|
||||||
|
transform: scale(1.2);
|
||||||
|
margin-right: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === BUTTONS === */
|
||||||
|
button,
|
||||||
|
input[type="submit"],
|
||||||
|
input[type="button"],
|
||||||
|
input[type="reset"] {
|
||||||
|
padding: 10px 20px;
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.5em;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1rem;
|
||||||
|
background: linear-gradient(180deg, #fff 0%, #f2f2f2 100%);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
align-self: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover,
|
||||||
|
input[type="submit"]:hover,
|
||||||
|
input[type="button"]:hover,
|
||||||
|
input[type="reset"]:hover {
|
||||||
|
background: #eaeaea;
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 3px 3px 6px;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:active,
|
||||||
|
input[type="submit"]:active,
|
||||||
|
input[type="button"]:active,
|
||||||
|
input[type="reset"]:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.15) 1px 1px 3px;
|
||||||
|
background: #f7f7f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === HR, CODE, ETC. === */
|
||||||
|
hr {
|
||||||
|
border: 0;
|
||||||
|
border-top: 2px solid var(--border);
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
background: #f4f4f4;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 0.4em;
|
||||||
|
padding: 0.3em 0.5em;
|
||||||
|
font-family: "Courier New", monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 1em;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === RESPONSIVE === */
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
header, .box {
|
||||||
|
width: 95%;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
header h1 {
|
||||||
|
font-size: 1.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
font-size: 0.95rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
110
Zadania/Z96 - max i indeksy w tablicy dwuwymiarowej/index.php
Normal file
110
Zadania/Z96 - max i indeksy w tablicy dwuwymiarowej/index.php
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
<?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>Z96 - max i indeksy w tablicy dwuwymiarowej</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1>Zadanie Z96</h1>
|
||||||
|
<h2>Autor: Jakub Grzegorczyk</h2>
|
||||||
|
</header>
|
||||||
|
<div class="box">
|
||||||
|
<p>Napisz program, który wczytuje liczby całkowite do tablicy o wymiarach n x m, wyświetla tę tablicę, wyświetla maksymalną wartość zapisaną w tablicy oraz wskaźniki elementów zawierających tę maksymalną wartość. Użytkownik podaje n i m oraz wprowadza liczby do komponentu textarea oddzielone przecinkami. Program powinien zweryfikować, czy n i m są liczbami całkowitymi, czy podane wartości są liczbami całkowitymi, oraz czy ich liczba zgadza się z n x m, a następnie wyświetlić tablicę, maksymalną wartość i indeksy elementów o tej wartości.</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 max(), aby znaleźć maksymalną wartość, a następnie przeszukaj tablicę dwuwymiarową, aby znaleźć indeksy (i, j) elementów z tą wartością.</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">
|
||||||
|
<label for="m">Liczba kolumn (m):</label>
|
||||||
|
<input type="number" name="m" id="m" max="100" min="0">
|
||||||
|
</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']);
|
||||||
|
$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;
|
||||||
|
|
||||||
|
$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);
|
||||||
|
$maxIndexes = array();
|
||||||
|
for ($i = 0; $i < $n; $i++) {
|
||||||
|
for ($j = 0; $j < $m; $j++) {
|
||||||
|
if ($values2d[$i][$j] == max($values)) {
|
||||||
|
$maxIndexes[] = array($i, $j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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 "Maksymalna wartość: " . max($values) . '<br>';
|
||||||
|
echo "Indeksy elementów z maksymalną wartością: ";
|
||||||
|
foreach ($maxIndexes as $index) {
|
||||||
|
echo "(" . $index[0] . ", " . $index[1] . ") ";
|
||||||
|
}
|
||||||
|
echo '</div>';
|
||||||
|
} else {
|
||||||
|
echo 'Dane wejściowe nie są poprawne! Sprawdź wymiary, liczbę wartości lub czy wszystkie są liczbami.';
|
||||||
|
}
|
||||||
|
echo '</div>';
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
300
Zadania/Z96 - max i indeksy w tablicy dwuwymiarowej/style.css
Normal file
300
Zadania/Z96 - max i indeksy w tablicy dwuwymiarowej/style.css
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
/* === UNIVERSAL SCHOOL TEMPLATE CSS (BLACK & WHITE EDITION) === */
|
||||||
|
/* clean, modern, and copy-paste friendly for all projects */
|
||||||
|
|
||||||
|
/* === RESET === */
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === VARIABLES === */
|
||||||
|
:root {
|
||||||
|
--accent: #000;
|
||||||
|
--border: #000;
|
||||||
|
--bg: #fff;
|
||||||
|
--bg-alt: #f7f7f7;
|
||||||
|
--text: #111;
|
||||||
|
--shadow: rgba(0, 0, 0, 0.15) 3px 3px 6px;
|
||||||
|
--radius: 1em;
|
||||||
|
--max-width: 1300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === PAGE === */
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Verdana, sans-serif;
|
||||||
|
background: linear-gradient(180deg, #ffffff 0%, #f5f5f5 100%);
|
||||||
|
color: var(--text);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === HEADER === */
|
||||||
|
header {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 20px 30px;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
background: var(--bg);
|
||||||
|
width: 95%;
|
||||||
|
max-width: var(--max-width);
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 25px;
|
||||||
|
transition: box-shadow 0.3s ease, transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
header:hover {
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 4px 4px 10px;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
font-size: 2.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === BOX === */
|
||||||
|
.box {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 25px 35px;
|
||||||
|
margin-top: 25px;
|
||||||
|
background: var(--bg);
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
width: 95%;
|
||||||
|
max-width: var(--max-width);
|
||||||
|
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 4px 4px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === TEXT ELEMENTS === */
|
||||||
|
p {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box > p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4 {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #000;
|
||||||
|
text-decoration: underline;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === LISTS === */
|
||||||
|
ul, ol {
|
||||||
|
margin: 1rem 0 1rem 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === TABLES === */
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 1rem 0;
|
||||||
|
background: var(--bg);
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.6em;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td {
|
||||||
|
padding: 10px 12px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background: var(--bg-alt);
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:hover {
|
||||||
|
background: #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === FORMS === */
|
||||||
|
form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box:has(> form) {
|
||||||
|
padding: 35px 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.8em;
|
||||||
|
padding: 1.2rem 1.5rem;
|
||||||
|
background: var(--bg-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000;
|
||||||
|
padding: 0 0.4rem;
|
||||||
|
font-size: 1.05rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="email"],
|
||||||
|
input[type="password"],
|
||||||
|
input[type="number"],
|
||||||
|
input[type="tel"],
|
||||||
|
input[type="date"],
|
||||||
|
textarea,
|
||||||
|
select {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 1rem;
|
||||||
|
margin-top: 6px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.5em;
|
||||||
|
padding: 0.4rem 0.5rem;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
background: var(--bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
resize: vertical;
|
||||||
|
min-height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus,
|
||||||
|
textarea:focus,
|
||||||
|
select:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: #000;
|
||||||
|
box-shadow: 0 0 6px rgba(0, 0, 0, 0.4);
|
||||||
|
background: #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
accent-color: #000;
|
||||||
|
transform: scale(1.2);
|
||||||
|
margin-right: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === BUTTONS === */
|
||||||
|
button,
|
||||||
|
input[type="submit"],
|
||||||
|
input[type="button"],
|
||||||
|
input[type="reset"] {
|
||||||
|
padding: 10px 20px;
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.5em;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1rem;
|
||||||
|
background: linear-gradient(180deg, #fff 0%, #f2f2f2 100%);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
align-self: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover,
|
||||||
|
input[type="submit"]:hover,
|
||||||
|
input[type="button"]:hover,
|
||||||
|
input[type="reset"]:hover {
|
||||||
|
background: #eaeaea;
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 3px 3px 6px;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:active,
|
||||||
|
input[type="submit"]:active,
|
||||||
|
input[type="button"]:active,
|
||||||
|
input[type="reset"]:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.15) 1px 1px 3px;
|
||||||
|
background: #f7f7f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === HR, CODE, ETC. === */
|
||||||
|
hr {
|
||||||
|
border: 0;
|
||||||
|
border-top: 2px solid var(--border);
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
background: #f4f4f4;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 0.4em;
|
||||||
|
padding: 0.3em 0.5em;
|
||||||
|
font-family: "Courier New", monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 1em;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === RESPONSIVE === */
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
header, .box {
|
||||||
|
width: 95%;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
header h1 {
|
||||||
|
font-size: 1.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
font-size: 0.95rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
102
Zadania/Z97 - suma w wierszu tablicy/index.php
Normal file
102
Zadania/Z97 - suma w wierszu tablicy/index.php
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
<?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>
|
||||||
300
Zadania/Z97 - suma w wierszu tablicy/style.css
Normal file
300
Zadania/Z97 - suma w wierszu tablicy/style.css
Normal file
@@ -0,0 +1,300 @@
|
|||||||
|
/* === UNIVERSAL SCHOOL TEMPLATE CSS (BLACK & WHITE EDITION) === */
|
||||||
|
/* clean, modern, and copy-paste friendly for all projects */
|
||||||
|
|
||||||
|
/* === RESET === */
|
||||||
|
* {
|
||||||
|
box-sizing: border-box;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === VARIABLES === */
|
||||||
|
:root {
|
||||||
|
--accent: #000;
|
||||||
|
--border: #000;
|
||||||
|
--bg: #fff;
|
||||||
|
--bg-alt: #f7f7f7;
|
||||||
|
--text: #111;
|
||||||
|
--shadow: rgba(0, 0, 0, 0.15) 3px 3px 6px;
|
||||||
|
--radius: 1em;
|
||||||
|
--max-width: 1300px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === PAGE === */
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Verdana, sans-serif;
|
||||||
|
background: linear-gradient(180deg, #ffffff 0%, #f5f5f5 100%);
|
||||||
|
color: var(--text);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
line-height: 1.6;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === HEADER === */
|
||||||
|
header {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 20px 30px;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
background: var(--bg);
|
||||||
|
width: 95%;
|
||||||
|
max-width: var(--max-width);
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 25px;
|
||||||
|
transition: box-shadow 0.3s ease, transform 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
header:hover {
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 4px 4px 10px;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
header h1 {
|
||||||
|
font-size: 2.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
font-weight: 400;
|
||||||
|
font-size: 1.1rem;
|
||||||
|
color: #444;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === BOX === */
|
||||||
|
.box {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: var(--radius);
|
||||||
|
padding: 25px 35px;
|
||||||
|
margin-top: 25px;
|
||||||
|
background: var(--bg);
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
width: 95%;
|
||||||
|
max-width: var(--max-width);
|
||||||
|
transition: transform 0.2s ease, box-shadow 0.2s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 4px 4px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === TEXT ELEMENTS === */
|
||||||
|
p {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box > p:last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4 {
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #000;
|
||||||
|
text-decoration: underline;
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === LISTS === */
|
||||||
|
ul, ol {
|
||||||
|
margin: 1rem 0 1rem 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
li {
|
||||||
|
margin-bottom: 0.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === TABLES === */
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
margin: 1rem 0;
|
||||||
|
background: var(--bg);
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.6em;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: var(--shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td {
|
||||||
|
padding: 10px 12px;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
background: var(--bg-alt);
|
||||||
|
font-weight: bold;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
tr:hover {
|
||||||
|
background: #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === FORMS === */
|
||||||
|
form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 1.4rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box:has(> form) {
|
||||||
|
padding: 35px 35px;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.8em;
|
||||||
|
padding: 1.2rem 1.5rem;
|
||||||
|
background: var(--bg-alt);
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #000;
|
||||||
|
padding: 0 0.4rem;
|
||||||
|
font-size: 1.05rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
font-weight: 500;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="text"],
|
||||||
|
input[type="email"],
|
||||||
|
input[type="password"],
|
||||||
|
input[type="number"],
|
||||||
|
input[type="tel"],
|
||||||
|
input[type="date"],
|
||||||
|
textarea,
|
||||||
|
select {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 1rem;
|
||||||
|
margin-top: 6px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.5em;
|
||||||
|
padding: 0.4rem 0.5rem;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
background: var(--bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
resize: vertical;
|
||||||
|
min-height: 100px;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:focus,
|
||||||
|
textarea:focus,
|
||||||
|
select:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: #000;
|
||||||
|
box-shadow: 0 0 6px rgba(0, 0, 0, 0.4);
|
||||||
|
background: #f9f9f9;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
accent-color: #000;
|
||||||
|
transform: scale(1.2);
|
||||||
|
margin-right: 0.3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === BUTTONS === */
|
||||||
|
button,
|
||||||
|
input[type="submit"],
|
||||||
|
input[type="button"],
|
||||||
|
input[type="reset"] {
|
||||||
|
padding: 10px 20px;
|
||||||
|
border: 2px solid var(--border);
|
||||||
|
border-radius: 0.5em;
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1rem;
|
||||||
|
background: linear-gradient(180deg, #fff 0%, #f2f2f2 100%);
|
||||||
|
cursor: pointer;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
align-self: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:hover,
|
||||||
|
input[type="submit"]:hover,
|
||||||
|
input[type="button"]:hover,
|
||||||
|
input[type="reset"]:hover {
|
||||||
|
background: #eaeaea;
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.25) 3px 3px 6px;
|
||||||
|
transform: translateY(-2px);
|
||||||
|
}
|
||||||
|
|
||||||
|
button:active,
|
||||||
|
input[type="submit"]:active,
|
||||||
|
input[type="button"]:active,
|
||||||
|
input[type="reset"]:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
box-shadow: rgba(0, 0, 0, 0.15) 1px 1px 3px;
|
||||||
|
background: #f7f7f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === HR, CODE, ETC. === */
|
||||||
|
hr {
|
||||||
|
border: 0;
|
||||||
|
border-top: 2px solid var(--border);
|
||||||
|
margin: 1.5rem 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
max-width: 100%;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code, pre {
|
||||||
|
background: #f4f4f4;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
border-radius: 0.4em;
|
||||||
|
padding: 0.3em 0.5em;
|
||||||
|
font-family: "Courier New", monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
padding: 1em;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* === RESPONSIVE === */
|
||||||
|
@media (max-width: 900px) {
|
||||||
|
header, .box {
|
||||||
|
width: 95%;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 600px) {
|
||||||
|
header h1 {
|
||||||
|
font-size: 1.7rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header h2 {
|
||||||
|
font-size: 0.95rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user