Palindromy. Przykładowe rozwiązanie

Podobne dokumenty
Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

Ilość cyfr liczby naturalnej

ZBIÓR ZADAŃ Z INFORMATYKI

Przeliczanie na zapis stałoprzecinkowy

Funkcje i instrukcje języka JavaScript

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Aplikacje WWW - laboratorium

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Całkowanie numeryczne - metoda prostokątów

Podstawy Programowania

Podstawy JavaScript ćwiczenia

Zaawansowane aplikacje internetowe

2.8. Algorytmy, schematy, programy

Zadania język C++ Zad. 1. Napisz program wczytujący z klawiatury wiek dwóch studentów i wypisujący informację o tym, który z nich jest starszy.

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Instrukcje cykliczne (pętle) WHILE...END WHILE

Liczby pierwsze - generacja liczb pierwszych

Język ludzki kod maszynowy

Pytania sprawdzające wiedzę z programowania C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

lekcja 8a Gry komputerowe MasterMind

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Całkowanie numeryczne - metoda Simpsona

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

EGZAMIN MATURALNY Z INFORMATYKI

Zdarzenia Zdarzenia onload i onunload

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

wagi cyfry pozycje

PRÓBNY EGZAMIN MATURALNY Z INFORMATYKI STYCZEŃ Arkusz I. Czas pracy: 60 minut Liczba punktów do uzyskania: 15

Aplikacje WWW - laboratorium

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Programowanie. Projektowanie funkcje programu tworzenie algorytmu i struktur danych. Programowanie implementacja algorytmu kompilacja programu

SCHEMAT OCENIANIA poziom rozszerzony arkusz II

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

EGZAMIN MATURALNY Z INFORMATYKI 13 MAJA 2019 POZIOM PODSTAWOWY. Godzina rozpoczęcia: 14:00 CZĘŚĆ I WYBRANE: Czas pracy: 75 minut

Jerzy Nawrocki, Wprowadzenie do informatyki

Lekcja 6: Pascal. Procedura i funkcja

Podstawy programowania. Wykład: 11. Trochę różnych przykładów. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Programowanie - wykład 4

Miejsca zerowe funkcji - Metoda Newtona

Zasady programowania Dokumentacja

Podstawy informatyki

Zajęcia 4 - Wprowadzenie do Javascript

Algorytm. a programowanie -

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Podstawy Programowania Podstawowa składnia języka C++

Aplikacje geodezyjne

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

LibreOffice Calc VBA

Program szkolenia PODSTAWY VBA (VISUAL BASIC FOR APPLICATIONS) I FORMULARZE.

Plik->Opcje->Zakladka Główne->Dostosuj Wstążkę Zaznaczamy kwadracik Developer na liscie po prawej stronie. Klikamy OK.

Miejsca zerowe funkcji - Metoda połowienia

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Wykład 03 JavaScript. Michał Drabik

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Podstawy Programowania Algorytmy i programowanie

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Aplikacje WWW - laboratorium

3. Instrukcje warunkowe

Laboratorium 1 Wprowadzenie do PHP

Jerzy Nawrocki, Wprowadzenie do informatyki

1. Wprowadzenie do C/C++

Ten odcinek Akademii PC Kuriera poświęcony zostanie tworzeniu i wykorzystaniu funkcji i procedur w języku Visual Basic.NET.

Tablice i struktury. czyli złożone typy danych. Programowanie Proceduralne 1

Struktury Struktura polami struct struct struct struct

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Dokumentacja Skryptu Mapy ver.1.1

Technologie informacyjne

JAVAScript w dokumentach HTML (2)

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Pętle instrukcje powtórzeo

Technologie cyfrowe semestr letni 2018/2019

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Liczby pierwsze - sito Eratostenesa

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Zapis algorytmów: schematy blokowe i pseudokod 1

Przykład integracji kalkulatora mbank RATY na platformie IAI

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

JAVAScript tablice, przekazanie danych do funkcji, obiekty Date i window

7. Pętle for. Przykłady

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

Obliczenie azymutów ze współrzędnych punktów tablica struktur punktów, tablica struktur azymutów

Wstęp do programowania

Informatyka 1. Przetwarzanie tekstów

Instrukcje wyboru. Tworzenie programu, Schematy blokowe, Instrukcje wyboru, Operatory logiczne

1 Algorytmy. Algorytmy i VBA. 1. Zapoznaj się z symboliką schematów blokowych.

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Sortowanie stogowe Heap Sort

Ćwiczenie VB3.4 Struktura Try...Catch, obiekt Err, metoda Err.Raise (Strukturalna obsługa wyjątków)

Programowanie komputerowe. Zajęcia 1

Obiektowe bazy danych

01 grid tablica grid. Copyright 2017, mgr inż. Janusz Bonarowski 1

SCHEMAT OCENIANIA poziom rozszerzony arkusz I

1. Wprowadzenie do C/C++

Języki formalne i techniki translacji

Transkrypt:

Palindromy Palindromem (z greckiego) nazywamy wyraz, który tak samo brzmi, gdy jest czytany wspak. Palindromami są na przykład takie wyrazy, jak kajak, zaraz, oko, zakaz, mam itp. Użytkownik wprowadza ciąg znaków s. Podaj algorytm sprawdzania, czy s jest palindromem. (Np.: po wprowadzeniu ciągu znaków kajak w programie powinien pojawić się komunikat tak, natomiast po wprowadzeniu ciągu znaków canoe powinien pojawić się komunikat nie ). Specyfikacja algorytmu: Dane wejściowe: ciąg znaków s Dane wyjściowe: komunikat tak lub nie w zależności od tego, czy s jest palindromem a) Przedstaw ten algorytm w formie opisu kolejnych kroków. b) Zaprezentuj ten algorytm w formie schematu blokowego. c) Napisz program realizujący ten algorytm w wybranym przez siebie języku programowania (Pascal, C lub C++). Oto przykład działania takiego programu: Podaj ciąg znaków: kajak Tak Podaj ciąg znaków: canoe Nie d) Zaimplementuj ten algorytm w formie programu w języku Visual Basic lub skryptu w języku JavaScript. Oto przykładowy projekt takiej aplikacji (poniżej po lewej) oraz komunikat, jaki powinien pojawić się po kliknięciu na przycisku (poniżej po prawej): Przykładowe rozwiązanie Poniższe rozwiązanie opiera się użyciu dwóch pomocniczych zmiennych (oznaczmy je przez i oraz j), które oznaczają pozycje znaków w ciągu. Na początku ustawiamy i na początku wyrazu, zaś j na jego końcu. Porównujemy znaki znajdujące się na tych miejscach i jeśli się zgadzają, wtedy i powiększamy o 1, zaś j zmniejszamy o 1, sprawdzamy znaki itd. Procedurę sprawdzania kontynuujemy, jeśli i jest mniejsze od j nastąpi taki moment, gdy i zrówna się z j lub go przekroczy (zależy to od parzystości liczby znaków w ciągu). Jeśli w jakimkolwiek momencie napotkamy na rozbieżność, czyli różne znaki na miejscach i oraz j, wtedy przerywamy sprawdzanie sprawdzany ciąg nie jest palindromem. Jeśli natomiast sprawdzanie dobiegło spokojnie do końca, wówczas ciąg jest palindromem.

Ponadto będzie nam potrzebna funkcja zwracająca długość ciągu znaków przyjmiemy, iż nazywa się ona po prostu długość. Przez s[i] oznaczać będziemy i-ty znak ciągu i założymy, że znaki ciągu s numerowane są od 1 do długość(s). Specyfikację algorytmu uzupełniamy o poniższy zapis: Zmienne pomocnicze: Funkcja pomocnicza: Notacja: liczby naturalne i, j długość jej argumentem jest ciąg znaków, zwraca długość (ilość znaków) tego ciągu s[i] i-ty znak ciągu s znaki w ciągu numerowane są od 1 Opis kolejnych kroków pkt a) Krok 1: Wczytaj ciąg znaków s. Krok 2: Krok 3: Krok 4: Zmiennej i przypisz wartość 1, zaś zmiennej j przypisz wartość długość(s). Jeśli i jest większe lub równe j, wtedy wypisz komunikat tak i zakończ działanie algorytmu. Jeśli s[i] jest różne od s[j], wtedy wypisz komunikat nie i zakończ działanie algorytmu. Krok 5: Powiększ o 1 zmienną i oraz pomniejsz o 1 zmienną j. Krok 6: Przejdź do kroku 3. Schemat blokowy pkt b) Start Wczytaj s i 1 j długość(s) NIE i j? TAK NIE s[i] s[j]? TAK Wypisz tak i i + 1 j j 1 Wypisz nie Stop

Program w języku Pascal pkt c) program Palindrom; Sprawdzanie, czy wprowadzony ciąg znaków jest palindromem var s: string; i, j: integer; write('podaj ciąg znaków: '); readln(s); i := 1; numer pierwszego znaku j := length(s); numer ostatniego znaku while i<j do if s[i]<>s[j] then znaki różnią się writeln('nie'); halt end; sprawdzamy dalej i := i+1; j := j-1 end; sprawdzenie dobiegło pomyślnie do końca writeln('tak') end. Program w języku C++ pkt c) // Sprawdzanie, czy wprowadzony ciąg znaków jest palindromem #include <iostream> #include <string> // największa długość ciągu znaków #define MAX 100 main() char s[max+1]; // dodajemy jedno miejsce // na znak zakończenia cout << "Podaj ciąg znaków: "; cin >> s; int i, j; i = 0; // numer pierwszego znaku j = strlen(s)-1; // numer ostatniego znaku while(i<j) if(s[i]!=s[j]) // znaki różnią się cout << "Nie\n"; exit(0); // sprawdzamy dalej i++; j--; // sprawdzenie dobiegło pomyślnie do końca cout << "Tak\n"; Uwaga: Wartości początkowe zmiennych i oraz j są nieco modyfikowane ze względu na inny sposób numeracji elementów tablicy w języku C++.

Program w języku Visual Basic pkt d) Pole tekstowe, na którym użytkownik wpisuje ciąg znaków, jest oznaczone jako Text1. Przycisk uruchamiający procedurę sprawdzajacą jest oznaczony jako Command1. Komunikat jest wyświetlany przy użyciu procedury MsgBox. Oto procedura stowarzyszona z przyciskiem Command1: Private Sub Command1_Click() Dim s, i, j ' odczytanie wprowadzonych danych s = Text1.Text ' numer pierwszego znaku i = 1 ' numer ostatniego znaku j = Len(s) Do While i < j If Mid(s, i, 1) <> Mid(s, j, 1) Then ' znaki różnią się MsgBox ("Nie") Exit Sub End If ' sprawdzamy dalej i = i + 1 j = j - 1 Loop ' sprawdzenie dobiegło pomyślnie do końca MsgBox ("Tak") End Sub Uwaga: Użycie funkcji Mid umożliwia dostęp do poszczególnych fragmentów ciągu znaków w tym przypadku do pojedynczych znaków. Program w języku JavaScript pkt d) Prezentujemy kompletny kod HTML strony WWW będącej rozwiązaniem zadania: <html> <head> <script language=javascript> function sprawdz() // odczytanie wprowadzonych danych var s = document.form1.wyraz.value; var i = 0; // numer pierwszego znaku var j = s.length-1; // numer ostatniego znaku while(i<j) if(s.charat(i)!=s.charat(j)) // znaki różnią się alert("nie"); return; // sprawdzamy dalej i++; j--; // sprawdzenie dobiegło pomyślnie do końca

alert("tak"); </script> </head> <body> <h1 align=center>palindromy</h1> <center> <form name=form1> Podaj wyraz: <input type=text size=30 name=wyraz> <br><br> <input type=button value="sprawdź czy jest palindromem" onclick=sprawdz()> </form> </center> </body> </html> Uwaga: Funkcja (czy raczej metoda) charat umożliwia dostęp do pojedynczych znaków w ciągu.