JS Praca domowa nr 3 z użyciem Chat GPT
Prompt: Jesteś profesjonalnym programistą języka JavaScript. Napisz kod do programu, który pobierze od użytkownika za pomocą okien dialogowych dwa boki prostokąta weryfikując poprawność danych (liczby) i informując użytkownika o niepoprawnych. Stwórz funkcję, która będzie przyjmowała 2 argumenty i zwracała ich iloczyn (pole) i wyświetlała wynik w konsoli przeglądarki. Opisz krok po kroku i wyjaśnij swój tok myślenia oraz co każdy fragment kodu robi. Zadanie będzie weryfikowane przez specjalistę tej dziedziny, więc niedziałający kod skutkuje odrzuceniem. Wygeneruj sam plik .js, bez html.
'use strict';
/**
* Pomocnicza funkcja pobierająca z okna dialogowego liczbę dodatnią.
* - Informuje o błędach i prosi o ponowny wpis.
* - Zwraca liczbę (gdy poprawnie wpisano) lub null (gdy użytkownik anuluje).
*/
function promptForPositiveNumber(message) {
while (true) {
const raw = window.prompt(message); // okno dialogowe „prompt”
if (raw === null) return null; // użytkownik kliknął „Anuluj”
// Obsługa spacji i przecinka dziesiętnego (np. „12,5” -> „12.5”)
const normalized = raw.trim().replace(',', '.');
if (normalized === '') {
window.alert('Nie wpisano żadnej wartości. Wpisz dodatnią liczbę.');
continue;
}
const value = Number(normalized); // konwersja tekstu na liczbę
if (!Number.isFinite(value)) {
window.alert('To nie jest poprawna liczba. Przykład: 12.5');
continue;
}
if (value <= 0) {
window.alert('Bok musi być liczbą większą od zera.');
continue;
}
return value; // poprawna liczba
}
}
/**
* Funkcja oblicza pole prostokąta.
* @param {number} a - pierwszy bok (dodatnia liczba)
* @param {number} b - drugi bok (dodatnia liczba)
* @returns {number} - pole prostokąta
*/
function rectangleArea(a, b) {
const invalid =
typeof a !== 'number' || typeof b !== 'number' ||
!Number.isFinite(a) || !Number.isFinite(b) ||
a <= 0 || b <= 0;
if (invalid) {
throw new TypeError('rectangleArea: argumenty muszą być dodatnimi liczbami.');
}
return a * b;
}
// --- Główny przebieg programu ---
const a = promptForPositiveNumber('Podaj długość pierwszego boku prostokąta:');
if (a === null) {
window.alert('Operacja anulowana.');
} else {
const b = promptForPositiveNumber('Podaj długość drugiego boku prostokąta:');
if (b === null) {
window.alert('Operacja anulowana.');
} else {
const area = rectangleArea(a, b);
console.log(`Pole prostokąta o bokach ${a} × ${b} = ${area}`);
window.alert('Wynik zapisano w konsoli (otwórz Narzędzia deweloperskie).');
}
}