Activity (aktywności np.guziki)

package igor.kalkulator;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

private TextView display;
private Operation operation;
private double firstNumber;
private Button decimal;
private boolean startOver = true;

private enum Operation {
ADD,
SUBTRACT,
MULTIPLY,
DIVIDE,
STARTOVER,
NONE,
POTEGA,
CZYSC,
PWK
}

public void operationButtonClick(View view) {
firstNumber = Double.parseDouble(display.getText().toString());
decimal.setEnabled(true);
display.setText("");
switch (view.getId()) {
case R.id.add:
operation = Operation.ADD;
break;
case R.id.pwk:
display.setText(Math.sqrt(firstNumber) + "");
case R.id.multiply:
operation = Operation.MULTIPLY;
break;
case R.id.subtract:
operation = Operation.SUBTRACT;
break;
case R.id.divide:
operation = Operation.DIVIDE;
break;
case R.id.potega:
operation = Operation.POTEGA;
break;
case R.id.czysc:
operation = Operation.CZYSC;
break;
}
}

public void equalButtonClick(View view) {
decimal.setEnabled(true);
double secondNumber = Double.parseDouble(display.getText().toString());

switch (operation) {
case ADD:
firstNumber += secondNumber;
break;
case SUBTRACT:
firstNumber -= secondNumber;
break;
case MULTIPLY:
firstNumber *= secondNumber;
break;
case DIVIDE:
firstNumber /= secondNumber;
break;
case POTEGA:
firstNumber = Math.pow(firstNumber, secondNumber);
break;
case CZYSC:
display.setText("0");
break;
default:
firstNumber = secondNumber;
}
display.setText(firstNumber + "");
operation = Operation.STARTOVER;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// This is to tell the Activity what layout to use
setContentView(R.layout.activity_main);
display = (TextView) findViewById(R.id.display);
operation = Operation.STARTOVER;
decimal = (Button) findViewById(R.id.decimal);
}

public void numberButtonClick(View view) {
Button button = (Button) view;
if (operation == Operation.STARTOVER) {
display.setText("");
operation = Operation.NONE;
}
if (button.getText().equals(".") || display.getText().toString().contains("."))
decimal.setEnabled(false);
display.append(button.getText() + "");
}


}

Kalkulator layout (wygląd)

<?xml version="1.0"?>

-<RelativeLayout tools:context=".MainActivity" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:tools="http://schemas.android.com/tools" xmlns:android="http://schemas.android.com/apk/res/android">

<TextView android:layout_height="100dp" android:layout_width="match_parent" android:maxLength="11" android:ellipsize="none" android:singleLine="true" android:id="@+id/display" android:textSize="32sp" android:background="#ddd" android:text="0" android:gravity="center_vertical|end" android:padding="16dp"/>


-<LinearLayout android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/vertical" android:layout_below="@+id/display" android:orientation="vertical">


-<LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/row0" android:orientation="horizontal" android:layout_weight="1">

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button7" android:textSize="@dimen/text_size" android:text="1" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button8" android:textSize="@dimen/text_size" android:text="2" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button9" android:textSize="@dimen/text_size" android:text="3" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/divide" android:textSize="@dimen/text_size" android:text="÷" android:layout_weight="1" android:onClick="operationButtonClick"/>

</LinearLayout>


-<LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/row1" android:orientation="horizontal" android:layout_weight="1">

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button4" android:textSize="@dimen/text_size" android:text="4" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button5" android:textSize="@dimen/text_size" android:text="5" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button6" android:textSize="@dimen/text_size" android:text="6" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/multiply" android:textSize="@dimen/text_size" android:text="×" android:layout_weight="1" android:onClick="operationButtonClick"/>

</LinearLayout>


-<LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/row2" android:orientation="horizontal" android:layout_weight="1">

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button3" android:textSize="@dimen/text_size" android:text="7" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button2" android:textSize="@dimen/text_size" android:text="8" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button1" android:textSize="@dimen/text_size" android:text="9" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/subtract" android:textSize="@dimen/text_size" android:text="-" android:layout_weight="1" android:onClick="operationButtonClick"/>

</LinearLayout>


-<LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/row3" android:orientation="horizontal" android:layout_weight="1">

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/button0" android:textSize="@dimen/text_size" android:text="0" android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/decimal" android:textSize="@dimen/text_size" android:text="." android:layout_weight="1" android:onClick="numberButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/equals" android:textSize="@dimen/text_size" android:text="=" android:layout_weight="1" android:onClick="equalButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/add" android:textSize="@dimen/text_size" android:text="+" android:layout_weight="1" android:onClick="operationButtonClick"/>

</LinearLayout>


-<LinearLayout android:layout_height="wrap_content" android:layout_width="fill_parent" android:id="@+id/row4" android:orientation="horizontal" android:layout_weight="1">

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/czysc" android:textSize="@dimen/text_size" android:text="Czyść" android:layout_weight="1" android:onClick="operationButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/potega" android:textSize="@dimen/text_size" android:text="x^" android:layout_weight="1" android:onClick="operationButtonClick"/>

<Button android:layout_height="match_parent" android:layout_width="wrap_content" android:id="@+id/pwk" android:textSize="@dimen/text_size" android:text="√" android:layout_weight="1" android:onClick="operationButtonClick"/>

</LinearLayout>

</LinearLayout>

</RelativeLayout>

Etap2Logia14

Zadania drugiego etapu Konkursu Informatycznego dla gimnazjalistów LOGIA 14

Zadanie 1 (Szyfr schodkowy).

Kolejnym literom alfabetu łacińskiego odpowiadają obrazki przedstawione na rysunkach poniżej:

Napisz dwuparametrową procedurę/funkcję szyfruj, której efektem wywołania jest rysunek odpowiadający słowu (pierwszemu parametrowi funkcji). Słowo składa się z małych liter alfabetu łacińskiego (od 2 do 20 znaków). Drugi parametr to liczba naturalna (od 2 do 20), oznaczająca wysokość tworzonych schodków. Rysunek powinien być na środku ekranu i mieć kształt schodków, jak w przykładach. Szerokość rysunku wynosi 760 lub wysokość wynosi 480.

Rysunki poniżej przedstawiają efekt wywołania:


w Logo – szyfruj "programowanie 3, w Pythonie – szyfruj("programowanie",3)

>

w Logo – szyfruj "dokumentygoogle 5, w Pythonie – szyfruj("dokumentygoogle",5)

Zadanie 2 (Pole robota).

Robot chodzi po płaszczyźnie, w każdym kroku przebywa jednostkową odległość w jednym z czterech podstawowych kierunków: góradółprawo, bądź lewo, które oznaczone są, odpowiednio, literami gdp oraz l.

Napisz funkcję poler, której parametrem jest słowo określające trasę robota, a wynikiem – pole najmniejszego prostokąta, o pionowych i poziomych bokach, zawierającego całą trasę.

w Logo:
Wynikiem poler "ggdp jest 2,
Wynikiem poler "lllgpdddd jest 12,
w Pythonie:
Wynikiem poler("ggdp") jest 2,
Wynikiem poler("lllgpdddd") jest 12,

Zadanie 3 (Gwiazda).

Gwiazdowo ma promienistą strukturę ulic, co powoduje, że z każdej dzielnicy istnieje tylko jedna droga do Centrum. Każdy mieszkaniec zna drogę i koszt dojazdu ze swojej dzielnicy do Centrum. Są one zakodowane słowem składającym się z par złożonych z litery oznaczającej dzielnicę i cyfry określającej koszt przejazdu kolejnego odcinka. Na przykład, jeśli takim kodem jest D3E5J8, to odczytujemy, że łączny koszt dojazdu z D do Centrum to 3+5+8=16.

Napisz dwuparametrową funkcję kosp, której wynikiem jest minimalny koszt zorganizowania spotkania dwóch mieszkańców miasta (czyli łączny koszt ich dojazdu do określonej dzielnicy). Oba parametry są słowami, oznaczającymi drogę i koszt dojazdu do Centrum, odpowiednio, każdego z dwóch mieszkańców.

w Logo – wynikiem kosp "D3E5J8 "H3I2E4J6 jest 8,
w Pythonie - wynikiem kosp("D3E5J8","H3I2E4J6") jest 8.
(spotkanie poza Centrum),
w Logo – wynikiem kosp "A3T5U6 "B4G1Y4 jest 23,
w Pythonie - wynikiem kosp("A3T5U6","B4G1Y4") jest 23.
(spotkanie w Centrum).

 

Oto przykładowe rozwiązania zadań : 

Zadanie 2

Zadanie 3

Etap2Logia12

Zadania drugiego etapu Konkursu Informatycznego dla gimnazjalistów LOGIA 12

Zadanie 1 (Obrazkowa liczba).

Kolejnym cyfrom odpowiadają obrazki przedstawione na rysunkach poniżej:

0 1 2 3 4 5 6 7 8 9

Napisz procedurę OL :s, która tworzy na środku ekranu rysunek zaszyfrowanej liczby reprezentowanej przez parametr :s. Parametr :s jest słowem złożonym z minimalnie 2, a maksymalnie 40 cyfr. Odstęp pomiędzy szyfrowanymi cyframi wynosi połowę szerokości cyfry 0. Szerokość całego rysunku wynosi 720.

Rysunek poniżej przedstawia efekt wywołania OL 45432

Zadanie 2 (Ile cyfr).

Napisz funkcję IleCyfr :liczba :podstawa, której wynikiem jest liczba cyfr liczby podanej jako pierwszy parametr w układzie o podstawie podanej jako drugi parametr. Parametr :liczba jest nieujemną liczbą całkowitą zapisaną w układzie dziesiętnym nie większą niż 1020, parametr :podstawa jest liczbą całkowitą większą od 1 i mniejszą niż 17.

Wynikiem IleCyfr 123456 10 jest 6,
Wynikiem IleCyfr 1 5 jest 1,
Wynikiem IleCyfr 255 2 jest 8,
Wynikiem IleCyfr 255 16 jest 2.

Zadanie 3 (Miasta).

Alicja, Tomek i Zuzanna planują wakacyjny wyjazd. Podczas podróży odwiedzą od 2 do 7 miejscowości. Ustalili już wspólną listę tych miejscowości, mają jednak problem z wyborem kolejności odwiedzanych miejsc. Każde z dzieci ma swoje preferencje.

Na przykład Alicja chce odwiedzić najpierw Poznań, potem Łódź i Kraków, a na końcu Warszawę (PŁKW). Tomek chce odwiedzić najpierw Warszawę, potem Poznań, następnie Łódź, na końcu Kraków (WPŁK). Zuzanna chciałaby, żeby zacząć od Poznania, potem pojechać do Warszawy, Krakowa, a Łódź zostawić na koniec (PWKŁ).

Pomóż im podjąć decyzję tak, aby zaproponowana kolejność odwiedzania miast różniła się jak najmniej od preferowanej przez każdego uczestnika wycieczki. Ocenę rozwiązania znajdujemy licząc łączną liczbę par miast występujących w dwóch propozycjach w innej kolejności.

Na przykład kolejność Alicji to PŁKW, Tomka - WPŁK Zuzanny - PWKŁ. Najlepsza ocena (minimalna łączna liczba zmian kolejności miejscowości) to 4, a najlepszy wybór to PWŁK, ponieważ dla Alicji oznacza to dwie zmiany kolejności (Kraków - Warszawa i Łódź - Warszawa), dla Tomka jedną (Warszawa - Poznań) i dla Zuzanny też jedną (Kraków - Łódź).

Napisz funkcję Miasta :A :T :Z, której wynikiem dla danej preferencji trójki osób będzie słowo reprezentujące kolejność odwiedzanych miejscowości o najlepszej ocenie. Jeśli kilka kolejności ma taką samą ocenę, wynikiem funkcji może być dowolna z nich.

Parametry :A, :T, :Z (a także wynik funkcji) są słowami tej samej długości reprezentującymi kolejność odwiedzania miejscowości, wszystkie dzieci wskazują te same miejscowości reprezentowane przez pojedyncze litery. Nazwy miejscowości zaczynają się od różnych liter.

Wynikiem Miasta "PŁKW "WPŁK "PWKŁ jest PWŁK,
Wynikiem Miasta "TSG "TGS "GST jest TGS.

Oto przykładowe rozwiązania zadań : 

Zadanie 1