Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
- */
- package apdc_lw1;
- /**
- *
- * @author Klaus
- */
- public class APDC_LW1 {
- /**
- * @param args the command line arguments
- */
- public static void main(String[] args) {
- // TODO code application logic here
- if(args.length < 2)
- {
- System.out.println("Недостаточное количество аргументов командной строки. Необходимо два аргумента: имена входного и выходного файлов");
- return;
- }
- if(!new java.io.File(args[0]).isFile())
- {
- System.out.println("Указан неправильный исходных файл, проверьте правильость задания");
- return;
- }
- if(new java.io.File(args[1]).exists())
- {
- System.out.println("Указанный выходной файл уже существует, укажите другое имя");
- return;
- }
- AM_model model = new AM_model();
- AL_model model2 = new AL_model();
- int result;
- result = readFile(args[0], model);
- switch(result)
- {
- case -1:
- System.out.println("Ошибка при доступе к файлу исходных данных");
- break;
- case -2:
- System.out.println("Слишком большой размер модели");
- break;
- case -3:
- System.out.println("Обнаружены недопустимые символы во входном файле");
- break;
- case -4:
- System.out.println("Недостаточно строк в исходном файле");
- break;
- case -5:
- System.out.println("В одной из строк недостаточно элементов");
- break;
- case -6:
- System.out.println("Обнаружена петля в исходной матрице");
- break;
- default:
- System.out.println("Разбор матрицы завершен успешно");
- }
- if(result < 0)
- {
- System.out.println("Обнаружены ошибки во входных данных, работа завершена");
- return;
- }
- System.out.println("Полученный битовый массив: (блоки в памяти распологаются согласно соглашения x86, в данном выводе отображены как результат mov ax, word ptr [memadr])");
- for(int n = 0; n < model.size; n++)
- {
- for(int m = model.sizeof - 1; m >= 0; m--)
- {
- String temp = Integer.toBinaryString(model.model[n * model.sizeof + m] & 0xFF);
- while(temp.length() < 8)
- {
- temp = "0" + temp;
- }
- System.out.print(temp);
- }
- System.out.println();
- }
- result = processModel(model, model2);
- switch(result)
- {
- default:
- System.out.println("Обработка модели завершена");
- }
- result = writeFile(model2, args[1]);
- switch(result)
- {
- case -1:
- System.out.println("Ошибка при доступе к файлу результатов");
- break;
- default:
- System.out.println("Вывод списка дуг в файл успешно завершен");
- }
- }
- public static int readFile(String in, AM_model out) {
- java.io.BufferedReader br;
- java.util.Vector<Byte> vmodel;
- try {
- br = new java.io.BufferedReader(new java.io.FileReader(in));
- String source = br.readLine();
- if(!source.matches("[ 10]+"))
- {
- return -3; // недопустимые символы во входном файле
- }
- String[] parts = source.split("[ ]+");
- int size = parts.length;
- if(size > 16)
- {
- return -2; // слишком большая модель
- }
- vmodel = new java.util.Vector<Byte>();
- if(parts[0].equals("1"))
- {
- return -6; // петля
- }
- int temp = 0;
- int sz = 0;
- for(int m = size - 1; m >= 0; m--)
- {
- if(sz > 0 && sz % 8 == 0)
- {
- vmodel.add((byte)temp);
- temp = 0;
- }
- temp >>= 1;
- temp = parts[m].equals("1") ? (temp | 0x80) : temp;
- sz++;
- }
- temp >>= (8 - (size % 8));
- vmodel.add((byte)temp);
- for(int n = 1; n < size; n++)
- {
- source = br.readLine();
- if(source == null)
- {
- return -4; // недостаточно строк в файле
- }
- if(!source.matches("[ 10]+"))
- {
- return -3; // недопустимые символы во входном файле
- }
- parts = source.split("[ ]+");
- if(parts.length != size)
- {
- return -5; // в одной из строк недостаточно элементов
- }
- if(parts[n].equals("1"))
- {
- return -6; // петля
- }
- temp = 0;
- sz = 0;
- for(int m = size - 1; m >= 0; m--)
- {
- if(sz > 0 && sz % 8 == 0)
- {
- vmodel.add((byte)temp);
- temp = 0;
- }
- temp >>= 1;
- temp = parts[m].equals("1") ? (temp | 0x80) : temp;
- sz++;
- }
- temp >>= (8 - (size % 8));
- vmodel.add((byte)temp);
- }
- //model = new Model();
- out.setModel(new byte[vmodel.size()]);
- out.setSize(size);
- out.setSizeof((size + 7) / 8);
- for(int n = 0; n < vmodel.size(); n++)
- {
- out.model[n] = vmodel.get(n);
- }
- br.close();
- } catch (java.io.IOException ex) {
- return -1; // ошибка доступа к файлу
- }
- return 0;
- }
- public static int processModel(AM_model in, AL_model out)
- {
- java.util.Vector<Byte> vmodel = new java.util.Vector<Byte>();
- int temp = 0;
- int sz = 0;
- int cnt = 0;
- out.sizeof = (int)Math.ceil(Math.log(in.size) / Math.log(2));
- for(int n = 0; n < in.size; n++)
- {
- int cur = 0;
- for(int m = in.sizeof - 1; m >= 0; m--)
- {
- cur <<= 8;
- cur |= in.model[n * in.sizeof + m] & 0xFF;
- }
- for(int m = in.size - 1; m >= 0; m--)
- {
- if(sz >= 8)
- {
- vmodel.add((byte)(temp >> (sz - 8)));
- sz -= 8;
- }
- if((cur >> (in.size - 1 - m) & 0x01) == 1)
- {
- temp = temp << out.sizeof;
- temp |= n;
- sz += out.sizeof;
- temp = temp << out.sizeof;
- temp |= m;
- sz += out.sizeof;
- cnt++;
- }
- //System.out.println(n + " -> " + ((cur >> (in.size - 1 - m) & 0x01) == 1 ? m : "Z"));
- }
- }
- if(sz > 0)
- {
- vmodel.add((byte)(temp << (8 - sz)));
- }
- out.setSize(cnt);
- out.setModel(new byte[vmodel.size()]);
- for(int n = 0; n < vmodel.size(); n++)
- {
- out.model[n] = vmodel.get(n);
- }
- return 0;
- }
- public static int writeFile(AL_model in, String out) {
- java.io.BufferedWriter bw;
- try {
- bw = new java.io.BufferedWriter(new java.io.FileWriter(out));
- bw.write("Список дуг\n");
- int mask = 0;
- for(int n = 0; n < in.sizeof; n++)
- {
- mask <<= 1;
- mask += 1;
- }
- for(int n = 0; n < in.size; n++)
- {
- int temp = in.getBits(n * in.sizeof * 2, in.sizeof * 2);
- int from = temp >> in.sizeof;
- int to = temp & mask;
- bw.write("Дуга #" + n + ": " + from + " --> " + to + "\n");
- }
- bw.write("\n");
- bw.close();
- } catch (java.io.IOException ex) {
- return -1; // ошибка доступа к файлу
- }
- return 0;
- }
- }
Add Comment
Please, Sign In to add comment