Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 53 additions & 0 deletions rpgsaga/src/Lab/4.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Функция для расчета значения Y
export function calculateY(x: number, a: number, b: number): number {
// Условие из задания: x < 5 и x >= 5
if (x < 5) {
// Первая формула: y = lg^2(a^2 + x) / (a + x)^2
const numerator = Math.pow(Math.log10(Math.pow(a, 2) + x), 2);
const denominator = Math.pow(a + x, 2);
return numerator / denominator;
} else {
// Вторая формула: y = (a + bx)^3.5 / (1.8 + cos^3(ax))
const numerator = Math.pow(a + (b * x), 3.5);
const denominator = 1.8 + Math.pow(Math.cos(a * x), 3);
return numerator / denominator;
}
}

function main(): void {
// Входные данные из таблицы
const a = -2.5;
const b = 3.4;

// --- Задача А: Использование цикла for для табулирования ---
const xStart = 3.5;
const xEnd = 6.5;
const dx = 0.6;

console.log("=== Задача А: Табулирование функции ===");
console.log(`| ${"x".padEnd(10)} | ${"y".padEnd(15)} |`);
console.log("|------------|-----------------|");

// Замена цикла for из Go с шагом dx и микро-погрешностью
for (let x = xStart; x <= xEnd + 0.0001; x += dx) {
const y = calculateY(x, a, b);
console.log(`| ${x.toFixed(1).padEnd(10)} | ${y.toFixed(6).padEnd(15)} |`);
}

// --- Задача B: Использование массива и цикла аналога range ---
const xValues: number[] = [2.89, 3.54, 5.21, 6.28, 3.48];

console.log("\n=== Задача B: Расчет по массиву значений ===");
console.log(`| ${"Аргумент".padEnd(10)} | ${"Результат".padEnd(15)} |`);
console.log("|------------|-----------------|");

// Перебираем элементы массива, получая индекс и значение через .entries()
for (const [i, x] of xValues.entries()) {
const y = calculateY(x, a, b);
const argLabel = `X${i + 1}`;
console.log(`| ${argLabel.padEnd(10)} | ${y.toFixed(6).padEnd(15)} |`);
}
}

// Запускаем главную функцию
main();
56 changes: 56 additions & 0 deletions rpgsaga/src/Lab/5.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// Описание класса Computer
export class Computer {
public brand: string;
// В TypeScript свойства можно объявить прямо внутри класса
public model: string;
private hddSpace: number; // Делаем приватным, чтобы доступ был только через геттер/сеттер

// Метод-конструктор (аналог NewComputer в Go)
constructor(brand: string, model: string, hdd: number) {
this.brand = brand;
this.model = model;
this.hddSpace = hdd;
}

// Метод (геттер) для получения объема диска
public getHDD(): number {
return this.hddSpace;
}

// Метод (сеттер) для установки нового объема диска
public setHDD(newSpace: number): void {
if (newSpace > 0) {
this.hddSpace = newSpace;
} else {
console.log("Ошибка: объем диска должен быть положительным");
}
}

// Полезный метод для вывода информации
public printInfo(): void {
console.log(`Компьютер: ${this.brand} ${this.model}, Диск: ${this.hddSpace} ГБ`);
}
}

function main(): void {
// Используем конструктор для создания объекта (в TS нужен оператор new)
const myComp = new Computer("Asus", "ROG", 512);

// Выводим начальную информацию
console.log("Начальные данные:");
myComp.printInfo();

// Используем сеттер, чтобы изменить объем диска
console.log("\nОбновляем объем диска...");
myComp.setHDD(1024);

// Используем геттер, чтобы получить значение и вывести его
const currentHDD = myComp.getHDD();
console.log(`Новый объем диска через геттер: ${currentHDD} ГБ`);

// Финальный вывод
myComp.printInfo();
}

// Запуск программы
main();
31 changes: 31 additions & 0 deletions rpgsaga/tests/Lab/4.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { describe, expect, test } from 'vitest';
import { calculateY } from '../../src/Lab/4';

describe('Тестирование лабораторной работы №4', () => {
const a = -2.5;
const b = 3.4;

describe('Проверка ветки условий (x < 5)', () => {
test('Должна корректно считать Y при x = 3.5', () => {
const result = calculateY(3.5, a, b);
expect(result).toBeCloseTo(0.978130, 5);
});

test('Должна корректно считать Y при x = 2.89', () => {
const result = calculateY(2.89, a, b);
expect(result).toBeCloseTo(6.071122, 5);
});
});

describe('Проверка ветки условий (x >= 5)', () => {
test('Должна корректно считать Y при x = 5.21', () => {
const result = calculateY(5.21, a, b);
expect(result).toBeCloseTo(5448.712269, 5);
});

test('Должна корректно считать Y на граничном значении x = 5.0', () => {
const result = calculateY(5.0, a, b);
expect(result).toBeCloseTo(4155.788360, 5);
});
});
});
48 changes: 48 additions & 0 deletions rpgsaga/tests/Lab/5.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import { describe, expect, test } from 'vitest';
import { Computer } from '../../src/Lab/5';

describe('Тестирование класса Computer (Лабораторная №5)', () => {

test('Конструктор должен правильно инициализировать объект', () => {
const comp = new Computer('Asus', 'ROG', 512);

expect(comp.brand).toBe('Asus');
expect(comp.model).toBe('ROG');
expect(comp.getHDD()).toBe(512);
});

test('Геттер getHDD должен возвращать актуальный объем диска', () => {
const comp = new Computer('HP', 'Pavilion', 256);

expect(comp.getHDD()).toBe(256);
});

describe('Тестирование сеттера setHDD', () => {
test('Должен успешно изменять объем диска при корректном значении', () => {
const comp = new Computer('Lenovo', 'ThinkPad', 256);

comp.setHDD(1024);
expect(comp.getHDD()).toBe(1024);
});

test('Не должен изменять объем диска, если передано отрицательное число', () => {
const comp = new Computer('Dell', 'XPS', 512);

// Пытаемся поставить некорректное значение
comp.setHDD(-100);

// Значение должно остаться прежним (512)
expect(comp.getHDD()).toBe(512);
});

test('Не должен изменять объем диска, если передан ноль', () => {
const comp = new Computer('Apple', 'MacBook', 128);

// Пытаемся поставить 0
comp.setHDD(0);

// Значение должно остаться прежним (128)
expect(comp.getHDD()).toBe(128);
});
});
});
16 changes: 7 additions & 9 deletions rpgsaga/tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"forceConsistentCasingInFileNames": true,
"strict": true,
"skipLibCheck": true,
"verbatimModuleSyntax": true,
"noEmit": true,
"rootDir": ".",
"types": ["node"]
"skipLibCheck": true
},
"include": ["src/**/*.ts", "tests/**/*.ts", "vitest.config.ts"]
}
"include": ["src/**/*", "tests/**/*"]
}