[JS] Średnia kolumn tablicy

Dziś rozwiążemy zadanie z Pracowni aplikacji internetowych. Kwalifikacja E.14 wydawnictwa WSiP.

Treść zadania:

Otrzymałeś polece­nie stworzenia aplikacji, której zadaniem jest obliczenie wartości śred­niej w poszczególnych kolumnach tablicy. Tablica powinna mieć dziesięć wierszy i dziesięć kolumn. Do tablicy wierszami wpisano kolejne liczby trzycyfrowe. Wynik działania aplikacji to wyświetlona zawartość tablicy (z za­chowaniem podziału na wiersze i kolumny) oraz wartości średnich w poszczególnych kolumnach. Do wpisania danych do tablicy i wykonania obliczeń należy użyć pętli.

Składniki:

Użyjemy pętli do wypełnienia tablicy oraz jej odczytania, tak jak w poprzednim wpisie: Jak stworzyć tablicę dwuwymiarową. W tablicy umieścimy liczby trzycyfrowe - tu zostawiam Ci pole do popisu;-) Dodatkowo stworzymy pętlę, która będzie liczyła wartości średnich dla każdej kolumny. Średnie przechowamy w dodatkowej tablicy. Na koniec wszystko razem wyświetlimy.

Zmienne:

Deklaracja zmiennych

//deklaracja zmiennych
        var iloscKolumn = 10;
        var iloscWierszy = 10;
        var liczbyTrzycyfrowe = 100;
        var napis = '';
        var tablica = [];
        var srednie = [];

Średnia wartość jednej kolumny

Zanim przejdziemy do głównego problemu, rozbijmy go na dwa mniejsze.

  1. Jak policzyć wartość średnią wszystkich wartości w jednej konkretnej kolumnie?
  2. Jak policzyć wartości średnie we wszystkich kolumnach, dla każdej osobno?

Aby rozwiązać pierwszy problem zastanówmy się jak odczytać z całej tablicy dwuwymiarowej tylko wartości jednej konkretnej kolumny?

 

Tak, wystarczy ustalić nr kolumny i odczytywać wszystkie wartości wierszy w tej kolumnie, czyli zapis:

suma += tablica[i][0];

wprowadzony do pętli for z licznikiem i, będzie dodawał kolejne wartości wierszy dla kolumny z indeksem 0. Natomiast kolejny zapis policzy nam średnią wartość kolumny(przy założeniu, że mamy 10 wierszy).

srednia=suma/10;

Teraz zastanów się nad drugim problemem....

 

Przydałaby nam się pętla, która wywołuje liczenie średniej dla konkretnej kolumny. Zróbmy zatem pętle zewnętrzną, nad tym kodem, który liczył nam średnią. W samym kodzie liczenia średniej wprowadzimy natomiast lekkie modyfikacje, otóż zamiast zmiennej średnia, wykorzystamy tablicę średnie, w której przechowywać będziemy wartości średnich, a w pętli liczącej sumę, zamiast tablica[i][0], dodamy drugi, zewnętrzny licznik, czyli otrzymamy: tablica[i][j]. Warto też skorzystać ze zmiennych, które określać będą liczbę kolumn i liczbę wierszy.

pętla zewnętrzna przesuwa się po kolumnach, pętla wewnętrzna po wierszach, sumując je dla danej kolumny.

//liczenie średniej wg kolumn
        for (var j = 0; j < iloscKolumn; j++) {
            var suma = 0;
            for (var i = 0; i < iloscWierszy; i++) {
                suma += tablica[i][j];
            }
            srednie[j] = suma / iloscWierszy;
        }

Wyświetlanie

Pozostało nam już tylko wyświetlić wynik i gotowe:) Przy tworzeniu napisu, wykorzystałem metodę join() dla tablicy jednowymiarowej srednie[].

 //dodatkowe formatowanie napisu
        napis += "Średnie każdej kolumny:<br>";
        napis += srednie.join(" ");
        //wyświetlenie napisu na stronie
        document.getElementById("ekranik").innerHTML = napis;

Wynik:

<p id="ekranik"></p>
 <script>
 //deklaracja zmiennych
 var iloscKolumn = 10;
 var iloscWierszy = 10;
 var liczbyTrzycyfrowe = 100;
 var napis = '';
 var tablica = [];
 var srednie = [];
 //deklaracja drugiego wymiaru tablicy
 for (var i = 0; i < iloscWierszy; i++) {
 tablica[i] = [];
 }
 //wypełnianie tablicy wartościami
 for (var i = 0; i < iloscWierszy; i++) {
 for (var j = 0; j < iloscKolumn; j++) {
 tablica[i][j] = liczbyTrzycyfrowe++;
 }
 }


 //odczytywanie tablicy i generowanie napisu 
 for (var i = 0; i < iloscWierszy; i++) {
 for (var j = 0; j < iloscKolumn; j++) {
 napis += tablica[i][j] + " ";
 }
 napis += '<br>';
 }

 //liczenie średniej wg kolumn
 for (var j = 0; j < iloscKolumn; j++) {
 var suma = 0;
 for (var i = 0; i < iloscWierszy; i++) {
 suma += tablica[i][j];
 }
 srednie[j] = suma / iloscWierszy;
 }
 //dodatkowe formatowanie napisu
 napis += "Średnie każdej kolumny:<br>";
 napis += srednie.join(" ");
 //wyświetlenie napisu na stronie
 document.getElementById("ekranik").innerHTML = napis;

 </script>

[JS] Jak stworzyć tablicę dwuwymiarową w JavaScript?

Tablice w JavaScript

Przypomnijmy sobie kilka podstawowych rzeczy o tablicach:

  • w tablicy można przechowywać wiele wartości(w odróżnieniu od zwykłej zmiennej, która przechowuje jedną wartość)
  • w tablicy JavaScript można przechowywać liczby, tekst, tablice i obiekty
  • tablice w JavaScript są obiektami
  • tablicę deklarujemy korzystając z nawiasów kwadratowych

Przykład tworzenia tablicy przechowującej kilka wartości.

  • długość tablicy(czyli ilość jej elementów) otrzymujemy poprzez jej właściwość length

Po więcej informacji, metod, właściwości tablic i przykładów na ich wykorzystanie odsyłam na w3schools. Znajduje się tam  fragment o tym, że w tablicach możemy przechowywać także inne  tablice. Taka tablica, która w każdej swojej komórce przechowuje tablicę nazywamy tablicą dwuwymiarową.

Brzmi poważnie?

Wyobraź sobie planszę do gry w statki, to jest właśnie tablica dwuwymiarowa.

Jak stworzyć tablicę dwuwymiarową?

Przedstawię jedną z metod tworzenia tablicy dwuwymiarowej. Na początku zadeklarujemy pustą tablicę o nazwie tablica

Drugim krokiem będzie zadeklarowanie w każdym elemencie tablicy kolejnej tablicy. W tym miejscu powinniśmy wiedzieć ile wierszy będzie miała nasza tablica.

Tablica dwuwymiarowa w działaniu

Powyższy kod wystarczy do zadeklarowania tablicy. Poniżej znajduje się gotowy przykład, który wypełnia tablicę wartościami z numerami wiersza i kolumny.

Jak wyświetlić tablicę dwuwymiarową?

Wykorzystaj do tego pętlę, taką jak przy wypełnianiu danymi, tylko tym razem odczytaj z niej wartości. Warto sformatować tekst, który generujemy i przedstawić go tak, aby po każdym wierszu(po każdej iteracji po i) przechodzić do nowej linjki.

Przykład

Poniżej zamieszczam cały listing strony, która prezentuje omawiany problem.

Efekt działania

[JS]Malowanie Pokoju

[JS]Malowanie Pokoju

"Malowanie pokoju" - E.14 - JavaScript

Dziś rozwiążemy wspólnie fragment zadania egzaminacyjnego z kwalifikacji E.14 z 2017 roku. Do wykonania mamy stronę wyglądającą jak obrazek powyżej. Strona ma umożliwiać obliczenie kosztu malowania pokoju o wymiarach wprowadzanych przez użytkownika. Do naszego rozwiązania wykorzystamy:

  • HTML5
  • CSS
  • JavaScript

OPIS ZADANIA

Przykład działania skryptu przedstawiony jest na rysunku powyżej. Skrypt powinien działać po stronie przeglądarki.

Jego zadaniem jest obliczenie ceny malowania pokoju, uwzględniając wytyczne:

  • Pokój ma plan prostokąta o wysokości 2,7 m
  • Powierzchnia okien i drzwi jest pomijana w obliczeniach
  • Cena malowania ścian wynosi 8 zł za metr kwadratowy
  • Nie jest wymagane, aby wyliczona cena była zaokrąglona

 Działanie skryptu:

  • Skrypt pobiera dane z dwóch pól edycyjnych ze strony kalkulator.html
  • Na podstawie danych oblicza całkowitą powierzchnię czterech ścian pokoju i wypisuje ją w tekście paragrafu, pod przyciskiem, według wzoru: „Powierzchnia całkowita ścian: ” <obliczona powierzchnia>
  • Na podstawie powierzchni oblicza koszt malowania i wypisuje poniżej według wzoru „Koszt
    malowania: ” <obliczony koszt> zł

Interfejs

Zacznijmy naszą pracę od interfejsu strony.  Wymienimy elementy języka HTML5, które będą nam potrzebne:

  •  Nagłówek H1
  • akapit x3
  • formularz z dwoma polami typu liczba(number) oraz przycisk

Podane poniżej elementy to absolutne minimum, które za chwilę rozwiniemy. Gotowy kod początkowy strony kalkulator.html poniżej.

Interfejs strony - baza do dalszych ćwiczeń

Usprawnienia

Atrybut pól typu number

Min umożliwi nam ustawienie minimalnej liczby jaką będzie można wybrać za pomocą kontrolek pola.

Nazwy

W JavaScripcie będziemy chcieli odczytać wartości pól z formularza. Jedną z metod jest odwoływanie się do nazw formularza i jego pól. Dlatego nazwijmy nasz formularz i pola typu number.

Identyfikatory

Do wyświetlania tekstów w akapitach wykorzystamy właściwość innerHTML, a elementy HTML pozyskiwać będziemy poprzez metodę getElementById() obiektu document. Dlatego należy nadać identyfikatory dla elementów, w których będziemy coś wyświetlać. Ja dodałem elementy liniowe ogólnego przeznaczenia(span), tak aby nie zmieniać całej treści akapitu, a tylko ten fragment, w którym pojawiać się będą wyniki.

Zdarzenia

Obliczenia wykonywane w JavaScript wywoływane będą po kliknięciu w przycisk, stąd dodajemy do niego obsługę zdarzenia onclick i wywołujemy funkcję sprawdz(), która zajmować się będzie obliczeniami.

Zawartość elementu body, po usprawnieniach

Style

Do naszego przycisku dodałem klasę 'guzik', która będzie kontrolowała jego wygląd. Zmieniłem tryb wyświetlania na blokowy, następnie nadałem szerokość i wysokość. Określiłem kolor tekstu i tła oraz dodałem obramowanie. Oczywiście możesz samodzielnie stworzyć swój wygląd przycisku, jednak sugeruj się tym, co widać na ilustracji zadania.

Skrypt

Przejdźmy do napisania funkcji sprawdz(), która sprawdzi poprawność danych, obliczy i wyświetli wyniki. Zadanie podzielimy na kilka części.

Wczytywanie danych

Aby dostać się do wartości pól formularza wykorzystamy właściwości obiektu document. Zaprezentowana konstrukcja odnosi się do formularza o nazwie 'dane'(pierwszy nawias kwadratowy) i jego pola o nazwie 'pierwszyWymiar'(drugi nawias kwadratowy), z którego pobieramy jego wartość(poprzez właściwość value).

W drugiej linijce przetwarzamy odczytane dane do postaci liczby rzeczywistej. Jeżeli w polu nie znajdowała się liczba nasza zmienna będzie przechowywała wartość 'NaN' - czyli Not a Number(to nie jest liczba). Wykorzystamy to za chwilę przy weryfikacji obu pól. Podobnie należy postąpić z drugim polem.

Zastanówmy się przez chwilę, jakie warunki muszą zostać spełnione, aby nasz skrypt mógł obliczyć powierzchnię oraz koszt malowania.

Po pierwsze w obu polach muszą znajdować się liczby. Po drugie, żadna z podanych wartości nie może być ujemna. Po trzecie żadna wartość nie może być równa 0. Uporządkujmy to

  1. zmienna pierwszyWymiar musi być liczbą
  2. zmienna drugiWymiar musi być liczbą
  3. zmienna pierwszyWymiar musi być większa od zera.
  4. zmienna drugiWymiar musi być większa od zera.

Jak sprawdzić czy zmienna przechowuje liczbę?

Krótkie przypomnienie: Odczytaliśmy wartość z pola formularza, a następnie za pomocą funkcji parseFloat() otrzymaliśmy albo liczbę rzeczywistą, albo wartość NaN. Wykorzystajmy to i sprawdzając funkcją isNaN() dowiemy się czy w obu zmiennych jest liczba, czy nie. W tej chwili mamy cztery osobne warunki, jak je połączyć? Zadaj sobie dodatkowe pytanie, czy wszystkie muszą być spełnione, czy wystarczy aby jeden z nich się nie zgadzał aby przerwać program?

Propozycja zapisania wszystkich warunków w jednej instrukcji warunkowej

Dalsza część pracy odbywać się będzie wewnątrz instrukcji else.

Obliczenia

Na początku zdefiniujemy zmienne, którym możemy przypisać stałe wartości, czyli wysokość pomieszczenia i cenę za metr kwadratowy. Następnie korzystając z wcześniej zdefiniowanych zmiennych obliczamy powierzchnię malowania i jego koszt.

Wyświetlanie

Do wyświetlenia naszych obliczeń wykorzystamy właściwość innerHTML, a elementy HTML pozyskamy poprzez metodę getElementById() obiektu document.

Ostatnie poprawki

Teraz wystarczy wszystko poskładać w całość i przetestować...Dokładnie przetestować. Na pewno zauważysz, że coś jest nie tak z wyświetlanymi liczbami. Proponuję w prosty sposób zmodyfikować obliczane wartości, tak aby wyświetlały nam się liczby z dokładnością do dwóch miejsc po przecinku. Nie jest to wymagane w zadaniu, jednak warto nauczyć się formatować wynik. Wykorzystamy metodę .toFixed(), która jako argument przyjmuje liczbę miejsc po przecinku, która ma się wyświetlać.  Metoda ta konwertuje liczbę na tekst(string) z zachowaniem tylu miejsc po przecinku ile otrzyma jako argument. Ważne jest również to, że niejako przy okazji zaokrągla nam otrzymany wynik. Wystarczy w dwóch miejscach zmodyfikować kod

Finał

Brawo, zadanie wykonane!

Jak skonfigurować folder macierzysty?

Jak skonfigurować folder macierzysty?

Jak skonfigurować folder macierzysty?

Jak automatyczne zmapować zasób folderu macierzystego użytkownika?

Dziś nauczysz się tworzyć folder macierzysty dla użytkownika domeny. Folder będzie automatycznie zmapowanym dyskiem widocznym po zalogowaniu się użytkownika na swoje konto. W ten sposób możemy przechowywać w jednym miejscu ważne pliki użytkownika, które ‘w locie’ będą synchronizowane z serwerem. Dodatkowo, folder macierzysty będzie domyślnym miejscem zapisywania plików.

Ustawienia początkowe:

Dla naszej wygody zaczynamy pracę w systemie w którym zainstalowano i skonfigurowano już:

  • DNS
  • kontroler domeny
  • DHCP
  • NAT

W skrócie: Użytkownik może zalogować się do domeny i automatycznie otrzymuje ustawienia swojego połączenia sieciowego oraz ma dostęp do Internetu, ale nie ma profilu mobilnego i nie ma gdzie przechowywać swoich plików. Będziemy potrzebowali również użytkownika, dla którego stworzymy folder macierzysty.

Folder macierzysty

Pierwszy etap, to podobnie jak w profilu mobilnym przygotowanie miejsca do przechowywania plików. Tworzymy folder, a następnie udostępniamy go jako ukryty zasób z uprawnieniami dla wszystkich. Tak jak na zrzutach poniżej.

Konfiguracja w profilu użytkownika

Teraz, kiedy już mamy gotowe miejsce, przejdźmy do konfiguracji użytkownika. W tym celu wywołaj narzędzie ‘Użytkownicy i komputery usługi Active Directory‘, rozwiń gałąź ze swoją domeną i przejdź do sekcji Users, tam gdzie znajduje się Twój użytkownik, któremy stworzymy folder macierzysty. Wywołaj właściwości użytkownika.

 

Przejdź na zakładkę ‘Profil‘ i w sekcję 'Folder macierzysty', przypisz literę dysku do mapowania(pole Podłącz) oraz wprowadź ścieżkę do miejsca, w którym przechowywany będzie folder macierzysty(pole Do).

folder macierzysty

Na końcu ścieżki dodaj zmienną %username%. Ta zmienna po kliknięciu ‘Zastosuj’ zmieni się na nazwę Twojego użytkownika. Teraz pozostało nam jedynie zalogować się na użytkownika, tak aby połączył się ze swoim nowym folderem macierzystym.Zwróć uwagę, że wszystko to, co użytkownik zapisuje w swoim zmapowanym dysku od razu ląduje na serwerze, zupełnie inaczej niż to było w przypadku profilu mobilnego.

Czy można połączyć cechy profilu mobilnego i folderu macierzystego?

Tak, ale o tym w kolejnym odcinku 😉 Teraz zobacz jak wygląda cała konfiguracja i przećwicz to sam.

Myślibórz – moje miasto.

Myślibórz – moje miasto.

Chciałbym pokazać kilka zdjęć z tegorocznej wystawy "Spacerkiem po Myśliborzu", która miała miejsce w Miejskiej i Powiatowej  Bibliotece Publicznej w Myśliborzu. Tym tematem zajmuję się od ponad 10 lat i wciąż poszukuję wspaniałych kadrów... Zdjęć tych samych miejsc w Myśliborzu mam tysiące, jednak kiedy poproszono mnie o zdjęcia na wystawę, ciężko mi było znaleźć tych dobrych choć kilka...naście;-) Więcej zdjęć Myśliborza - nie tylko moich - tu -> Galeria Myśliborska.

Ratusz w Myśliborzu przed 'reformą parkingową'
Myślibórz
Brama Nowogródzka w Myśliborzu
Baszta Prochowa Myślibórz
Myślibórz
Myślibórz

Pin It on Pinterest