- •Министерство образования и науки Российской Федерации
- •Разработка программы для решения задачи «игра умножения»
- •Задание
- •Содержание
- •Введение
- •1 Постановка задачи
- •2 Анализ поставленной задачи
- •2.1 Основные объекты задачи и их взаимодействие
- •2.2 Решение задачи – вариант 1
- •2.3 Решение задачи – вариант 2
- •3 Описание результатов разработки
- •4 Руководство пользователя
- •Заключение
- •Список использованных источников
- •Приложение а (обязательное) Листинг программы a.1 Основной модуль MultiplyGame
- •A.2 Модуль тестирования MultiplyGameTest
- •A.3 Модуль MultiplyGameFile (ввод-вывод из файла)
A.2 Модуль тестирования MultiplyGameTest
package multiplyGame;
import junit.framework.*;
public class MultiplyGameTest extends TestCase {
public void testGetWinner() {
assertEquals(MultiplyGame.getWinner(-15), -1);
// метод должен вернуть ошибку
assertEquals(MultiplyGame.getWinner(1), -1);
// метод должен вернуть ошибку
assertEquals(MultiplyGame.getWinner(4294967296L), -1);
// метод должен вернуть ошибку
assertEquals(MultiplyGame.getWinner(162), 0);
// должен победить игрок 0 (Слава)
assertEquals(MultiplyGame.getWinner(17), 1);
// должен победить игрок 1 (Оля)
assertEquals(MultiplyGame.getWinner(34012226), 0);
// должен победить игрок 0 (Слава)
assertEquals(MultiplyGame.getWinner(81934), 1);
// должен победить игрок 1 (Оля)
}
}
A.3 Модуль MultiplyGameFile (ввод-вывод из файла)
package multiplyGame;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.Scanner;
public class MultiplyGameFile {
static final long rangeMin = 2, rangeMax = 4294967295L;
// допустимые пределы числа N
static final String[] players = new String[] {"Stan", "Ollie"};
// имена игроков
static final byte[] dividers = new byte[] {9, 2};
// делители для нахождения выигрышных и проигрышных интервалов
public static void main(String[] args) {
long N;
N = 0;
File fl = new File("Input.txt");
// проверяем, существует ли файл
if (fl.exists() && fl.isFile()){
try{
FileReader fin = new FileReader ("Input.txt");
Scanner in = new Scanner(fin);
while (in.hasNext()){
// пока не прочтем весь файл
String str = in.next();
// считываем очередную строку в str
N = Long.parseLong(str);
System.out.println("N = "+N+" (Loaded from file).");
System.out.print(players[getWinner(N)]);
// вызов метода getWinner() и вывод имени победителя
System.out.println(" wins");
}
in.close();
}
catch (Exception e) {
System.out.println("Wrong number!");
// вывод сообщения об ошибке
}
}
// запись информации о победителе в файл
PrintWriter pr = null;
try
{
pr = new PrintWriter(new FileOutputStream("Output.txt"));
}
catch(FileNotFoundException e)
{
System.out.println("Ошибка открытия файла Output.txt");
System.exit(0);
}
Scanner in = new Scanner(System.in);
pr.println(in.nextLine());
in.close();
pr.close();
}
// метод определения победителя игры (-1 - неверно заданное число, 0 - Слава, 1 - Оля)
public static int getWinner(long N) {
if (N < rangeMin || N > rangeMax) return -1;
// проверка на допустимые пределы числа
int winner = 1; // индекс победившего игрока (0 - Слава, 1 - Оля)
long minPos = N; // нижняя граница выигрышного или проигрышного интервала
do {
winner = (winner == 1 ? 0 : 1); // инверсия индекса победителя
// находим нижнюю границу следующего выигрышного или проигрышного интервала
minPos = (long) Math.ceil((double) minPos / dividers[winner]);
// деление и округление вверх
} while (minPos > 1); // пока нижняя граница не станет равна 1
return winner;
}
}
