Compare commits

..

73 Commits

Author SHA1 Message Date
d43c1fedf4 Lab 2 formatting tweaks. 2023-06-21 01:21:29 +03:00
698bfe413e Lab 2 formatting tweaks. 2023-06-21 01:15:08 +03:00
59fc1ad596 Some IntelliJ auto stuff. 2023-06-21 00:35:08 +03:00
342b1d50b9 Lab 2 in Rust. 2023-06-21 00:33:57 +03:00
aadc3f5d05 Lab 6, documentation. 2023-06-10 20:47:59 +03:00
d5cd53f954 Lab 6, tweaks. 2023-06-08 13:47:22 +03:00
b00e090791 Lab 5, documentation. 2023-06-07 15:38:48 +03:00
f68dc1a8a7 Lab 6, working, undocumented. 2023-06-07 15:37:53 +03:00
59f315cacc Lab 5, rewrote for proper data structures. 2023-06-06 12:54:17 +03:00
d91c576ab3 Lab 5, technically working prototype. It's horrid, though. 2023-06-05 21:47:08 +03:00
49dfcfe457 Lab 5, technically working prototype. It's horrid, though. 2023-06-05 21:46:40 +03:00
8e430b94ae Lab 5, progress. 2023-06-05 19:05:22 +03:00
46d339f31e Lab 5, progress. 2023-06-05 17:11:49 +03:00
2ddeaab94f Lab 5, started. 2023-06-05 16:37:37 +03:00
2b8f88a45f Lab 3, cosmetic. 2023-06-05 16:37:15 +03:00
97b2b761e4 Lab 4, Kotlin. 2023-05-17 08:35:12 +03:00
4d538d2d04 Lab 4, Kotlin. 2023-05-13 14:31:07 +03:00
5f36bd41ae Upd. 2023-05-08 13:36:12 +03:00
499efa9c78 Upd. 2023-05-08 13:17:02 +03:00
2c8c807c01 Upd. 2023-05-08 13:15:26 +03:00
100398953a Slight rehash. 2023-05-08 10:53:20 +03:00
0d5e3d5ffe Slight rehash. 2023-05-08 10:51:54 +03:00
fd8c37c7cb Slight rehash. 2023-05-08 10:48:22 +03:00
a8cbadbe7d Added a Kotlin variation. 2023-05-07 23:15:50 +03:00
64c9e43742 Added a Kotlin variation. 2023-05-07 23:15:28 +03:00
5ca9ab6c17 Added a Kotlin variation. 2023-05-07 23:14:50 +03:00
a97f742be2 Added a Kotlin variation. 2023-05-07 23:14:24 +03:00
2494bea36c Camel case. 2023-05-07 22:20:31 +03:00
ca2b85ef9e . 2023-05-07 17:09:03 +03:00
77f96fafa6 Working model of Lab 3. 2023-05-07 17:07:56 +03:00
084f131c90 . 2023-05-07 16:46:18 +03:00
197426e266 Initial lab 3. 2023-05-07 15:19:23 +03:00
661c3641a1 Naming changes. 2023-05-07 15:19:06 +03:00
fc5704dd15 Cargo.toml added release profile. 2023-05-07 14:08:43 +03:00
45ef70b268 Finished lab_1 in Rust. 2023-05-07 09:26:25 +03:00
fe97b8dcde . 2023-05-06 23:56:34 +03:00
5c8d2bb8a1 . 2023-05-06 23:55:52 +03:00
6b6076f56c Merge branch 'ІО-23/30-Швед-Андрій-Дмитрович' of https://github.com/ASDjonok/OOP_IO-2x_2023 into ІО-23/30-Швед-Андрій-Дмитрович 2023-05-06 23:50:25 +03:00
9b08eb0dfc . 2023-05-06 23:50:22 +03:00
Rhinemann
9cce8b222e Delete Rust/lab_1/target directory 2023-05-06 23:47:52 +03:00
74209977bc . 2023-05-06 23:44:34 +03:00
83b275cefd . 2023-05-06 23:18:57 +03:00
af7af4d6f2 . 2023-05-06 23:09:06 +03:00
a4a3e09735 Lab 1. 2023-05-03 10:40:04 +03:00
acc2d533cb modified: Java/Lab 2/Lab_2.java 2023-05-03 10:39:06 +03:00
8013099c36 All sorts of corrections. 2023-05-03 10:32:23 +03:00
8100129706 Ceanup. 2023-05-02 11:42:37 +03:00
83d98b2982 Merge branch 'ІО-23/30-Швед-Андрій-Дмитрович' of https://github.com/ASDjonok/OOP_IO-2x_2023 into ІО-23/30-Швед-Андрій-Дмитрович 2023-05-02 11:40:28 +03:00
4af0ab5655 . 2023-05-02 11:38:55 +03:00
Rhinemann
07e9fbdc88 Delete Lab_2.class 2023-05-02 11:35:28 +03:00
Rhinemann
41aaaf4623 Delete Lab_1.class 2023-05-02 11:35:16 +03:00
99e9428dba Moved folders. 2023-05-02 11:34:34 +03:00
fe36219746 Update Lab 1. 2023-05-02 09:58:31 +03:00
896fc1f4d4 Minor cleanup 2023-04-26 14:37:46 +03:00
7fa667cb2d Changes 2023-04-26 14:34:13 +03:00
74a44852af Add Lab 2 2023-03-23 09:10:55 +02:00
Rhinemann
75112d90c2 Delete OOP_IO-2x_2023.iml 2023-03-23 08:59:27 +02:00
Rhinemann
e21575fa93 Delete .gitignore 2023-03-23 08:59:19 +02:00
Rhinemann
cf3d055f64 Delete src directory 2023-03-23 08:57:30 +02:00
Rhinemann
bdf5611f46 Delete .idea directory 2023-03-23 08:57:03 +02:00
Rhinemann
80de92fa1e Lab 1 commit 2023-03-22 17:02:31 +02:00
Oleksii Aleshchenko
14c58d0cc4 add lab2 2023-03-16 15:58:44 +02:00
Oleksii Aleshchenko
afc13cf9f8 add char example for lab1 2023-03-16 15:21:51 +02:00
Oleksii Aleshchenko
e910ee6e4d add final way of check division by zero for lab1 2023-03-16 15:07:48 +02:00
Oleksii Aleshchenko
6ab6cc17db add break with label (commented in line 34) and return for lab1 2023-03-16 15:00:12 +02:00
Oleksii Aleshchenko
25173d66d1 add flag "wasDivisionByZero" for lab1 2023-03-16 14:47:04 +02:00
Oleksii Aleshchenko
41ad598b79 add lab1 2023-03-09 16:01:01 +02:00
Oleksii Aleshchenko
13e1a61ad9 update Main with example for difference & and && 2023-03-02 16:07:34 +02:00
Oleksii Aleshchenko
f692ae7588 update polymorphism example 2023-03-02 15:48:38 +02:00
Oleksii Aleshchenko
429bcc7b3d add polymorphism example 2023-03-02 15:26:42 +02:00
Oleksii Aleshchenko
4b159fa22b update inheritance example 2023-03-02 14:41:44 +02:00
Oleksii Aleshchenko
2880b770f7 add inheritance example 2023-02-23 16:04:53 +02:00
Oleksii Aleshchenko
53a9d20438 Update Main.java 2023-02-23 14:30:35 +02:00
92 changed files with 815 additions and 1056 deletions

2
.gitignore vendored
View File

@@ -1,2 +0,0 @@
# Project exclude paths
/out/

33
Java/lab_1/lab_1.java Normal file
View File

@@ -0,0 +1,33 @@
package OOP.Java.lab_1;
import java.util.Scanner;
public class lab_1 {
public static int protectedInput(String variableToRead, Scanner input) {
do {
try {
System.out.printf("Enter %s: ", variableToRead);
return input.nextInt();
} catch (Exception e) {
System.out.printf("%s must be an integer.\n", variableToRead.toUpperCase());
input.nextLine();
}
} while (true);
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
final int n = protectedInput("n", input);
final int m = protectedInput("m", input);
final int a = protectedInput("a", input);
final int b = protectedInput("b", input);
input.close();
final float s = ((float) (b + m) / 2) * (m - b + 1) * (n - a + 1);
System.out.println("S = " + s);
}
}

23
Java/lab_1/lab_1.kt Normal file
View File

@@ -0,0 +1,23 @@
package OOP.Java.lab_1
fun protectedInput(variableName: String): Int {
do {
try {
print("Enter $variableName: ")
return readln().toInt()
} catch (e: Exception) {
println("${variableName.uppercase()} must be an integer!")
}
} while (true)
}
fun main() {
val n: Int = protectedInput("n")
val m: Int = protectedInput("m")
val a: Int = protectedInput("a")
val b: Int = protectedInput("b")
val s: Float = (b + m).toFloat() / 2 * (m - b + 1) * (n - a + 1)
println("S = $s")
}

109
Java/lab_2/lab_2.java Normal file
View File

@@ -0,0 +1,109 @@
package OOP.Java.lab_2;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import java.util.Scanner;
public class lab_2 {
public static short protectedInput(String inputPrompt, String errorMessage, Scanner input) {
short read_variable;
do {
try {
System.out.println();
System.out.print(inputPrompt);
read_variable = input.nextShort();
break;
} catch (Exception e) {
System.out.println(errorMessage);
input.nextLine();
}
} while (true);
return read_variable;
}
@NotNull
public static String format(int number) {
int width = String.valueOf(number).length() + 1;
return "|%" + width + "d ";
}
@Contract(pure = true)
public static double average(@NotNull short[] row) {
short sum = 0;
for (short element : row) {
sum += element;
}
return (double) sum / row.length;
}
public static void main(String[] args) {
short rows, columns;
Scanner input = new Scanner(System.in);
final short a = protectedInput("Input a constant to multiply a matrix by: ",
"A constant must be a short-data type integer, try again.", input);
System.out.println();
System.out.println("Input size of the matrix.");
do {
rows = protectedInput("Rows: ",
"A number of rows must be a short-data type integer, try again.", input);
} while (rows <= 0);
do {
columns = protectedInput("Columns: ",
"A number of columns must be a short-data type integer, try again.", input);
} while (columns <= 0);
input.close();
short[][] matrix_B = new short[rows][columns];
System.out.println();
System.out.println("Matrix B:");
String format = format(rows * columns);
for (short i = 0; i < rows; i++) {
for (short j = 0; j < columns; j++) {
matrix_B[i][j] = (short) ((i + 1) * (j + 1));
System.out.printf(format, matrix_B[i][j]);
}
System.out.println("|");
}
System.out.println();
System.out.println("Matrix a×B:");
format = format(rows * columns * a);
for (short i = 0; i < matrix_B.length; i++) {
for (short j = 0; j < matrix_B[i].length; j++) {
matrix_B[i][j] *= (a);
System.out.printf(format, matrix_B[i][j]);
}
System.out.println("|");
}
System.out.println();
System.out.println("Averages of each row:");
for (short[] row : matrix_B) {
System.out.println(average(row));
}
}
}

57
Java/lab_3/lab_3.java Normal file
View File

@@ -0,0 +1,57 @@
package OOP.Java.lab_3;
public class lab_3 {
static int maxStrLength;
static String result;
public static void cSubUtil(StringBuilder stringbuilder, int leftBoundary, int rightBoundary) {
String string = stringbuilder.toString().toLowerCase().replaceAll("[^a-z]","");
// check if the indices lie in the range of string
// and also if it is palindrome
while (leftBoundary >= 0 && rightBoundary < string.length() && string.toLowerCase().charAt(leftBoundary) == string.toLowerCase().charAt(rightBoundary)) {
// expand the boundary
leftBoundary--;
rightBoundary++;
}
// if it's length is greater than maxStrLength update
// maxLength and result
if (rightBoundary - leftBoundary - 1 >= maxStrLength) {
result = string.substring(leftBoundary + 1, rightBoundary);
maxStrLength = rightBoundary - leftBoundary - 1;
}
}
public static int longestPalSubstr(StringBuilder string)
{
result = "";
maxStrLength = 1;
// for every index in the string check palindromes
// starting from that index
for (int i = 0; i < string.length(); i++) {
// check for odd length palindromes
cSubUtil(string, i, i);
// check for even length palindromes
cSubUtil(string, i, i + 1);
}
System.out.println("Longest palindrome substring is: " + compareStrings(string));
return compareStrings(string).length();
}
public static String compareStrings(StringBuilder builder) {
for (int leftBoundary = 0; leftBoundary <= builder.length(); leftBoundary++) {
for (int rightBoundary = builder.length(); rightBoundary >= leftBoundary; rightBoundary--) {
if (result.equals(builder.substring(leftBoundary, rightBoundary).toLowerCase().replaceAll("[^a-z]",""))) {
return builder.substring(leftBoundary, rightBoundary);
}
}
}
return "";
}
public static void main(String[] args) {
StringBuilder stringToDetect = new StringBuilder("Eva, can I see bees in a cave?");
System.out.println("Initial string: " + stringToDetect);
System.out.println("Length is: " + longestPalSubstr(stringToDetect));
}
}

11
Java/lab_4/Furniture.kt Normal file
View File

@@ -0,0 +1,11 @@
package OOP.Java.lab_4
class Furniture(val name: String, val material: String, val price: Int, val length: Int, val width: Int, val height: Int) {
fun print(nameWidth: Int, materialWidth: Int, priceWidth: Int){
print("Furniture stats: {")
print("Name: ${this.name.padEnd(nameWidth)} ")
print("Material: ${this.material.padEnd(materialWidth)} ")
print("Price: ${(this.price.toString() + " cu").padEnd(priceWidth + 3)} ")
print("Size: ${this.length}×${this.width}×${this.height}};\n")
}
}

26
Java/lab_4/lab_4.kt Normal file
View File

@@ -0,0 +1,26 @@
package OOP.Java.lab_4
fun main() {
val furnitureArray = arrayOf(
Furniture("Chair", "Wood", 10, 5, 5, 10),
Furniture("Counter-top", "Marble", 1_000, 10, 5, 1),
Furniture("Dinner table", "Glass", 500, 15, 10, 1),
Furniture("Office table", "Wood", 200, 10, 7, 1),
Furniture("Refrigerator", "Stainless steel", 20_000, 8, 4, 10)
)
val maxNameWidth = furnitureArray.maxWith(Comparator.comparingInt { it.name.length }).name.length
val maxMaterialWidth = furnitureArray.maxWith(Comparator.comparingInt { it.material.length }).material.length
val maxPriceWidth = furnitureArray.maxWith(Comparator.comparingInt { it.price }).price.toString().length
println("\nUnsorted array:")
for (item in furnitureArray) item.print(maxNameWidth, maxMaterialWidth, maxPriceWidth)
println("\nSorted alphabetically by name:")
furnitureArray.sortBy { it.name }
for (item in furnitureArray) item.print(maxNameWidth, maxMaterialWidth, maxPriceWidth)
println("\nSorted alphabetically by material:")
furnitureArray.sortBy { it.material }
for (item in furnitureArray) item.print(maxNameWidth, maxMaterialWidth, maxPriceWidth)
}

23
Java/lab_5/Letter.kt Normal file
View File

@@ -0,0 +1,23 @@
package OOP.Java.lab_5
/**
* A class representing a single letter in a word.
*
* @property character a character value of a Letter.
*/
class Letter(private val character: Char) {
override fun toString(): String {
return this.character.toString()
}
/**
* Indicates whether the two objects of class Letter are "equal".
*
* @param letter a letter to compare.
* @param ignoreCase if set to "true" will ignore the case of Letters compared.
* @return "true" if letters are equal and "false" if they aren't.
*/
fun letterEquals(letter: Letter, ignoreCase: Boolean): Boolean {
return this.character.toString().equals(letter.toString(), ignoreCase)
}
}

19
Java/lab_5/Punctuation.kt Normal file
View File

@@ -0,0 +1,19 @@
package OOP.Java.lab_5
/**
* A class representing a punctuation mark following a word or a sentence.
*
* @property punctuationMark a [String] value of a punctuation mark.
*/
class Punctuation(var punctuationMark: String) {
init {
if (!"\\p{Punct}".toRegex().containsMatchIn(punctuationMark)) {
this.punctuationMark = ""
}
}
override fun toString(): String {
return punctuationMark
}
}

35
Java/lab_5/Sentence.kt Normal file
View File

@@ -0,0 +1,35 @@
package OOP.Java.lab_5
/**
* A class representing a single sentence is a text.
*
* @property sentenceArray a [Pair] of [Array]s of [Word] and [Punctuation] objects that make up a sentence.
*
* @constructor a primary constructor accepts a [Pair] of [Array]s of [Word] and [Punctuation] objects, a secondary one accepts a string representing the entire sentence.
*/
class Sentence(var sentenceArray: Pair<Array<Word>, Array<Punctuation>>) {
constructor(
sentenceString: String
) : this(
Pair(
sentenceString.split("[\\p{Punct}\\s]+".toRegex()).filter { it.isNotEmpty() }.map { word -> Word(word) }.toTypedArray(),
sentenceString.split(" ").map { word -> Punctuation(word.last().toString()) }.toTypedArray()
)
)
/**
* Returns an array of all [Letter] objects in a sentence.
*/
fun getAllLetters(): Array<Letter> {
var allLetters = arrayOf<Letter>()
this.sentenceArray.first.forEach { allLetters += it.letters }
return allLetters
}
override fun toString(): String {
var sentence = arrayOf<String>()
this.sentenceArray.first.indices.forEach {sentence += this.sentenceArray.first[it].toString() + this.sentenceArray.second[it].toString() }
return sentence.joinToString(" ")
}
}

83
Java/lab_5/Text.kt Normal file
View File

@@ -0,0 +1,83 @@
package OOP.Java.lab_5
/**
* A class representing the entire text.
*
* @property textArray a [Pair] of [Array]s of [Sentence] and [Punctuation] objects that make up a text.
*
* @constructor a primary constructor accepts a [Pair] of [Array]s of [Sentence] and [Punctuation] objects, a secondary one accepts a string representing the entire text.
*/
class Text(var textArray: Pair<Array<Sentence>, Array<Punctuation>>) {
constructor(
textString: String
) : this(
Pair(
textString.split("[.!?] ?".toRegex()).filter { it.isNotEmpty() }.map { sentence -> Sentence(sentence) }.toTypedArray(),
textString.split("(?<=[.!?]) ?".toRegex()).filter { it.isNotEmpty() }.map { sentence -> Punctuation(sentence.last().toString()) }.toTypedArray()
)
)
/**
* Returns an array of all [Letter] objects in a sentence.
*/
private fun getAllLetters(): Array<Letter> {
var allLetters = arrayOf<Letter>()
this.textArray.first.forEach { allLetters += it.getAllLetters() }
return allLetters
}
/**
* Searches for the longest palindromic substring in a given text.
*
* @return the longest palindromic substring found.
*/
fun palindromeSearch(): String {
var result = " "
val letters = this.getAllLetters()
for (leftBoundary in letters.indices) {
for (rightBoundary in letters.lastIndex downTo leftBoundary + 1) {
val subToC = letters.sliceArray(leftBoundary..rightBoundary)
if (subToC.first().letterEquals(subToC.last(), true) && this.checkReverse(subToC) && subToC.size > result.length) {
result = subToC.joinToString("")
}
}
}
return result
}
/**
* Checks if a given substring is a palindrome.
*
* Is not case-sensitive.
*
* @param substring an [Array] of [Letter] objects representing a substring.
*
* @return "true" is a substring given is a palindrome, "false" if it isn't.
*/
private fun checkReverse(substring: Array<Letter>): Boolean {
var leftBoundary = 0
var rightBoundary = substring.lastIndex
var result = false
val correction = substring.size % 2
while (leftBoundary < substring.size / 2 && rightBoundary >= substring.size / 2 + correction) {
leftBoundary++
rightBoundary--
result = substring[leftBoundary].letterEquals(substring[rightBoundary], true)
}
return result
}
override fun toString(): String {
var text = arrayOf<String>()
this.textArray.first.indices.forEach { text += this.textArray.first[it].toString() + this.textArray.second[it].toString() }
return text.joinToString(" ")
}
}

22
Java/lab_5/Word.kt Normal file
View File

@@ -0,0 +1,22 @@
package OOP.Java.lab_5
/**
* A class representing a single word is a sentence.
*
* @property letters an array of [Letter] objects that make up a word.
*
* @constructor a primary constructor accepts an array of [Letter] objects, a secondary one accepts a string representing the entire word.
*/
class Word(var letters: Array<Letter>) {
override fun toString(): String {
val wordString = StringBuilder()
this.letters.forEach { wordString.append(it) }
return wordString.toString()
}
constructor(
word: String
) : this((word.toCharArray().map { letter -> Letter(letter) }).toTypedArray())
}

33
Java/lab_6/Album.kt Normal file
View File

@@ -0,0 +1,33 @@
package OOP.Java.lab_6
import kotlin.time.Duration
/**
* Represents an album by a specific artist, containing multiple tracks.
*
* @property albumName The name of the album.
* @property artist The artist or band associated with the album.
* @property tracks An [Array] of tracks included on the album.
*/
class Album(val albumName: String, val artist: String, val tracks: Array<Track>) {
/**
* Returns an array of tracks within the specified duration range.
*/
fun tracksInDurationRange(durationRange: ClosedRange<Duration>): Array<Track> {
return this.tracks.filter { it.duration in durationRange }.toTypedArray()
}
/**
* Returns the total duration of all tracks on the album.
*/
fun totalDuration(): Duration {
var totalDuration: Duration = Duration.ZERO
this.tracks.forEach { totalDuration += it.duration }
return totalDuration
}
override fun toString(): String {
return "${this.albumName} by ${this.artist}\nTotal duration: ${this.totalDuration()}\nTracks:\n${this.tracks.joinToString("\n")}"
}
}

15
Java/lab_6/Dancepop.kt Normal file
View File

@@ -0,0 +1,15 @@
package OOP.Java.lab_6
import kotlin.time.Duration
/**
* Represents a track in the Dance-pop style.
*
* @param numberInAlbum The position of the track on the album.
* @param trackName The name of the track.
* @param feature The featured artist(s) in the track (nullable if no featured artist).
* @param duration The [Duration] of the track.
*/
class Dancepop(numberInAlbum: Int, trackName: String, feature: String?, duration: Duration): Track(numberInAlbum, trackName, feature, duration) {
override val style = "Dance-pop"
}

15
Java/lab_6/Electropop.kt Normal file
View File

@@ -0,0 +1,15 @@
package OOP.Java.lab_6
import kotlin.time.Duration
/**
* Represents a track in the Electropop style.
*
* @param numberInAlbum The position of the track on the album.
* @param trackName The name of the track.
* @param feature The featured artist(s) in the track (nullable if no featured artist).
* @param duration The [Duration] of the track.
*/
class Electropop(numberInAlbum: Int, trackName: String, feature: String?, duration: Duration): Track(numberInAlbum, trackName, feature, duration) {
override val style = "Electropop"
}

15
Java/lab_6/Interlude.kt Normal file
View File

@@ -0,0 +1,15 @@
package OOP.Java.lab_6
import kotlin.time.Duration
/**
* Represents an interlude track.
*
* @param numberInAlbum The position of the track on the album.
* @param trackName The name of the track.
* @param feature The featured artist(s) in the track (nullable if no featured artist).
* @param duration The [Duration] of the track.
*/
class Interlude(numberInAlbum: Int, trackName: String, feature: String?, duration: Duration): Track(numberInAlbum, trackName, feature, duration) {
override val style = "Interlude"
}

15
Java/lab_6/Synthpop.kt Normal file
View File

@@ -0,0 +1,15 @@
package OOP.Java.lab_6
import kotlin.time.Duration
/**
* Represents a track in the Synth-pop style.
*
* @param numberInAlbum The position of the track on the album.
* @param trackName The name of the track.
* @param feature The featured artist(s) in the track (nullable if no featured artist).
* @param duration The [Duration] of the track.
*/
class Synthpop(numberInAlbum: Int, trackName: String, feature: String?, duration: Duration): Track(numberInAlbum, trackName, feature, duration) {
override val style = "Synth-pop"
}

27
Java/lab_6/Track.kt Normal file
View File

@@ -0,0 +1,27 @@
package OOP.Java.lab_6
import kotlin.time.Duration
/**
* Represents a track on an album.
*
* @param numberInAlbum The position of the track on the album.
* @param trackName The name of the track.
* @param feature The featured artist(s) in the track (nullable if no featured artist).
* @param duration The [Duration] of the track.
*/
open class Track(val numberInAlbum: Int, val trackName: String, val feature: String?, val duration: Duration) {
/**
* The style or genre of the track.
*/
open val style = ""
override fun toString(): String {
return if (this.feature == null) {
"#${this.numberInAlbum}: ${this.trackName} (${this.duration})"
} else {
"#${this.numberInAlbum}: ${this.trackName} ft. ${this.feature} (${this.duration})"
}
}
}

42
Java/lab_6/main.kt Normal file
View File

@@ -0,0 +1,42 @@
package OOP.Java.lab_6
import kotlin.time.Duration.Companion.minutes
import kotlin.time.Duration.Companion.seconds
fun main() {
val chromatica = Album(
"Chromatica",
"Lady Gaga",
arrayOf(
Interlude(1, "Chromatica I", null, 1.minutes),
Synthpop(2, "Alice", null, 2.minutes + 57.seconds),
Dancepop(3, "Stupid Love", null, 3.minutes + 13.seconds),
Dancepop(4, "Rain On Me", "Ariana Grande", 3.minutes + 2.seconds),
Synthpop(5, "Free Woman", null, 3.minutes + 11.seconds),
Electropop(6, "Fun Tonight", null, 2.minutes + 53.seconds),
Interlude(7, "Chromatica II", null, 41.seconds),
Synthpop(8, "911", null, 2.minutes + 52.seconds),
Electropop(9, "Plastic Doll", null, 3.minutes + 41.seconds),
Dancepop(10, "Sour Candy", "Blackpink", 2.minutes + 37.seconds),
Dancepop(11, "Enigma", null, 2.minutes + 59.seconds),
Synthpop(12, "Replay", null, 3.minutes + 6.seconds),
Interlude(13, "Chromatica III", null, 27.seconds),
Electropop(14, "Sine From Above", "Elton John", 4.minutes + 4.seconds),
Synthpop(15, "1000 Doves", null, 3.minutes + 35.seconds),
Dancepop(16, "Babylon", null, 2.minutes + 41.seconds)
)
)
println("$chromatica\n")
println("${chromatica.albumName} tracks sorted by musical style:\n${chromatica.tracks.sortedBy { it.style }.joinToString("\n")}\n")
val durationRange = 1.minutes.. 3.minutes + 30.seconds
println(
"${chromatica.albumName} tracks in a duration range ($durationRange):\n${chromatica.tracksInDurationRange(durationRange).joinToString("\n")}"
)
}

16
Rust/lab_1/Cargo.lock generated Normal file
View File

@@ -0,0 +1,16 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "lab_1"
version = "0.1.0"
dependencies = [
"text_io",
]
[[package]]
name = "text_io"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d5f0c8eb2ad70c12a6a69508f499b3051c924f4b1cfeae85bfad96e6bc5bba46"

9
Rust/lab_1/Cargo.toml Normal file
View File

@@ -0,0 +1,9 @@
[package]
name = "lab_1"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
text_io = "0.1.12"

22
Rust/lab_1/src/main.rs Normal file
View File

@@ -0,0 +1,22 @@
fn protected_read(variable_name: &str) -> i32 {
use text_io::try_read;
loop {
print!("Enter {}: ", variable_name);
let read_result: Result<i32, _> = try_read!();
match read_result {
Ok(read_integer) => return read_integer,
Err(_e) => println!("{} must be an integer!", variable_name.to_uppercase()),
}
}
}
fn main() {
let n: i32 = protected_read("n");
let m: i32 = protected_read("m");
let a: i32 = protected_read("a");
let b: i32 = protected_read("b");
let s: f32 = ((b + m) as f32 / 2f32) * ((m - b + 1) * (n - a + 1)) as f32;
println!("S = {}", s);
}

16
Rust/lab_2/Cargo.lock generated Normal file
View File

@@ -0,0 +1,16 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "lab_2"
version = "0.1.0"
dependencies = [
"text_io",
]
[[package]]
name = "text_io"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d5f0c8eb2ad70c12a6a69508f499b3051c924f4b1cfeae85bfad96e6bc5bba46"

9
Rust/lab_2/Cargo.toml Normal file
View File

@@ -0,0 +1,9 @@
[package]
name = "lab_2"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
text_io = "0.1.12"

140
Rust/lab_2/src/main.rs Normal file
View File

@@ -0,0 +1,140 @@
// #[allow(dead_code)]
fn capitalise(s: &str) -> String {
let mut c = s.chars();
match c.next() {
None => String::new(),
Some(f) => f.to_uppercase().collect::<String>() + c.as_str(),
}
}
fn read_row() -> Vec<i16> {
loop {
print!("Row (separated by spaces): ");
let raw_row: String = text_io::read!("{}\n");
let trimmed_row: &str = raw_row.trim();
match trimmed_row.split(" ").all(|value| {
value.chars().all(|char| char.is_numeric() || char == '-')
&& value.parse::<i32>().unwrap() <= i16::MAX as i32
&& value.parse::<i32>().unwrap() >= i16::MIN as i32
}) {
true => {
return trimmed_row
.split(" ")
.map(|value| value.parse::<i16>().unwrap())
.collect::<Vec<i16>>()
}
false => println!("[Error] The row must consist of short integers, try again."),
}
}
}
fn generate_row(row_index: u16, length: u16) -> Vec<i16> {
return (0..length)
.map(|element_index| (element_index as i16 + 1) * (row_index as i16 + 1))
.collect();
}
fn read_matrix() -> Vec<Vec<i16>> {
let rows: u16 = protected_u16_read("the number of rows");
loop {
print!("Generate [s]quare or [r]ectangle matrix or [i]nput manually [s/r/i]: ");
let option: String = text_io::read!();
match option.to_lowercase().as_str() {
"s" => return (0..rows).map(|i| generate_row(i, rows)).collect(),
"r" => {
let columns: u16 = protected_u16_read("the number of columns");
return (0..rows).map(|i| generate_row(i, columns)).collect();
}
"i" => return (0..rows).map(|_| read_row()).collect(),
_ => println!("[Error] Not an option, try again."),
}
}
}
fn protected_u16_read(variable_name: &str) -> u16 {
use text_io::try_read;
loop {
print!("Enter {}: ", variable_name);
let read_result: Result<u16, _> = try_read!();
match read_result {
Ok(read_integer) => return read_integer,
Err(_e) => println!(
"{} must be a short integer, try again.",
capitalise(variable_name)
),
}
}
}
fn multiply_matrix_by_number(matrix: &Vec<Vec<i16>>, multiplier: u16) -> Vec<Vec<i16>> {
return matrix
.iter()
.map(|row| {
row.iter()
.map(|element| element * multiplier as i16)
.collect()
})
.collect();
}
fn average_of_row(row: &Vec<i16>) -> f32 {
return row.iter().sum::<i16>() as f32 / row.len() as f32;
}
fn format_matrix(matrix: &Vec<Vec<i16>>) -> String {
let max_width = matrix
.iter()
.map(|row| {
row.iter()
.map(|element| element.to_string().len())
.max()
.unwrap()
})
.max()
.unwrap();
let mut formatted_matrix: String = matrix
.iter()
.map(|row| {
row.iter()
.map(|element| format!("| {:max_width$} ", element))
.collect::<Vec<String>>()
.join("")
})
.collect::<Vec<String>>()
.join("|\n");
formatted_matrix.push('|');
return formatted_matrix;
}
fn format_column(column: &Vec<f32>) -> String {
let max_width = column
.iter()
.map(|element| element.to_string().len())
.max()
.unwrap();
return column
.iter()
.map(|element| format!("| {:max_width$} |", element))
.collect::<Vec<String>>()
.join("\n");
}
fn main() {
let full_vec_test: Vec<Vec<i16>> = read_matrix();
println!("\nMatrix B:\n{}\n", format_matrix(&full_vec_test));
let mult_full_vec_test: Vec<Vec<i16>> =
multiply_matrix_by_number(&full_vec_test, protected_u16_read("matrix multiplier"));
println!("Matrix a×B:\n{}\n", format_matrix(&mult_full_vec_test));
let row_averages: Vec<f32> = mult_full_vec_test
.iter()
.map(|row| average_of_row(row))
.collect();
println!(
"Averages for each row in a×B:\n{}",
format_column(&row_averages)
);
}

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

Binary file not shown.

View File

@@ -1,21 +0,0 @@
public class Main {
public static void main(String[] args) {
float s = 0.0f, a = 2.0f, b = 1.0f, m = 6.0f, n = 4.0f;
int c = 1;
for (float i = a; i <= m; i++) {
// Перевірка ділення на 0.
if (i == -1) {
System.out.println("Помилка: ділення на нуль не можливе.");
return;
}
for (float j = b; j <= n; j++) {
s += (i + j) / (i + c);
}
}
System.out.println("S = " + s);
}
}

Binary file not shown.

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

Binary file not shown.

View File

@@ -1,59 +0,0 @@
public class Main {
public static void main(String[] args) {
// Створення матриць.
char[][] a = {
{12, 4, 8, 11},
{16, 9, 3, 13},
{7, 11, 16, 15}
};
char[][] b = {
{15, 12, 4, 5},
{19, 1, 3, 11},
{2, 11, 6, 10}
};
System.out.println("Матриця A: ");
for (char[] i : a) {
for (char j : i) {
/* При виведенні елементів ми додаємо пробіли на кінці
цілого числа (%-4d) задля легшого читання матриці.
*/
System.out.printf("%-4d", (int) j);
}
System.out.println();
}
System.out.println("\nМатриця B: ");
for (char[] i : b) {
for (char j : i) {
System.out.printf("%-4d", (int) j);
}
System.out.println();
}
// Перевірка на те, чи є матриці однакових форм.
if (a[0].length != b[0].length || a.length != b.length) {
System.out.println("Матриці А і В мають різні форми.");
} else {
int[][] c = new int[a.length][a[0].length];
float sum = 0;
System.out.println("\nМатриця С: ");
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
c[i][j] = (byte) a[i][j] ^ (byte) b[i][j];
sum += c[i][j];
System.out.printf("%-4d", c[i][j]);
}
System.out.println();
}
float average = sum / (c.length * c[0].length);
System.out.printf("\nСереднє значення матриці С: %.3f", average);
}
}
}

Binary file not shown.

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

Binary file not shown.

View File

@@ -1,54 +0,0 @@
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
StringBuffer text = new StringBuffer(scanner.nextLine());
String str_text = text.toString();
// Заміна ? й ! на .
str_text = str_text.replaceAll("[?!]", ".");
// Очищення від спеціальних символів.
str_text = str_text.replaceAll("\"", "");
str_text = str_text.replaceAll("-", "");
str_text = str_text.replaceAll("[,':;^*&%$#@]", "");
// Створення масиву з речень.
String[] spl_text = str_text.split("\\.");
// Перевірка на кількість речень.
if (spl_text.length == 0 || spl_text.length == 1) {
System.out.println("Не вдалося виконати дію з рядками (було введено одне речення або взагалі нічого)");
return;
}
System.out.println("Слова першого речення, яких немає у жодному з наступних:");
for (String st : spl_text[0].split(" ")) {
int index = 0;
for (int i = 1; i < spl_text.length; i++) {
// Усунення кейсу з регістром, усунення пробілів.
if (Arrays.asList(spl_text[i].toLowerCase().trim().split(" ")).contains(st.trim().toLowerCase())) {
index = 1;
break;
}
}
// Перевірка на те, чи було дане слово хоча б в одному реченні.
if (index == 0) {
System.out.println(st.trim().toLowerCase());
}
}
}
}
/* [Input]
"У молодості я взяв собі за правило не пити ні краплі спиртного до обіду. Тепер, коли я вже немолодий, я тримаюся правила не пити ні краплі спиртного до сніданку". - Вінстон Черчилль
[Output]
у
молодості
взяв
собі
за
правило
обіду
*/

Binary file not shown.

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -1,40 +0,0 @@
package lab4;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
// Створення об'єктів класу Student.
Student First = new Student("Михайло", "Гордун", 21, "ІПСА", true);
Student Second = new Student("Дмитро", "Шарій", 19, "ТЕФ", false);
Student Third = new Student("Аліна", "Шарій", 18, "ЕФ", false);
Student Fourth = new Student("Назар", "Лоленко", 17, "ФІОТ", true);
Student Fifth = new Student("Олександра", "Зеленська", 18, "ФМВ", true);
// Створення масиву об'єктів класу Student.
Student[] ObjArray = new Student[] {First, Second, Third, Fourth, Fifth};
// Сортування по алфавіту (прізвище ім'я).
Arrays.sort(ObjArray, new Sorting.SortByAlphabet());
System.out.println("\nСортування за алфавітом (зростання):");
for (Student Student : ObjArray) {
System.out.println(Student.lastName + " " + Student.firstName);
}
/* Сортування по віці (спадання).
Масив сортує масив по зростанню, але в циклі ітерація
проходить навпаки, тим самим виводячи елементи з кінця
до початку.
*/
Arrays.sort(ObjArray, new Sorting.SortByAge());
System.out.println("\nСортування за віком (спадання):");
for (int i = ObjArray.length-1; i >= 0; i--) {
System.out.print(ObjArray[i].lastName + " ");
System.out.print(ObjArray[i].firstName);
System.out.println(", вік: " + ObjArray[i].age);
}
}
}

View File

@@ -1,52 +0,0 @@
package lab4;
import java.util.Comparator;
public class Sorting {
// Непорушний клас, створений на основі абстратного класу Comparator.
public static class SortByAlphabet implements Comparator<Student> {
/* Реалізація методу compare().
Метод compare(Object o1, Object 02) є одним із абстрактних методів
класу Comparator. Нам потрібно або зробити наш клас абстактним, або
реалізувати даний метод. Якщо ж оголосити клас SortByAlphabet
абстрактним, ми не зможемо створити на основі його об'єкт, тому
вибір очевидний - реалізація методу.
*/
@Override
public int compare(Student st1, Student st2) {
/* Якщо в нас буде 2 однакових прізвища на порівняння, нам потрібно
порівнювати імена аби сортування по алфавіту було правильним.
*/
if (st1.lastName.compareTo(st2.lastName) == 0) {
return st1.firstName.compareTo(st2.firstName);
} else {
return st1.lastName.compareTo(st2.lastName);
}
}
}
// Непорушний клас, створений на основі абстратного класу Comparator.
public static class SortByAge implements Comparator<Student> {
// Аналогічно тут, реалізуємо метод compare().
@Override
public int compare(Student st1, Student st2) {
/* Метод compareTo() приймає лише дані типу String, тому
ми перетворюємо вік з int в String. Звісно ж це може привести
до неточності. Числа будуть порівнюватись спочатку по перших
цифрах, потім по других і тд. Якщо в нас буде, наприклад вік
107 і 18 на порівнянні, прогрма порахує, що 18 > 107 по
порядку. Тут цим знехтується, адже я сумніваюсь що існують
студенти яким >100 років.
*/
String age1 = Integer.toString(st1.age);
String age2 = Integer.toString(st2.age);
return age1.compareTo(age2);
}
}
}

View File

@@ -1,44 +0,0 @@
package lab4;
public class Student {
// Створення полів класу.
public String firstName;
public String lastName;
public int age;
private String faculty;
private boolean hasStipend;
// Конструктор класу.
public Student(String fn, String ln, int age, String fac, boolean wealth) {
setValues(fn, ln, age, fac, wealth);
getValues();
}
/* Метод, який нічого не повертає.
Визначає поля класу.
*/
private void setValues(String fn, String ln, int age, String fac, boolean wealth) {
this.firstName = fn;
this.lastName = ln;
this.age = age;
this.faculty = fac;
this.hasStipend = wealth;
}
/* Метод, який нічого не повертає.
Виводить значення полів.
*/
private void getValues() {
System.out.println("Прізвище та ім'я: " + this.lastName + " " + this.firstName);
System.out.println("Вік: " + this.age);
System.out.println("Факультет: " + this.faculty);
System.out.print("Наявність стипендії: ");
if (this.hasStipend)
System.out.println("є");
else
System.out.println("немає");
System.out.println("~".repeat(40));
}
}

Binary file not shown.

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -1,5 +0,0 @@
package lab5;
public record Letter(char value) {
}

View File

@@ -1,38 +0,0 @@
package lab5;
import java.util.*;
public class Main {
public static void main(String[] args) {
String inputText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam tempor dictum velit, vitae sollicitudin mauris facilisis et. Praesent mi odio, pretium eget sem ac, ultricies eleifend elit. Maecenas vulputate efficitur risus, a ornare lorem sollicitudin vitae. Pellentesque rhoncus posuere risus eu placerat. Maecenas luctus felis ac interdum sodales. Quisque nec est lectus.";
// Створений Text об'єкт
Text text = new Text(inputText);
// Пошук у першому реченні слів, яких немає в наступних реченнях
List<String> result = findUniqueWords(text);
System.out.println("Unique words in the first sentence: " + result);
}
public static List<String> findUniqueWords(Text text) {
if (text.getSentences().isEmpty()) {
throw new IllegalArgumentException("Text must contain at least one sentence.");
}
Sentence firstSentence = text.getSentences().get(0);
List<String> wordsInFirstSentence = firstSentence.getStringWords();
Set<String> uniqueWords = new HashSet<>(wordsInFirstSentence);
for (int i = 1; i < text.getSentences().size(); i++) {
Sentence sentence = text.getSentences().get(i);
List<String> wordsInCurrentSentence = sentence.getStringWords();
wordsInCurrentSentence.forEach(uniqueWords::remove);
}
return new ArrayList<>(uniqueWords);
}
}

View File

@@ -1,5 +0,0 @@
package lab5;
public record Punctuation(char value) {
}

View File

@@ -1,62 +0,0 @@
package lab5;
import java.util.ArrayList;
import java.util.List;
public class Sentence {
private final List<Object> wordsAndPunctuations;
public Sentence(String stringSentence) {
List<Object> wordsAndPunctuations = new ArrayList<>();
StringBuilder word = new StringBuilder();
for (int i = 0; i < stringSentence.length(); i++) {
char ch = stringSentence.charAt(i);
if (Character.isLetterOrDigit(ch)) {
word.append(ch);
} else if (Character.isWhitespace(ch)) {
if (word.length() > 0) {
wordsAndPunctuations.add(new Word(word.toString()));
word.setLength(0);
}
} else if (String.valueOf(ch).matches(".*\\p{Punct}.*")) {
if (word.length() > 0) {
wordsAndPunctuations.add(new Word(word.toString()));
word.setLength(0);
}
wordsAndPunctuations.add(new Punctuation(ch));
}
}
if (word.length() > 0) {
wordsAndPunctuations.add(new Word(word.toString()));
}
this.wordsAndPunctuations = wordsAndPunctuations;
}
public List<Object> getWordsAndPunctuations() {
return wordsAndPunctuations;
}
public List<Word> extractWords() {
List<Word> words = new ArrayList<>();
for (Object element : getWordsAndPunctuations()) {
if (element instanceof Word) {
words.add((Word) element);
}
}
return words;
}
public List<String> getStringWords() {
List<String> wordStrings = new ArrayList<>();
for (Word word : extractWords()) {
wordStrings.add(word.getStringWord());
}
return wordStrings;
}
}

View File

@@ -1,21 +0,0 @@
package lab5;
import java.util.ArrayList;
import java.util.List;
public class Text {
private final List<Sentence> sentences;
public Text(String stringText) {
this.sentences = new ArrayList<>();
String[] splitText = stringText.split("(?<=[!.?])\\s*");
for (String sentence : splitText) {
getSentences().add(new Sentence(sentence));
}
}
public List<Sentence> getSentences() {
return sentences;
}
}

View File

@@ -1,28 +0,0 @@
package lab5;
import java.util.ArrayList;
import java.util.List;
public class Word {
private final String stringWord;
private final List<Letter> letters;
public Word(String stringWord) {
List<Letter> letters = new ArrayList<>();
char[] chars = stringWord.toCharArray();
for (char c : chars) {
letters.add(new Letter(c));
}
this.letters = letters;
this.stringWord = stringWord;
}
public List<Letter> getLetters() {
return letters;
}
public String getStringWord() {
return stringWord;
}
}

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -1,17 +0,0 @@
package lab6;
public class Bmw extends Car {
public String mark = "BMW";
public Bmw(String _model, float speed, int price, int year, float fuel, float engineCapacity, String country) {
super(_model, speed, price, year, fuel, engineCapacity, country);
}
@Override
public void printValues() {
System.out.println("Марка: BMW");
super.printValues();
}
}

View File

@@ -1,40 +0,0 @@
package lab6;
import java.util.Comparator;
public class Car {
protected String _model;
protected float speed;
protected int price;
protected int year;
protected float fuel;
protected float engineCapacity;
protected String country;
public Car(String _model, float speed, int price, int year, float fuel, float engineCapacity, String country) {
setValues(_model, speed, price, year, fuel, engineCapacity, country);
printValues();
}
public void setValues(String _m, float s, int p, int y, float f, float e, String c) {
this._model = _m;
this.speed = s;
this.price = p;
this.year = y;
this.fuel = f;
this.engineCapacity = e;
this.country = c;
}
public void printValues() {
System.out.println("Модель: " + _model + " " + year);
System.out.println("Максимальна швидкість: " + speed + "км/год");
System.out.println("Ціна: " + price + "$");
System.out.println("Витрати палива: " + fuel + "л/100км");
System.out.println("Об'єм двигуна: " + engineCapacity);
System.out.println("Країна-виробник: " + country);
System.out.println("~".repeat(40));
}
}

View File

@@ -1,17 +0,0 @@
package lab6;
public class Ford extends Car {
public String mark = "Ford";
public Ford(String _model, float speed, int price, int year, float fuel, float engineCapacity, String country) {
super(_model, speed, price, year, fuel, engineCapacity, country);
}
@Override
public void printValues() {
System.out.println("Марка: Ford");
super.printValues();
}
}

View File

@@ -1,17 +0,0 @@
package lab6;
public class Lexus extends Car {
public String mark = "Lexus";
public Lexus(String _model, float speed, int price, int year, float fuel, float engineCapacity, String country) {
super(_model, speed, price, year, fuel, engineCapacity, country);
}
@Override
public void printValues() {
System.out.println("Марка: Lexus\nМатеринська компанія: Toyota");
super.printValues();
}
}

View File

@@ -1,55 +0,0 @@
package lab6;
/*
Номер заліковї книжки - 2518.
Завдання:
9)Визначити ієрархію легкових автомобілів. Створити таксопарк.
Порахувати вартість автопарку. Провести сортування автомобілів
парку за витратами палива. Знайти автомобіль у компанії, що
відповідає заданому діапазону швидкості автомобіля.
*/
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println(" ".repeat(15) + "Таксопарк" + " ".repeat(15));
System.out.println("~".repeat(40));
Volkswagen Car1 = new Volkswagen("Golf 4", 224, 5000, 2001, 6.8f, 1.6f, "Німеччина");
Volkswagen Car2 = new Volkswagen("Passat", 240, 15000, 2007, 7.0f, 2.0f, "Німеччина");
Toyota Car3 = new Toyota("Prius", 231, 12500, 2014, 4.3f, 1.8f, "Японія");
Peguot Car4 = new Peguot("308", 220, 12000, 2007, 6.1f, 1.6f, "Франція");
Lexus Car5 = new Lexus("LS", 250, 80000, 2022, 10.9f, 3.5f, "Японія");
Skoda Car6 = new Skoda("Octavia", 220, 25000, 2022, 6.2f, 1.5f, "Чехія");
Ford Car7 = new Ford("Focus", 242, 7800, 2014, 6.9f, 2.0f, "США");
Bmw Car8 = new Bmw("5-Series", 250, 50000, 2018, 8.3f, 3.0f, "Німеччина");
Car[] CarList = new Car[] {Car1, Car2, Car3, Car4, Car5, Car6, Car7, Car8};
/*
Використовується лямбда функція, щоб описати компаратор в Arrays.sort().
*/
java.util.Arrays.sort(CarList, (a, b) -> Float.compare(a.fuel, b.fuel));
System.out.println("Сортування автомобілів за витратами палива:");
for (Car Car : CarList) {
System.out.println(Car._model + ": " + Car.fuel + "л/100км");
}
Scanner scanner = new Scanner(System.in);
System.out.print("\nВведіть діапазон швидкості автомобіля:\ід ");
float speed_down = scanner.nextFloat();
System.out.print("до ");
float speed_up = scanner.nextFloat();
System.out.println("Автомобілі із заданою швидкістю:");
for (Car Car : CarList) {
if ((Car.speed >= speed_down) && (Car.speed <= speed_up)) {
System.out.println(Car._model + ": " + Car.speed + " км/год");
}
}
}
}

View File

@@ -1,17 +0,0 @@
package lab6;
public class Peguot extends Car {
public String mark = "Peguot";
public Peguot(String _model, float speed, int price, int year, float fuel, float engineCapacity, String country) {
super(_model, speed, price, year, fuel, engineCapacity, country);
}
@Override
public void printValues() {
System.out.println("Марка: Peguot");
super.printValues();
}
}

View File

@@ -1,17 +0,0 @@
package lab6;
public class Skoda extends Car {
public String mark = "Skoda";
public Skoda(String _model, float speed, int price, int year, float fuel, float engineCapacity, String country) {
super(_model, speed, price, year, fuel, engineCapacity, country);
}
@Override
public void printValues() {
System.out.println("Марка: Skoda\nМатеринська компанія: Volkswagen");
super.printValues();
}
}

View File

@@ -1,17 +0,0 @@
package lab6;
public class Toyota extends Car {
public String mark = "Toyota";
public Toyota(String _model, float speed, int price, int year, float fuel, float engineCapacity, String country) {
super(_model, speed, price, year, fuel, engineCapacity, country);
}
@Override
public void printValues() {
System.out.println("Марка: Toyota");
super.printValues();
}
}

View File

@@ -1,17 +0,0 @@
package lab6;
public class Volkswagen extends Car {
public String mark = "Volkswagen";
public Volkswagen(String _model, float speed, int price, int year, float fuel, float engineCapacity, String country) {
super(_model, speed, price, year, fuel, engineCapacity, country);
}
@Override
public void printValues() {
System.out.println("Марка: Volkswagen");
super.printValues();
}
}

View File

@@ -1,11 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View File

@@ -1,42 +0,0 @@
package lab7;
public class Car {
protected String mark;
protected String model;
protected int price;
protected int year;
protected float fuel;
public Car(String mark, String model, int price, int year, float fuel) {
setValues(mark, model, price, year, fuel);
}
// Цей конструктор був створений окремо для класу ElectricCar
public Car(String mark, String model, int price, int year) {
setValues(mark, model, price, year);
}
public void setValues(String mark, String model, int price, int year, float fuel) {
this.mark = mark;
this.model = model;
this.price = price;
this.year = year;
this.fuel = fuel;
}
public void setValues(String mark, String model, int price, int year) {
this.mark = mark;
this.model = model;
this.price = price;
this.year = year;
}
public void printValues() {
System.out.println("Марка: " + mark);
System.out.println("Модель: " + model + " " + year);
System.out.println("Ціна: " + price + "$");
System.out.println("Витрати палива: " + fuel + "л/100км");
}
}

View File

@@ -1,137 +0,0 @@
package lab7;
import java.util.*;
public class CarCollection<T extends Car> implements List<T> {
private final LinkedList<T> carList;
public CarCollection() {
carList = new LinkedList<>();
}
public CarCollection(T car) {
carList = new LinkedList<>();
carList.add(car);
}
public CarCollection(Collection<? extends T> c) {
carList = new LinkedList<>(c);
}
// Реалізація методів List
@Override
public int size() {
return carList.size();
}
@Override
public boolean isEmpty() {
return carList.isEmpty();
}
@Override
public boolean contains(Object o) {
return carList.contains(o);
}
@Override
public Iterator<T> iterator() {
return carList.iterator();
}
@Override
public Object[] toArray() {
return carList.toArray();
}
@Override
public <T1> T1[] toArray(T1[] a) {
return carList.toArray(a);
}
@Override
public boolean add(T t) {
return carList.add(t);
}
@Override
public boolean remove(Object o) {
return carList.remove(o);
}
@Override
public boolean containsAll(Collection<?> c) {
return carList.containsAll(c);
}
@Override
public boolean addAll(Collection<? extends T> c) {
return carList.addAll(c);
}
@Override
public boolean addAll(int index, Collection<? extends T> c) {
return carList.addAll(index, c);
}
@Override
public boolean removeAll(Collection<?> c) {
return carList.removeAll(c);
}
@Override
public boolean retainAll(Collection<?> c) {
return carList.retainAll(c);
}
@Override
public void clear() {
carList.clear();
}
@Override
public T get(int index) {
return carList.get(index);
}
@Override
public T set(int index, T element) {
return carList.set(index, element);
}
@Override
public void add(int index, T element) {
carList.add(index, element);
}
@Override
public T remove(int index) {
return carList.remove(index);
}
@Override
public int indexOf(Object o) {
return carList.indexOf(o);
}
@Override
public int lastIndexOf(Object o) {
return carList.lastIndexOf(o);
}
@Override
public ListIterator<T> listIterator() {
return carList.listIterator();
}
@Override
public ListIterator<T> listIterator(int index) {
return carList.listIterator(index);
}
@Override
public List<T> subList(int fromIndex, int toIndex) {
return carList.subList(fromIndex, toIndex);
}
}

View File

@@ -1,29 +0,0 @@
package lab7;
public class CombatsCar extends Car {
private final int crew;
private final float weight;
private final String country;
public CombatsCar(String mark, String model, int price, int year, float fuel, int crew, float weight, String country) {
super(mark, model, price, year, fuel);
this.crew = crew;
this.weight = weight;
this.country = country;
}
public String getCountry() {
return country;
}
public void printValues() {
super.printValues();
System.out.println("--- Особливості бойової машини ---");
System.out.println("Екіпаж: " + crew + " людей");
System.out.println("Бойова маса: " + weight + "т");
System.out.println("Країна-виробник: " + country);
}
}

View File

@@ -1,25 +0,0 @@
package lab7;
public class ElectricCar extends Car {
private final float electricity;
private final float chargingSpeed;
public ElectricCar(String mark, String model, int price, int year, float electricity, int chargingSpeed) {
super(mark, model, price, year);
this.electricity = electricity;
this.chargingSpeed = chargingSpeed;
}
public float getElectricity() {
return electricity;
}
public void printValues() {
super.printValues();
System.out.println("-Особливості електрокару-");
System.out.println("Споживання електроенергії: " + electricity + " кВт·год/100км");
System.out.println("Швидкість зарядки (з 0% до 100%): " + chargingSpeed + " хв");
}
}

View File

@@ -1,73 +0,0 @@
package lab7;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// Використання пустого конструктора CarCollection
CarCollection<SportsCar> sportsCars = new CarCollection<>();
sportsCars.add(new SportsCar("Ferrari", "458 Italia", 230000, 2015, 9.8f, 562, 202, 4.5f));
sportsCars.add(new SportsCar("Lamborghini", "Huracan", 260000, 2020, 9.5f, 640, 211, 5.2f));
sportsCars.add(new SportsCar("Porsche", "911", 150000, 2018, 14.3f, 450, 191, 3.0f));
sportsCars.add(new SportsCar("McLaren", "570S", 200000, 2017, 11.2f, 562, 204, 3.8f));
sportsCars.add(new SportsCar("Aston Martin", "Vantage", 150000, 2021, 12.3f, 503, 195, 4.0f));
// Сортування спорткарів за ціною
System.out.println("~~~~~ Відсортовані спорткари за ціною ~~~~~");
sportsCars.sort(Comparator.comparingInt(SportsCar::getPrice));
for (int i = sportsCars.size() - 1; i >= 0; i--) {
sportsCars.get(i).printValues();
System.out.println();
}
// Використання конструктора CarCollection з передаванням в його лише один об'єкт
CarCollection<CombatsCar> combatsCars = new CarCollection<>(new CombatsCar("Humvee", "M1114", 220000, 1995, 6.5f, 4, 5.5f, "США"));
combatsCars.add(new CombatsCar("Puma", "IFV", 3500000, 2010, 10.7f, 6, 31f, "Німеччина"));
combatsCars.add(new CombatsCar("Warrior", "IFV", 4500000, 1988, 12.4f, 3, 29f, "Великобританія"));
combatsCars.add(new CombatsCar("ZBD", "05", 1200000, 2011, 9.4f, 4, 25f, "Китай"));
combatsCars.add(new CombatsCar("VBCI", "IFV", 5000000, 2008, 10.7f, 8, 32f, "Франція"));
// Пошук бойової машини за країною-виробником
Scanner scanner = new Scanner(System.in);
System.out.print("Введіть країну-виробницю бойової машини: ");
String userCountry = scanner.nextLine();
System.out.println("Результати пошуку:\n");
for (CombatsCar car : combatsCars) {
if (car.getCountry().equals(userCountry)) {
car.printValues();
}
}
ArrayList<ElectricCar> electricCarsList = new ArrayList<>();
electricCarsList.add(new ElectricCar("Tesla", "Model S", 80000, 2022, 21.5f, 45));
electricCarsList.add(new ElectricCar("Chevrolet", "Bolt", 35000, 2021, 28.0f, 60));
electricCarsList.add(new ElectricCar("Nissan", "Leaf", 32000, 2021, 24.0f, 40));
electricCarsList.add(new ElectricCar("BMW", "i3", 45000, 2021, 19.5f, 30));
electricCarsList.add(new ElectricCar("Hyundai", "Kona", 42000, 2022, 22.0f, 50));
// Використання конструктора CarCollection з передаванням в його колекцію об'єктів
CarCollection<ElectricCar> electricCars = new CarCollection<>(electricCarsList);
// Пошук автомобіля по діапазону споживання електроенергії
System.out.println("\nВведіть діапазон споживання електроенергії (кВт·год/100км):");
System.out.print("від ");
float electricityLowerLimit = scanner.nextFloat();
System.out.print("до ");
float electricityUpperLimit = scanner.nextFloat();
System.out.println("Результати пошуку:\n");
for (ElectricCar car : electricCars) {
if (car.getElectricity() < electricityUpperLimit & car.getElectricity() > electricityLowerLimit) {
car.printValues();
}
}
}
}

View File

@@ -1,28 +0,0 @@
package lab7;
public class SportsCar extends Car {
private final int power;
private final float speed;
private final float engineCapacity;
public SportsCar(String mark, String model, int price, int year, float fuel, int power, float speed, float engineCapacity) {
super(mark, model, price, year, fuel);
this.power = power;
this.speed = speed;
this.engineCapacity = engineCapacity;
}
public int getPrice() {
return price;
}
public void printValues() {
super.printValues();
System.out.println("-Особливості спорткару-");
System.out.println("Потужість: " + power + " кінських сил");
System.out.println("Максимальна швидкість: " + speed + " км/год");
System.out.println("Об'єм двигуна: " + engineCapacity + "л");
}
}