Reaali Robootika.COM

NXT robotimaailm ja programmeerimine C-keeles

Windows Phone – EASE funktsioonid

EASE-funktsioonid on Silverlightis välja töötatud spetsiaalsete matemaatiliste algoritmidega funktsioonid, mis võimaldavad lihtsal moel objekte erilisel viisil liikuma ja põrkama panna.

Alljärgnevas näites on realiseeritud 4 kõige silmapaistvamat EASE funktsiooni, milleks on

·         BackEase

image

·         BounceEase

image

·         ElasticEase

image

·         ExponentialEase

image

Täpsemalt leiad Ease funktsioonide kohta siit lehelt: http://msdn.microsoft.com/en-us/library/ee308751.aspx 

Vaata kõigepealt antud rakenduse videot, et tekiks parem arusaamine antud funktsioonide eripäradest.

Windows Phone - how Ease functions working

MainPage.xaml

<phone:PhoneApplicationPage
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
   xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   xmlns:Microsoft_Advertising_Mobile_UI="clr-namespace:Microsoft.Advertising.Mobile.UI;assembly=Microsoft.Advertising.Mobile.UI"
   x:Class="PhoneApp1.MainPage"
   mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
   SupportedOrientations="Portrait" Orientation="Portrait"
   shell:SystemTray.IsVisible="True">

      <Grid x:Name="LayoutRoot" Background="Transparent">
        
        <Canvas>
            <Canvas.Resources>
                <Storyboard x:Name="myStoryboard" Completed="myStoryboard_Completed">
                    <DoubleAnimation x:Name="RectangleAnimation" From="0" To="300" Duration="00:00:04"
                                    Storyboard.TargetName="Myrectangle"
                                    Storyboard.TargetProperty="(Canvas.Top)"
                                    >
                                        </DoubleAnimation>
                    <DoubleAnimation x:Name="RectangleAnimation1" From="650" To="351" Duration="00:00:04"
                                    Storyboard.TargetName="Myrectangle1"
                                    Storyboard.TargetProperty="(Canvas.Top)"
                                    >
                    </DoubleAnimation>
                    <DoubleAnimation x:Name="RingAnimationX" From="0" To="1"
                                    Duration="00:00:04"
                                    Storyboard.TargetName="Ring"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)"
                                    >
                    </DoubleAnimation>
                    <DoubleAnimation x:Name="RingAnimationY" From="0" To="1"
                                    Duration="00:00:04"
                                    Storyboard.TargetName="Ring"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" >
                    </DoubleAnimation>
                    <DoubleAnimation x:Name="SliderRotation1" From="0" To="360"
                                    Duration="00:00:06"
                                    Storyboard.TargetName="slider1"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" >
                    </DoubleAnimation>
                    <DoubleAnimation x:Name="SliderRotation2" From="0" To="360"
                                    Duration="00:00:03"
                                    Storyboard.TargetName="slider2"
                                    Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" >
                    </DoubleAnimation>

                </Storyboard>
                <Storyboard x:Name="ProgressStoryBoard">
                    <DoubleAnimation x:Name="Progressbar" From="0" To="100"
                                    Duration="00:00:06"
                                    Storyboard.TargetName="progressBar1"
                                    Storyboard.TargetProperty="Value" >
                    </DoubleAnimation>
                </Storyboard>
            </Canvas.Resources>
            <Rectangle x:Name="Myrectangle" Width="50" Height="50" VerticalAlignment="Center" Canvas.Left="27" Canvas.Top="0" Fill="Blue" RadiusX="10" RadiusY="10" />
            <Rectangle x:Name="Myrectangle1" Width="50" Height="50" VerticalAlignment="Center" Canvas.Left="27" Canvas.Top="650" Fill="Red" RadiusX="10" RadiusY="10" />
            <RadioButton Canvas.Left="235" Canvas.Top="6" Content="Back Ease" Height="71" Name="backEase" Width="245" GroupName="EaseRadio" Checked="backEase_Checked" />
            <RadioButton Canvas.Left="235" Canvas.Top="77" Content="Bounce Ease" Height="71" Name="bounceEase" Width="245" GroupName="EaseRadio" Checked="bounceEase_Checked" />
            <RadioButton Canvas.Left="235" Canvas.Top="154" Content="Elastic Ease" Height="71" Name="elasticEase" Width="245" GroupName="EaseRadio" Checked="elasticEase_Checked" />
            <RadioButton Canvas.Left="235" Canvas.Top="231" Content="Exponential" Height="71" Name="exponentialEase" Width="245" GroupName="EaseRadio" Checked="exponentialEase_Checked" />
            <Slider Canvas.Left="235" Canvas.Top="360" Height="344" Name="slider1" Width="80" Orientation="Vertical" Visibility="Visible" SmallChange="0.5" ValueChanged="slider1_ValueChanged" RenderTransformOrigin="0.5,0.5">
                <Slider.RenderTransform>
                    <CompositeTransform Rotation="0"></CompositeTransform>
                </Slider.RenderTransform>
            </Slider>
            <Slider Canvas.Left="329" Canvas.Top="360" Height="344" Name="slider2" Width="80" Orientation="Vertical" SmallChange="0.5" ValueChanged="slider2_ValueChanged" RenderTransformOrigin="0.5,0.5">
                <Slider.RenderTransform>
                    <CompositeTransform Rotation="0"></CompositeTransform>
                </Slider.RenderTransform>
            </Slider>
            <TextBlock Canvas.Left="170" Canvas.Top="309" Height="46" Name="textBlock1" Width="145" TextAlignment="Center" FontSize="24" />
            <TextBlock Canvas.Left="329" Canvas.Top="309" Height="46" Name="textBlock2" Width="145" TextAlignment="Center" FontSize="24" />
            <TextBlock Canvas.Left="235" Canvas.Top="710" Height="51" Name="textBlock11" Width="80" TextAlignment="Center" />
            <TextBlock Canvas.Left="329" Canvas.Top="710" Height="51" Name="textBlock22" Width="80" TextAlignment="Center" />
            <Button Canvas.Left="98" Canvas.Top="697" Content="RUN" Height="71" Name="button1" Width="131" Click="button1_Click" />
            <Ellipse RenderTransformOrigin="0.5,0.5" Height="100" x:Name="Ring" Canvas.Left="117" StrokeStartLineCap="Round" StrokeEndLineCap="Square" StrokeThickness="10" Canvas.Top="607" Width="96">
                <Ellipse.RenderTransform>
                    <CompositeTransform ScaleX="0" ScaleY="0"></CompositeTransform>
                </Ellipse.RenderTransform>
                <Ellipse.Fill>
                    <RadialGradientBrush GradientOrigin="0.23,0.3">
                        <GradientStop Color="Black" Offset="1"/>
                        <GradientStop Color="White"/>
                    </RadialGradientBrush>
                </Ellipse.Fill>
            </Ellipse>
            <ProgressBar Canvas.Left="0" Canvas.Top="350" Height="1" Name="progressBar1" Width="460" Value="0" Background="White" Foreground="Red" >
            </ProgressBar>
        </Canvas>
    </Grid
>

</
phone:PhoneApplicationPage
>

MainPage.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;


namespace PhoneApp1
{
    public partial class MainPage : PhoneApplicationPage
    {
        int MyRadio = 0;

        public MainPage()
        {
            InitializeComponent();
        }
        private void backEase_Checked(object sender, RoutedEventArgs e)
        {
            //kuvatakse peidetakse vajalikud sliderid ja numbrite näitamised
            slider1.Visibility = Visibility.Visible;
            slider2.Visibility = Visibility.Collapsed;
            textBlock2.Visibility = Visibility.Collapsed;
            textBlock22.Visibility = Visibility.Collapsed;
            textBlock1.Text = "Amplituud";
            //algväärtustatakse slider
            slider1.Value = 1;
            //switchi jaoks määratud nupuvajutus
            MyRadio = 1;
        }

        private void bounceEase_Checked(object sender, RoutedEventArgs e)
        {
            slider1.Visibility = Visibility.Visible;
            slider2.Visibility = Visibility.Visible;
            textBlock2.Visibility = Visibility.Visible;
            textBlock22.Visibility = Visibility.Visible;
            textBlock1.Text = "Põrkeid";
            textBlock2.Text = "Tugevus";
            slider1.Value = 6;
            slider2.Value = 2;
            MyRadio = 2;
        }

        private void elasticEase_Checked(object sender, RoutedEventArgs e)
        {
            slider1.Visibility = Visibility.Visible;
            slider2.Visibility = Visibility.Visible;
            textBlock2.Visibility = Visibility.Visible;
            textBlock22.Visibility = Visibility.Visible;
            textBlock1.Text = "Võnkeid";
            textBlock2.Text = "Vetruvus";
            slider1.Value = 3;
            slider2.Value = 1;
            MyRadio = 3;
        }

        private void exponentialEase_Checked(object sender, RoutedEventArgs e)
        {
            slider1.Visibility = Visibility.Visible;
            slider2.Visibility = Visibility.Collapsed;
            textBlock2.Visibility = Visibility.Collapsed;
            textBlock22.Visibility = Visibility.Collapsed;
            textBlock1.Text = "Exponentsiaalsus";
            slider1.Value = 6;
            MyRadio = 4;
        }
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            switch (MyRadio)
            {
                case 1:
                    BackEase be = new BackEase();
                    be.Amplitude = Convert.ToDouble(slider1.Value);
                    be.EasingMode = EasingMode.EaseOut;
                    RectangleAnimation.EasingFunction = be;
                    RectangleAnimation1.EasingFunction = be;
                    RingAnimationX.EasingFunction = be;
                    RingAnimationY.EasingFunction = be;
                    SliderRotation1.EasingFunction = be;
                    SliderRotation2.EasingFunction = be;
                    break;
                case 2:
                    BounceEase boe = new BounceEase();
                    boe.Bounces = Convert.ToInt32(slider1.Value);
                    boe.Bounciness = Convert.ToDouble(slider2.Value);
                    boe.EasingMode = EasingMode.EaseOut;
                    RectangleAnimation.EasingFunction = boe;
                    RectangleAnimation1.EasingFunction = boe;
                    RingAnimationX.EasingFunction = boe;
                    RingAnimationY.EasingFunction = boe;
                    SliderRotation1.EasingFunction = boe;
                    SliderRotation2.EasingFunction = boe;
                    break;
                case 3:
                    ElasticEase ee = new ElasticEase();
                    ee.Oscillations = Convert.ToInt32(slider1.Value);
                    ee.Springiness = Convert.ToDouble(slider2.Value);
                    ee.EasingMode = EasingMode.EaseOut;
                    RectangleAnimation.EasingFunction = ee;
                    RectangleAnimation1.EasingFunction = ee;
                    RingAnimationX.EasingFunction = ee;
                    RingAnimationY.EasingFunction = ee;
                    SliderRotation1.EasingFunction = ee;
                    SliderRotation2.EasingFunction = ee;
                    break;
                case 4:
                    ExponentialEase xe = new ExponentialEase();
                    xe.Exponent = Convert.ToInt32(slider1.Value);
                    xe.EasingMode = EasingMode.EaseOut;
                    RectangleAnimation.EasingFunction = xe;
                    RectangleAnimation1.EasingFunction = xe;
                    RingAnimationX.EasingFunction = xe;
                    RingAnimationY.EasingFunction = xe;
                    SliderRotation1.EasingFunction = xe;
                    SliderRotation2.EasingFunction = xe;
                    break;
            }
            ProgressStoryBoard.Begin();
            myStoryboard.Begin();
            }
        private void myStoryboard_Completed(object sender, EventArgs e)
        {
            //myStoryboard.Stop();
        }

        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            textBlock11.Text = slider1.Value.ToString("0.00");
        }

        private void slider2_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            textBlock22.Text = slider2.Value.ToString("0.00");
        }
    }
}

Windows Phone – CompositeTransform

Käesolev programminäide iseloomustab seda, kuidas lihtsal moel panna pildid liikuma CompositeTransform funktsiooni abil. Nihutades ekraanil olevaid slaidereid, liigub pilt kas üles-alla, pöörab kohapeal või venitatakse seda x-telje suunas laiemaks-kitsamaks.

CompositeTransform võimaldab järgmisi funktsioone rakendada:

·         Objekti liigutamine x või y telje suunal – TranslateX, TranslateY

·         Objekti suuruse muutmine x või y suunal – scaleX, scaleY

·         Objekti pööramine – Rotation

·         Objekti kuju muutmine – SkewX, SkewY

CompositeTransform kohta leiab siit MSDN artiklist lugemist: http://msdn.microsoft.com/en-us/library/system.windows.media.compositetransform(v=vs.95).aspx 

Vaata videost mida alltoodud rakendus teeb.

Windows Phone Composite Transform

MainPage.xaml

<phone:PhoneApplicationPage
   x:Class="Phone_Liikuvad_pildid.MainPage"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
   xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
   FontFamily="{StaticResource PhoneFontFamilyNormal}"
   FontSize="{StaticResource PhoneFontSizeNormal}"
   Foreground="{StaticResource PhoneForegroundBrush}"
   SupportedOrientations="Portrait" Orientation="Portrait"
   shell:SystemTray.IsVisible="True">

    <Grid x:Name="LayoutRoot" Background="{StaticResource PhoneBackgroundBrush}">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <Slider Height="84" HorizontalAlignment="Left" Margin="12,6,0,0" Name="slider1" VerticalAlignment="Top" Width="438" ValueChanged="slider1_ValueChanged" Minimum="0" Maximum="3" SmallChange="0.5" />
            <Slider Height="84" HorizontalAlignment="Left" Margin="12,96,0,0" Name="slider2" VerticalAlignment="Top" Width="438" ValueChanged="slider2_ValueChanged" Maximum="720" />
            <Slider Height="594" HorizontalAlignment="Left" Margin="12,124,0,0" Name="slider3" VerticalAlignment="Top" Width="67" ValueChanged="slider3_ValueChanged" Orientation="Vertical" Maximum="400" />
            <Image HorizontalAlignment="Left" Margin="125,556,0,0" Name="MSlogoPilt" Stretch="Fill" VerticalAlignment="Top" Source="/Phone%20Liikuvad%20pildid;component/MSLogo.jpg" RenderTransformOrigin="0.5,0.5" Height="162" Width="236" />
        </Grid>
    </Grid
>

</
phone:PhoneApplicationPage
>

MainPage.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace Phone_Liikuvad_pildid
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            //antakse slideritele algväärtused
            slider1.Value = 1;
            slider3.Value = 200;
        }
        private void MoveImage() {
            //loetakse slideritest info
            double scaleX = slider1.Value;
            double Rotation = slider2.Value;
            double TranslateY = slider3.Value;

            //luuakse CompositeTransform objekt
            CompositeTransform ct = new CompositeTransform();

            //antakse loodud objektile edasi omadused
            ct.ScaleX = scaleX;
            ct.TranslateY = -TranslateY;
            ct.Rotation = Rotation;

            //rakendatakse omadused pildi peal
            MSlogoPilt.RenderTransform = ct;
        }

        private void slider1_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            MoveImage();
        }

        private void slider2_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            MoveImage();
        }

        private void slider3_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            MoveImage();
        }
    }
}

Windows Phone – Hello World! + Storyboard

See on esimene tunnis tehtud Windows Phone programm. Esimesele nupule vajutades trükitakse ekraanil olevasse tekstilahtrisse „Hello World!“ ning teise nupu vajutuse peale pannakse see textbox liikuma.

Liikumise trajektoor ja muud omadused sätiti paika visuaalselt, Expression Blend’i vahendusel, seetõttu siis ka selline kogukas xaml-kood.

Vaata kõigepealt videost mida see rakendus teeb.

Windows Phone–Hello World! ja Storyboard

MainPage.xaml

<phone:PhoneApplicationPage
   x:Class="StoryBoardTest.MainPage"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
   xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
   FontFamily="{StaticResource PhoneFontFamilyNormal}"
   FontSize="{StaticResource PhoneFontSizeNormal}"
   Foreground="{StaticResource PhoneForegroundBrush}"
   SupportedOrientations="Portrait" Orientation="Portrait"
   shell:SystemTray.IsVisible="True">
    <phone:PhoneApplicationPage.Resources>
        <Storyboard x:Name="Storyboard1" AutoReverse="True" RepeatBehavior="2x">
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateY)" Storyboard.TargetName="textBox1">
                <EasingDoubleKeyFrame KeyTime="0" Value="312"/>
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="114"/>
                <EasingDoubleKeyFrame KeyTime="0:0:2" Value="114"/>
                <EasingDoubleKeyFrame KeyTime="0:0:2.9" Value="-31.5"/>
                <EasingDoubleKeyFrame KeyTime="0:0:3.9" Value="-31.5"/>
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.TranslateX)" Storyboard.TargetName="textBox1">
                <EasingDoubleKeyFrame KeyTime="0" Value="13.5"/>
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="9"/>
                <EasingDoubleKeyFrame KeyTime="0:0:2" Value="9"/>
                <EasingDoubleKeyFrame KeyTime="0:0:2.9" Value="6"/>
                <EasingDoubleKeyFrame KeyTime="0:0:3.9" Value="6"/>
            </DoubleAnimationUsingKeyFrames>
            <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="textBox1">
                <EasingDoubleKeyFrame KeyTime="0:0:1" Value="0"/>
                <EasingDoubleKeyFrame KeyTime="0:0:2" Value="180.039"/>
                <EasingDoubleKeyFrame KeyTime="0:0:2.9" Value="359.93"/>
                <EasingDoubleKeyFrame KeyTime="0:0:3.9" Value="359.93"/>
            </DoubleAnimationUsingKeyFrames>
        </Storyboard>
    </phone:PhoneApplicationPage.Resources>

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <!--TitlePanel contains the name of the application and page title-->
        <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
            <TextBlock x:Name="ApplicationTitle" Text="Storyboard test" Style="{StaticResource PhoneTextNormalStyle}"/>
            <TextBlock x:Name="PageTitle" Text="Hello World!" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
        </StackPanel>

        <!--ContentPanel - place additional content here-->
        <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
            <Button Content="Hello World!" Height="72" HorizontalAlignment="Right" Margin="0,44,48,0" Name="button1" VerticalAlignment="Top" Width="234" Click="KirjutaHello_Click" />
            <TextBox Height="82" HorizontalAlignment="Left" Margin="34,171,0,0" Name="textBox1" VerticalAlignment="Top" Width="374" RenderTransformOrigin="0.5,0.5" >
                <TextBox.RenderTransform>
                    <CompositeTransform/>
                </TextBox.RenderTransform>
            </TextBox>
            <Button Content="Käivita" Height="72" HorizontalAlignment="Left" Margin="248,429,0,0" Name="button2" VerticalAlignment="Top" Width="160" Click="button2_Click" />
        </Grid>
    </Grid
>

</
phone:PhoneApplicationPage
>

MainPage.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

namespace StoryBoardTest
{
    public partial class MainPage : PhoneApplicationPage
    {
        // Constructor
        public MainPage()
        {
            InitializeComponent();
        }
        private void KirjutaHello_Click(object sender, RoutedEventArgs e)
        {
            textBox1.Text = "Hello World!";
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            Storyboard1.Begin();
        }
    }
}

Visual Studio – FOR-tsükkel ja massiiv

Käesolevaga mõned lihtsad näited selle kohta kuidas kasutada FOR-tsüklit ja massiive.

Matkajate kokkutulek

Programm loendab iga nupuvajutuse korral järgmise matkaja.

using System;

namespace for_tsyklid
{
    class Program
    {
        static void Main(string[] args)
        {
            int nr = 1;
            while (nr <= 5)
            {
                Console.WriteLine("Tere {0} matkaja!", nr);
                Console.ReadKey(true);
                nr += 1;
            }
            Console.ReadKey(true);
        }
    }
}
//Tere 1 matkaja!
//Tere 2 matkaja!
//Tere 3 matkaja!
//Tere 4 matkaja!
//Tere 5 matkaja!

Matkajate kokkutulek FOR tsükliga

Programm loendab FOR-tsükli abil matkajaid.

using System;

namespace for_tsyklid
{
    class Program
    {
        static void Main(string[] args)
        {
            for (int i = 0; i <= 5; i++)
            {
                Console.WriteLine("Tere {0} matkaja", i);
            }
            Console.ReadKey(true);
        }
    }
}
//Tere 0 matkaja
//Tere 1 matkaja
//Tere 2 matkaja
//Tere 3 matkaja
//Tere 4 matkaja
//Tere 5 matkaja

Arvude ruudud ja kuubid

Programm küsib kasutajalt numbrit ning seejärel väljastab kuni selle arvuni kõikide täisarvude ruudud ja kuubid.

using System;

namespace for_tsyklid
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Mitu korda me seda teeme?");
            ulong kordus = ulong.Parse(Console.ReadLine());
            for (ulong i = 1; i <= kordus; i++)
            {
                Console.WriteLine("Arv {0} ruudus on {1} ja kuubis on {2}", i, Math.Pow(i, 2), Math.Pow(i, 3));
            }
            Console.ReadKey(true);
        }
    }
}
//Mitu korda me seda teeme?
//5
//Arv 1 ruudus on 1 ja kuubis on 1
//Arv 2 ruudus on 4 ja kuubis on 8
//Arv 3 ruudus on 9 ja kuubis on 27
//Arv 4 ruudus on 16 ja kuubis on 64
//Arv 5 ruudus on 25 ja kuubis on 125

Autod massiivis

Programm iseloomustab massiivi kasutamist. Programmi käivitamisel täideks massiiv autode nimedega ning seejärel väljastatakse kogu nimekiri ekraanile.

using System;

namespace Autodemassiiv
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] AutodeMassiiv = new string[6];

            AutodeMassiiv[0] = "Toyota";
            AutodeMassiiv[1] = "Mazda";
            AutodeMassiiv[2] = "Volkswagen";
            AutodeMassiiv[3] = "Honda";
            AutodeMassiiv[4] = "Renault";
            AutodeMassiiv[5] = "Peugeot";

            for (int i = 0; i < AutodeMassiiv.Length; i++)
            {
                Console.WriteLine(AutodeMassiiv[i]);
            }
            Console.ReadKey(true);
        }
    }
}
//Toyota
//Mazda
//Volkswagen
//Honda
//Renault
//Peugeot

Väljastage mulle auto

Programm küsib kasutaja käest numbriliselt, et millist autot soovitakse. Kasutaja vastus kontrollitakse kõigepealt, et kas massiivis on üldse niipalju autosid ja kui sobib siis väljastatakse auto nimetus.

using System;

namespace Autodemassiiv
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] AutodeMassiiv = new string[6];

            AutodeMassiiv[0] = "Toyota";
            AutodeMassiiv[1] = "Mazda";
            AutodeMassiiv[2] = "Volkswagen";
            AutodeMassiiv[3] = "Honda";
            AutodeMassiiv[4] = "Renault";
            AutodeMassiiv[5] = "Peugeot";

            while (true)
            {
                Console.WriteLine("Millist autot soovite?");
                int jrk;
                int.TryParse(Console.ReadLine(), out jrk);

                int auto = AutodeMassiiv.Length;
                if (jrk <= auto & jrk > 0)
                {
                    jrk = jrk - 1;
                    Console.WriteLine(AutodeMassiiv[jrk]);
                }
                else
                {
                    Console.WriteLine("Vale number!");
                }
            }
        }
    }
}
//Millist autot soovite?
//4
//Honda
//Millist autot soovite?
//6
//Peugeot
//Millist autot soovite?
//8
//Vale number!
//Millist autot soovite?

Sisesta ise automargid

Programm küsib kasutaja käest automarke ning lisab need massiivi, mida iga tsükli käigus ühe võrra suurendatakse. Kui kasutaja ei soovi enam autosid lisada, väljastab programm kogu sisestatud autode loetelu.

using System;

namespace Autodemassiiv
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] AutodeMassiiv = new string[0];
            string vastus = "J";
            while (vastus != "E")
            {
                Console.WriteLine("Palun ütle automark");
                Array.Resize(ref AutodeMassiiv, AutodeMassiiv.Length + 1);
                string auto = Console.ReadLine();
                AutodeMassiiv[AutodeMassiiv.Length - 1] = auto;
                Console.WriteLine("Kas soovite veel lisada automarke? (J/E)");
                vastus = Console.ReadLine();
            }
            for (int i = 0; i < AutodeMassiiv.Length; i++)
            {
                Console.WriteLine(AutodeMassiiv[i]);
            }
            Console.ReadKey(true);
        }
    }
}
//Palun ütle automark
//Toyota
//Kas soovite veel lisada automarke? (J/E)
//J
//Palun ütle automark
//Mazda
//Kas soovite veel lisada automarke? (J/E)
//j
//Palun ütle automark
//BMW
//Kas soovite veel lisada automarke? (J/E)
//j
//Palun ütle automark
//Audi
//Kas soovite veel lisada automarke? (J/E)
//E
//Toyota
//Mazda
//BMW
//Audi

Visual Studio – IF-ELSE ja WHILE jupikesed

Alljärgnevate ülesandejupikeste eesmärk on aru saada IF-ELSE lausetest lihtsate näidete abil.

Tule mulle külla!

Allolev programm küsib kasutaja käest tema nime ning kui nimi on vastav (käesoleval juhul Ramses) siis programm kutsub Sind külla, vastasel juhul teatatakse, et Mind pole kodus.

using System;
class Tervitus
{
    public static void Main(string[] arg)
    {
        Console.WriteLine("Palun sisesta nimi:");
        string nimi = Console.ReadLine();
        if (nimi == "Ramses")
        {
            Console.WriteLine("Tule mulle homme külla!");
        }
        else
        {
            Console.WriteLine("Mind pole homme kodus.");
        }
        Console.ReadKey(true);
    }
}
//Palun sisesta nimi:
//Leivo
//Mind pole homme kodus.
// **** Ja siin teine valikuvariant:
//Palun sisesta nimi:
//Urmas
//Mind pole homme kodus.

Piletikassa juures

Programm küsib kasutajalt tema vanust ning vastavalt vanusele kuvab kasutajale erinevad teated.

using System;
class Tervitus
{
    public static void Main(string[] arg)
    {
        Console.WriteLine("Palun ütle oma vanus.");
        string sinuVanus = Console.ReadLine();
        long Vanus1 = long.Parse(sinuVanus);
        if (Vanus1 < 12 && Vanus1 >= 7)
        {
            Console.WriteLine("MINE TEISE KASSASE ET OSTA LAPSEPILET!!");
        }
        else if (Vanus1 > 80)
        {
            Console.WriteLine("Kas sa oled mu vanaisa?");
        }
        else if (Vanus1 < 7)
        {
            Console.WriteLine("Ega sa oma vanemaid kaotanud pole?");
        }
        else
        {
            Console.WriteLine("Tulite õige kassa juurde ja võite täiskasvanu pileti osta");
        }
        Console.ReadKey(true);
    }
}
//Palun ütle oma vanus.
//12
//Tulite õige kassa juurde ja võite täiskasvanu pileti osta

Pirnide ostmine koos kilekotiga

Programm küsib kasutajalt mitu pirni soovib osta ja seejärel kas soovitakse ka kilekotti. Lõpuks liidetakse kokku pirnide maksumus ja vajadusel kilekoti hind.

using System;
class Tervitus
{
    public static void Main(string[] arg)
    {
        double pirnihind = 1.70;
        Console.WriteLine("Mitu pirni ostad?");
        double kogus = double.Parse(Console.ReadLine());
        double summa = kogus * pirnihind;
        Console.WriteLine("Kas kilekotti ka soovid? (jah/ei)");
        string vastus = Console.ReadLine();
        if (vastus == "jah")
        {
            summa = summa + 0.70;
        }
        Console.WriteLine("Kogusumma: " + summa);
        Console.ReadKey(true);
    }
}
//Mitu pirni ostad?
//5
//Kas kilekotti ka soovid? (jah/ei)
//jah
//Kogusumma: 9,2

Pikad ja lühikesed mehed-naised

Järgmine programm küsib kasutaja käest tema pikkust ning kas ta on mees või naine. Vastuseks väljastatakse vastavalt sisestatud andmetele tulemus „Pikk mees“, „Lühike naine“ jne.

Antud programmijupi eesmärk on näidata IF-ELSE lausete üksteise sisse panemise võimalust.

using System;
class Tervitus
{
    public static void Main(string[] arg)
    {
        Console.WriteLine("Kui pikk sa oled?");
        double Pikkus = double.Parse(Console.ReadLine());
        Console.WriteLine("Mis su sugu on?");
        string sugu = Console.ReadLine();
        if (Pikkus <= 1.4)
        {
            if (sugu == "M")
            {
                Console.WriteLine("Lühike mees");
            }
            else if (sugu == "N")
            {
                Console.WriteLine("Lühike naine");
            }
        }
        else if (Pikkus >= 1.7)
        {
            if (sugu == "M")
            {
                Console.WriteLine("Pikk mees");
            }
            else if (sugu == "N")
            {
                Console.WriteLine("Pikk naine");
            }
        }
        else
        {
            if (sugu == "M")
            {
                Console.WriteLine("Keskmine mees");
            }
            else if (sugu == "N")
            {
                Console.WriteLine("Keskmine naine");
            }
        }
        Console.ReadKey();
        Console.ReadKey(true);
    }
}
//Kui pikk sa oled?
//1,7
//Mis su sugu on?
//M
//Pikk mees

Osta elevant ära

Programm piinab senikaua kasutajat küsimusega „osta elevant ära“ kuni kasutaja trükib ekraanile „elevant“.

using System;

namespace OstaElevant
{
    class Program
    {
        static void Main(string[] args)
        {
            string elevant = "midagi";
            while (elevant != "elevant")
            {
                Console.WriteLine("Osta elevant ära");
                elevant = Console.ReadLine();
            }
            Console.ReadKey(true);
        }
    }
}
//Osta elevant ära
//ei osta
//Osta elevant ära
//osta ise
//Osta elevant ära
//elevant

Visual Studio 2010 – C# ja Hello World!

Visual Studio 2010 on keskkond mida kasutame programmeerimise õppimiseks.

Ülesannete selgitused on antud tundides, seega siin on ülesanded lihtsalt meeldetuletuseks üleval.

Hello World!

Iga programmeerija esimene programm on ekraanile trükkida „Hello World!“.

Programmeerimises on olemas hulk põhitõdesid ning nende õpetamiseks sobib kõige lihtsam programmitüüp – Console Application. Sisuliselt tähendab see, et tulemuseks on .exe fail, mille käivitamise järel näeb kasutaja musta ekraani ja valget kirja ning siis seda mida antud programm teeb.

Alljärgnev programm trükib ekraanile „Hello World!“ ning jääb seejärel suvalist klahvivajutust ootama.
using System;
class Tervitus
{
    public static void Main(string[] arg)
    {
        Console.WriteLine("Hello World!");
        Console.ReadKey(true);
    }
}
//Hello World!

 

Seejärel mõned lihtsamad nimeküsimise ülesanded ning IF-ELSE lausete kasutamine.

Mis Su nimi on?

Alljärgnev programm küsib kasutajalt tema nime ning seejärel trükib ekraanile tervituse sisestatud nimele.

using System;
class Tervitus
{
    public static void Main(string[] arg)
    {
        Console.WriteLine("Palun ütle mulle oma eesnimi.");
        string eesnimi = Console.ReadLine();
        Console.WriteLine("Tere, " + eesnimi + ".");
        Console.ReadKey(true);
    }
}
//Palun ütle mulle oma eesnimi.
//Leivo
//Tere, Leivo.

Ma oskan korrutada

Programm küsib kasutaja käest kahte arvu ning seejärel väljastab nende korrutise.

using System;
class Tervitus
{
    public static void Main(string[] arg)
    {
        Console.WriteLine("Ma oskan kahte arvu korrutada!");
        Console.WriteLine("Palun esimene arv:");
        string SeeOnTekst = Console.ReadLine();
        int arv1 = int.Parse(SeeOnTekst);
        Console.WriteLine("Sisesta palun teine arv");
        int arv2 = int.Parse(Console.ReadLine());
        Console.WriteLine("Arvude {0} ja {1} korrutis on {2}", arv1, arv2, arv1 * arv2);
        Console.ReadKey(true);
    }
}
//Ma oskan kahte arvu korrutada!
//Palun esimene arv:
//4
//Sisesta palun teine arv
//5
//Arvude 4 ja 5 korrutis on 20

Toa ümbermõõt

Programm küsib kasutajalt seinte pikkused ja väljastab seepeale toa ümbermõõdu ja pindala.

using System;

namespace Toa_umbermoot_ja_pindala
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Palun ütle esimese seina pikkus.");
            int esimeneSein = int.Parse(Console.ReadLine());
            Console.WriteLine("Palun ütle teise seina pikkus.");
            int teineSein = int.Parse(Console.ReadLine());
            Console.WriteLine("Toa pindala on {0}", esimeneSein * teineSein);
            Console.WriteLine("Toa ümbermõõt on {0}", (esimeneSein + teineSein) * 2);
            Console.ReadKey(true);
        }
    }
}
//Palun ütle esimese seina pikkus.
//30
//Palun ütle teise seina pikkus.
//40
//Toa pindala on 1200
//Toa ümbermõõt on 140

Kes on täna pinginaabrid?

Programm küsib inimese nime ning tema kõrvalistuja nime ja teatab seejärel, et nad on pinginaabrid.

using System;
class Tervitus
{
    public static void Main(string[] arg)
    {
        Console.WriteLine("Tere, mis su nimi on?");
        string esimeseTüübiNimi = Console.ReadLine();
        Console.WriteLine("Aga tema nimi");
        string teiseTüübiNimi = Console.ReadLine();
        Console.WriteLine("{0} ja {1} on täna pinginaabrid", esimeseTüübiNimi, teiseTüübiNimi);
        Console.ReadKey(true);
    }
}
//Tere, mis su nimi on?
//Leivo
//Aga tema nimi
//Andres
//Leivo ja Andres on täna pinginaabrid

Eesti Meistrid robootikas 2012

PALJU ÕNNE KOGU TIIMILE!

image

Põhikoolide meistrivõistlustel Tartus Ahhaa keskuses saavutas meeskond Robootika.COM absoluutarvestuses esikoha, tulles seega Eesti meistriks.

Alljärgnevalt paar videot meie tiimi tööst:

http://www.youtube.com/playlist?list=PL780BC20553B56CE8&feature=view_all 

Samuti mõned pildid võistlusest:

https://skydrive-df.live.com/?cid=322f8d75bd36db00&id=322F8D75BD36DB00%212884

ERR uudis Robomiku võistlusest: http://uudised.err.ee/?06248728

http://teadus.err.ee/artikkel?id=6676&cat=1

Tagasi Kooli – kaks koolitundi tulevikust ja matemaatikast

Presidendi eeskujul ja eelmise aasta positiivse kogemuse põhjal panin end taas kirja Tagasi Kooli raames õpetajaks. http://www.tagasikooli.ee 

Tegemist siis sellise nädalaga kus koolitundi annavad inimesed, kellel endal ammu kool lõpetatud kuid soovivad anda oma panust.

21. kool, 10 ja 11. klass

Õppealajuhataja oli väga rõõmus kui kuulis, et ma jälle nende kooli tulen tundi andma. Seekord siis oli kohaks auditoorium ja koos olid nii 10 kui 11 klass. Tunni teemaks Tulevikutehnoloogiad ja Microsoft.

Visoon

Algatuseks tähelepanu haaramiseks näitasin Microsoft Researchi loodud nägemust tulevikust 10 aasta pärast http://www.microsoft.com/office/vision/ 

Andsin ülevaate sellest kust tuleb tulevik, ja sellest et kes loovad meie tuleviku. Et need on ikka inimesed ning selleks on üle maailma 3-4 MS Research teaduskeskust kus sisuliselt piiramatute ressurssidega maailma kõige geniaalsemad ajud tegelevad ulmeliste asjadega millisena nad näevad elu 10-15 aasta pärast.

Robootika

Seejärel tulime maa peale tagasi ja andsin lühiülevaate robootikast ja sellest kuidas Eesti sai Viinis viimasel nädalavahetusel hõbeda. Siia juurde näitasin naljakat videot meie roboti või(s)tlusest teisega ühtede värviliste litrite pärast. http://www.youtube.com/watch?v=_eygbpvdoSA

Matemaatika

Küsimusele kellele meeldib matemaatika, tõstis käe ca 2/3 õpilastest mis pani mind SIIRALT üllatuma.

Kuid 20 min jooksul näitasin/visualiseerisin õpilastele matemaatikat Micrsosft Mathematics abil. Eesmärk oli panna nad natuke paremini mõistma matemaatikat visualiseeritud viisil.

kuupfunktsiooni uurimineVõtsime uurimiseks ühe kuup-funktsiooni ning uurisime selle graafiku tipupunkte, ekstreemumeid.

a) Kuvasin graafikule kuupvõrrandi

image

b) lahendasin kuupvõrrandi nullkohad, sain lõikumised X-teljega

image

c) Võtsin kuupvõrrandist esimese tuletise ja visualiseerisin selle graafikule, näitamaks et sellest saame teada esialgse võrrandi tippude Y-telje koordinaadid

image ja siin on selle esimene tuletis: image

d) lahendasin saadud tuletisvõrrandi nullkohad näitamaks, et saime numbrilise väärtuse

image

d) võtsin esialgsest kuupfunktsioonist piirväärtuse kohtadel mis ma sain tuletatud võrrandi lahenditest ehk nullkohtadest ja kuvasin need graafikule

image

e) võtsin teist järku tuletise esimesest võrrandist ja kuvasin selle graafikule et visualiseerida esialgse graafiku käänupunkti

image ja siin on selle teist järku tuletis: image

f) Lahendasin saadud tulemuse nullkoha ning kuvasin selle graafikule

image

Tulemuseks sai päris tore graafik.  Jaanus Sootsi vanem tüdruk oli ainuke kes tõstis käe, et on eelnevalt Microsoft Mathematicsit iseseisvalt kasutanud ja tema tuli ka hiljem küsima et tahaks tulla robootikaringi vaatama meie õppetegevust, väga kena!

Vabandan siinkohal 10. klassi ees kes pole veel tuletisi ja piirväärtusi õppinud, ma valmistusin 11. klassi matemaatikaks. Õppealajuhataja pakkus ka välja et võiksin tulla ja 12. klassile järgmine aasta diskreetset matemaatikat õpetada, kuna see on üks mu lemmikainetest. Ma tänasin viisakalt seekord …

Westholmi Gümnaasium, 8 klass

See on selline lahe vanus, et mingit igavat funktsiooni uurimist ei tasu neile näidata Smile Kuigi minu meelest on matemaatika ülimalt lahe asi.

Tulevikutehnoloogiad ja MS Research

Alustasin oma tunni sarnaselt 21. koolile. Rääkisin sellest kuidas tekib meile tulevik ja kes on need inimesed kes meile tuleviku loovad.

Robootika

Edasi liikusin robootika peale ja näidatud sai seda sama lõbusat videot meie robotisõidust Viinis. Samuti andsin neile lühiülevaate sellest, et robot koosneb anduritest, täituritest ja kontrollerist – samuti selgitasin lahti nende otstarbe.

Matemaatika

Küsimusele kellele meeldib matemaatika, tõstis käe ÜKS poiss. Kuid nähes et teised ei tõstnud muutus ka tema käsi ebalevaks. Kuid minu tugev poolehoid Sulle kes sa käe tõstsid – sinusuguste päralt on tulevik!

No ma kohe ei saa ilma matemaatikata! Küsisin et mida nad õpivad – selgus et igasugust asendamisvõtteid, ikside avaldamisi jne. See suurepärane teema. Igasuguste avaldamiste peale olen ma ise välja töötanud ühe ülimalt lihtsa retsepti mis on aidanud mind väga palju nii füüsikas, matemaatikas kui ka mujal.

imageMa nimetan seda Matemaatika Kolmnurgaks, kuid koolis seda ei õpetata. Kõik õpetajad ütleksid muidugi  “see on ju loogiline” “või loomulikult käib see nii” aga millegipärast  sunnitakse õpilasi ikka pähe õppima ühe valemi kolm kuju. Näiteks Ohmi seaduse kolm kuju: U=IxR, I=U/R, R=U/I.

Paljud õpilased õpivadki pähe KOLM erinevat varianti ühes valemist, mina aga visualiseerin selle endale kolmnurgana.

Selle kolmnurga võlu seisneb selles, et ükskõik millist liiget soovin avaldada, siis katan selle kinni ja järele jääb vastus. Sama visualisatsiooni kasutan väga palju matemaatikas, kus võib olla päris keerulisi tehteid ning need võivad nii mõnigi pea segi ajada. Kui aga need matemaatikaülesanded visualiseerida kolmnurgaks muutub asi kordi lihtsamaks.

Huvitav on see, et ma mõtlesin selle välja enda jaoks kooliajal – seega ca 20a tagasi, kuid alles nüüd mõistan ma et paljud ei suuda ise asja nii lihtsaks mõelda ja esimene kellele ma seda õpetasin oli Kreete. Tema oli VÄGA õnnelik et midagi nii lihtsat on matemaatikas olemas ja õpetas seda õhinaga oma klassis edasi teistele. Nüüd olen ma aru saanud et mul tasub seda ka teistele õpetada.

Westholmi 8. klass oli silmnähtavalt targem kui nad tunnist lahkusid. Neil on nüüd oma salarelv füüsikas ja matemaatikas Smile