LABORATORIUM 1
TREŚCI KSZTAŁCENIA: PRACA W ŚRODOWISKU VISUAL STUDIO, TWORZENIE PROSTYCH PROGRAMÓW W JĘZYKU C# (LICZBA GODZIN: 4H).
1. Praca w środowisku Visual studio
Instalacja:
W celu realizacji zagadnień związanych z programowaniem w C# należy zainstalować poniższe składniki:
Informacje dotyczące usługi GitHub dla VS można znaleźć pod adresem (data dostępu 19.09.2023): link
2. Tworzenie nowego projektu:
Po otwarciu VS wybieramy 1 następnie 2 i 3 i klikamy Next.
Nadajemy name projektowi i przechodzimy dalej w celu wybrania Framework (wybieramy obecnie używany standard) i klikamy Create.
Widok utworzonego projektu:
3. Tworzenie prostych programów w języku C#
Poniżej przedstawiono przykład z podstawowymi informacjami związanymi z wyświetlaniem danych, deklaracją zmiennych, rzutowaniem danych
//Wyświetlanie danych na consoli Output using System.Drawing; using System;
Console.WriteLine("Hello, World!");
Console.WriteLine("i am Learning C#");
Console.WriteLine(3+3);
Console.WriteLine();
//Console.WriteLine
Console.Write("Hello, World!");
Console.Write("I will print on the same line.");
// komentarz jednolinikowych /* komentarz wielolinikowy next line next line skróty klawiszowe:
Comment/Uncomment selection Ctrl+K+C Ctrl+K+U
*/
//C# Variables
/*type of variables:
* int - stores integers (whole numbers), without decimals, such as 123 or -123;
* double - stores floating point numbers, with decimals, such as 19.99 or 19.99;
* char - stores single characters, such as 'a' or 'B'. Char values are surrounded by single quotes;
* string - stores text, such as "Hello World". String values are surrounded by double quotes;
* bool - stores values with two states: true or false;
*/
//Declaring (Creating) Variables
//type variableName = value;
int a =2, b=1, c; float f1 = 35e3F; double d1 = 3.23; char charA= 'a'; string firstName = "ala "; string lastName = "nowak"; bool boolValue = false;
Console.WriteLine("\nWartosc int: " + b);
Console.WriteLine("Wartosc double: " + d1);
Console.WriteLine("Wartosc char: " + charA);
Console.WriteLine(firstName + lastName);
Console.WriteLine(boolValue);
Console.WriteLine("a + b = "+ (a+b));
//C# Rzutowanie danych
/*Rzutowanie typów ma miejsce,
* gdy wartość jednego typu danych jest przypisywana do innego typu.
* Implicit Casting (automatically) - converting a smaller type to a larger type size
char -> int -> long -> float -> double
Explicit Casting (manually) - converting a larger type to a smaller size type double -> float -> long -> int -> char
*/ int intA = 5;
double doubleA = intA; //rzutowanie automatyczne
Console.WriteLine(intA); // Outputs 5
Console.WriteLine(doubleA); // Outputs 5
double myDouble = 9.78;
int myInt = (int)myDouble; // rzutowanie ręczne: double to int
Console.WriteLine(myDouble); // Outputs 9.78
Console.WriteLine(myInt); // Outputs 9
//Type Conversion Methods
/*
Możliwe jest również jawne konwertowanie typów danych za pomocą wbudowanych metod,
takich jak: Convert.ToBoolean, Convert.ToDouble, Convert.ToString,
Convert.ToInt32 (int) i Convert.ToInt64 (long)
*/
int myInt1 = 10; double myDouble1 = 5.25; bool myBool = true;
Console.WriteLine(Convert.ToString(myInt1)); // convert int to string
Console.WriteLine(Convert.ToDouble(myInt1)); // convert int to double
Console.WriteLine(Convert.ToInt32(myDouble1)); // convert double to int Console.WriteLine(Convert.ToString(myBool)); // convert bool to string
Wczytywanie danych z klawiatury:
//Input
Console.WriteLine("Enter username: "); string userName = Console.ReadLine();
Console.WriteLine("Username is: " + userName);
W poniższym przykładzie związanym z podaniem wieku pojawi się błąd związany z konwersja danych.
Console.WriteLine("Enter your age:"); int age = Console.ReadLine();
Console.WriteLine("Your age is: " + age);
Metoda Console.ReadLine() zwraca ciąg znaków. Dlatego nie można uzyskać informacji z innego typu danych, takiego jak int. Program spowoduje błąd:
Cannot implicitly convert type 'string' to 'int'
Console.WriteLine("Enter username: "); string userName = Console.ReadLine(); Console.WriteLine("Username is: " + userName);
//rozwiązanie
Console.WriteLine("Enter your age:"); int age = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Your age is: " + age);
W C# wyróżnić można następujące operatory:
Matematyczne: +, -, *, / , % (modulo), ++ (inkrementacja przyrostkowa i prefiksowa)), -- (dekrementacja przyrostkowa oraz prefiksu).
int a = 1, b = 2;
Console.WriteLine("a + b = "+ (a+b));
Console.WriteLine("a - b = "+ (a-b));
Console.WriteLine("a * b = "+ (a*b));
Console.WriteLine("a / b = "+ (a/b));
Console.WriteLine("a % b = "+ (a%b));
//Operator inkrementacji przyrostkowej int i = 3;
Console.WriteLine(i); // output: 3
Console.WriteLine(i++); // output: 3
Console.WriteLine(i); // output: 4
//Operator inkrementacji prefiksu
double myDouble = 1.5;
Console.WriteLine(myDouble); // output: 1.5
Console.WriteLine(++myDouble); // output: 2.5
Console.WriteLine(myDouble); // output: 2.5
// Operator dekrementacji przyrostkowej int j = 3;
Console.WriteLine(j); // output: 3
Console.WriteLine(j--); // output: 3
Console.WriteLine(j); // output: 2
//Operator dekrementacji prefiksu
double myDoubleA = 1.5;
Console.WriteLine(myDoubleA); // output: 1.5
Console.WriteLine(--myDoubleA); // output: 0.5
Console.WriteLine(myDoubleA); // output: 0.5
Operatory przypisania: +=, -=, *=., /=, %=, &=, |=, ^=, >>=, <<= .
Operatory porównania: ==, !=, >, <, >=, <=.
Operatory logiczne: && (and), || (or) ! (not).
W C# zdefiniowana jest klasa Math, która posiada wiele metod umożliwiających wykonywanie zadań matematycznych na liczbach.
int a = 5, b = 10;
Console.WriteLine("Wartośc min z pary liczb: " + a + " i " + b + " wynosi : " + Math.Min(a, b));
Poniżej przedstawiono przykład dla zmiennych string:
//string example
string str1 = "Hello";
string str2 = "To jest string zawierajacy wiele znakow";
Console.WriteLine(str1);
Console.WriteLine(str2);
//string length
Console.WriteLine("Dlugosc str2: "+ str2.Length);
Console.WriteLine(str1.ToLower());
Console.WriteLine(str1.ToUpper());
string firstName = "Jan "; string lastName = "Kowalski";
Console.WriteLine(firstName + lastName);
//metoda Concat()
string name = string.Concat(firstName, lastName); Console.WriteLine(name);
C# String Interpolation – interpolacja ciągów pozwala zastępować wartości zmiennych symbolami zastępczymi w ciągu znaków.
string firstName = "Jan"; string lastName = "Nowak";
string name = $"Imie i nazwisko: {firstName} {lastName}"; Console.WriteLine(name);
Instrukcje warunkowe:
int a = 2;
if (a == 1)
{
//instrukcje
}
else if (a > 0)
{
//instrukcje
} else
{
//instrukcje
}
if (false) { } else { }
Istnieje również operator skrótu if else, który jest znany jako operator trójargumentowy, ponieważ składa się z trzech operandów. Można go użyć do zastąpienia wielu wierszy kodu jednym wierszem. Jest on często używany do zastępowania prostych instrukcji if else:
variable = (condition) ? expressionTrue : expressionFalse;
//zapis I int time = 20; if (time < 18)
{
Console.WriteLine("Good day.");
} else
{
Console.WriteLine("Good evening.");
}
//użycie operatora trójargumentowego int time = 20;
string result = (time < 18) ? "Good day." : "Good evening."; Console.WriteLine(result);
int x = 50; int y = 10;
string result = (x > y) ? "wartosc x wieksza" : "wartosc y wieksza"; Console.WriteLine(result);
Instrukcja wyboru:
// instrukcja wyboru switch (switch_on)
{ case 1: //code block break; case 2: //code block break; default: //code block break; }
Instrukcje iteracyjne:
// instrukcje iteracyjne Console.WriteLine("Petla while: "); int i = 0; while (i < 5)
{
Console.Write(i + " "); i++;
}
Console.WriteLine("\nPetla do while"); i = 0; do
{
Console.Write(i + " "); i++; }
while (i < 5);
Console.WriteLine("\nPetla for"); for (i = 0; i < 5; i++)
{
Console.Write(i+ " ");
}
Console.WriteLine("\nPetla foreach: "); string[] cars = { "Volvo", "BMW", "Ford", "Mazda" }; foreach (string item in cars)
{
Console.Write(item+ " ");
}
Break i continue
//break int i;
for (i = 0; i < 10; i++)
{ if (i == 4) { break;
}
Console.WriteLine(i);
}
//continue
for (i = 0; i < 10; i++)
{
if (i == 4) { continue;
}
Console.WriteLine(i);
}
//Break and Continue w instrukcji iteracyjnej i = 0; while (i < 10)
{
Console.WriteLine(i); i++; if (i == 4) { break;
}
} i = 0; while (i < 10)
{
if (i == 4) { i++; continue;
}
Console.WriteLine(i); i++;
}
Tablice
//deklaracja tablicy string[] cars1;
// deklaracja tablicy z inicjalizacja tablicy string[] cars = { "Volvo", "BMW", "Ford", "Mazda" }; int[] myNum = { 10, 20, 30, 40 };
//dostep do elementów tablicy
Console.WriteLine("Pierwszy element tablicy: " + cars[0]);
//zmiana elementow tablicy cars[0] = "Opel";
Console.WriteLine("Pierwszy element tablicy: "+ cars[0]);
//dlugosc tablicy
Console.WriteLine("Dlugosc tablicy: "+ cars.Length);
//inne sposoby tworzenia tablicy string[] cars = new string[4];
string[] cars = new string[4] { "Volvo", "BMW", "Ford", "Mazda" }; string[] cars = new string[] { "Volvo", "BMW", "Ford", "Mazda" }; string[] cars = { "Volvo", "BMW", "Ford", "Mazda" };
//uwaga jezeli deklarujsz tablice a potem ja inicjujesz pamietaj o uzyciu operatora new
// deklaracja tablicy string[] cars;
// dodanie wartosci z użyciem new
cars = new string[] { "Volvo", "BMW", "Ford" };
// dodanie wartosci bez uzycia new spowoduje blad cars = { "Volvo", "BMW", "Ford"};
Przeglądanie tablicy:
// przegladanie tablicy petla for
string[] cars = { "Volvo", "BMW", "Ford", "Mazda" };
for (int i = 0; i < cars.Length; i++)
{
Console.WriteLine(cars[i]);
}
// foreach
string[] cars = { "Volvo", "BMW", "Ford", "Mazda" }; foreach (string i in cars)
{
Console.WriteLine(i);
}
Sortowanie tablicy
// sortowanie tablicy
string[] cars = { "Volvo", "BMW", "Ford", "Mazda" }; Array.Sort(cars); foreach (string i in cars)
{
Console.WriteLine(i);
}
int[] myNumbers = { 5, 1, 8, 9 }; Array.Sort(myNumbers); foreach (int i in myNumbers)
{
Console.WriteLine(i); }
Tablice wielowymiarowe
// tablice wielowymiarowe
int[,] numbers = { { 1, 4, 2 }, { 3, 6, 8 } };
Console.WriteLine(numbers[0, 2]); // Outputs 2 numbers[0, 0] = 5; // Change value to 5
Console.WriteLine(numbers[0, 0]); // Outputs 5 instead of 1
foreach (int i in numbers)
{
Console.Write(i +" ");
}
Console.WriteLine();
for (int i = 0; i < numbers.GetLength(0); i++) {
for (int j = 0; j < numbers.GetLength(1); j++)
{
Console.Write(numbers[i, j] + " ");
}
Console.WriteLine();
}
Metody
//wywołanie metody w głowym programie Main
View(); int a=1,b=2;
Console.WriteLine(a + " + " + b + " = " + sum(a, b));
Console.WriteLine("suma liczb 3 + 4 = " + sum(3,4));
Console.WriteLine("suma liczb 3 + 4 = " + sum(3,4));
//deklaracja metody wraz z ciałem metody static void View() { Console.WriteLine("Hello");
}
static int sum(int a, int b) { return a + b; }
Przeciążenie metod:
int myNum1 = PlusMethodInt(8, 5); double myNum2 = PlusMethodDouble(4.3, 6.26); Console.WriteLine("Int: " + myNum1);
Console.WriteLine("Double: " + myNum2);
//przeciążenie metod
static int PlusMethodInt(int x, int y)
{
return x + y;
}
static double PlusMethodDouble(double x, double y)
{
return x + y;
}
Zadania do samodzielnego rozwiązania
Rozwiązania powinny być zdefiniowane z wykorzystaniem metod i odpowiednio wywołane w głównej funkcji main.
Zadanie 1.
Napisz program obliczający wyróżnik delta i pierwiastki trójmianu kwadratowego.
Zadanie 1.
Napisz kalkulator obliczający: sumę, różnicę, iloczyn, iloraz, potęgę, pierwiastek, oraz wartości funkcji trygonometrycznych dla zadanego kąta. Użyj biblioteki Math np. Math.Sin(2.5). Proszę pamiętać, że wartości kąta podawane do funkcji mierzone są miarą łukową. Wyniki działania algorytmów wyświetlaj na konsoli. Do obsługi menu proszę użyć konstrukcji switch-case oraz pętli while.
Zadanie 1.
Napisz program umożliwiający wprowadzanie 10-ciu liczb rzeczywistych do tablicy. Następnie utwórz następujące funkcjonalności używając pętli for:
• Wyświetlanie tablicy od pierwszego do ostatniego indeksu.
• Wyświetlanie tablicy od ostatniego do pierwszego indeksu.
• Wyświetlanie elementów o nieparzystych indeksach.
• Wyświetlanie elementów o parzystych indeksach.
Wyniki działania algorytmów wyświetlaj na konsoli. Dla wyboru powyższych funkcjonalności programu utwórz odpowiednie menu. Do obsługi menu użyć rozbudowanej konstrukcji else-if oraz pętli do-while.
Zadanie 4.
Napisz program umożliwiający wprowadzanie 10-ciu liczb. Dla wprowadzonych liczb wykonaj odpowiednie algorytmy:
• oblicz sumę elementów tablicy,
• oblicz iloczyn elementów tablicy,
• wyznacz wartość średnią,
• wyznacz wartość minimalną,
• wyznacz wartość maksymalną.
Wyniki działania algorytmów wyświetlaj na konsoli.
Zadanie 5.
Napisz program wyświetlający liczby od 20-0, z wyłączeniem liczb {2,6,9,15,19}. Do realizacji zadania wyłączenia użyj instrukcji continue;
Zadanie 6.
Napisz program, który w nieskończoność pyta użytkownika o liczby całkowite. Pętla nieskończona powinna się zakończyć gdy użytkownik wprowadzi liczbę mniejszą od zera. Do opuszczenia pętli nieskończonej użyj instrukcji break. Pętle nieskończoną realizuje się następującymi konstrukcjami:
while(true)
{ ciało pętli } lub for(;;)
{ ciało pętli }
Zadanie 7.
Napisz program umożliwiający wprowadzanie n liczb oraz sortujący te liczby metodą bąbelkową lub wstawiania. Wyniki wyświetlaj na konsoli.