41621

Генерация таблицы переходов и функций возбуждения тригеров

Лабораторная работа

Информатика, кибернетика и программирование

В результате выполнения данной лабораторной работы я приобрёл навыки анализа графовых структур и автоматизации процедуры построения таблицы переходов. Мной был разработан класс для генерации таблицы переходов.

Русский

2013-10-24

141.5 KB

2 чел.

  Национальный Технический Университет Украины

“Киевский Политехнический Институт”

Факультет Информатики и Вычислительной Техники

Кафедра вычислительной техники

Лабораторная работа №5

по курсу «Автоматизация проэктирования

компьютерных систем»

Выполнил:

студент IV курса

Группы ИВ-83

Чуб Александр

Киев

2011 г.

Тема: Генерация таблицы переходов и функций возбуждения тригеров.

Номер зачётной книжки: 831910 =100000011111112;

 

Q[t]

Q[t+1]

J

K

0

0

0

-

0

1

1

-

1

0

-

1

1

1

-

0

Скриншот программы:

Листинг программы:

import javax.swing.table.AbstractTableModel;

import java.util.*;

import java.util.regex.Pattern;

public class GraphTableModel extends AbstractTableModel{

private static final long serialVersionUID = 1L;

 

private ArrayList<ArrayList<String>> graphTable;

private int numOfQ;

private int pSignalsB;

private int pSignalsE;

public GraphTableModel(NewGraph graph){

 graphTable = new ArrayList<ArrayList<String>>();

 numOfQ = graph.getNumOfQ();

 graphTable.add(createHeaderRow(graph));

 addRows(graph);

}

private ArrayList<String> createHeaderRow(NewGraph graph){

 ArrayList<String>  headers = new ArrayList<String>();

 headers.add("Transition");

 for(int i = 0; i<numOfQ;i++){

  headers.add("Q"+i+"[t]");

 }

 for(int i = 0; i<numOfQ;i++){

  headers.add("Q"+i+"[t+1]");

 }

 pSignalsB=headers.size();

 for(String signal:graph.getSignals()) {

  headers.add(signal);

 }

 pSignalsE=headers.size();

 for(int i = 0; i < numOfQ;i++) {

  headers.add("J"+i+"K"+i);

 }

 return headers;

}

 

 

 

private void addRows(NewGraph graph){

 ArrayList<GraphNode> nodes = graph.getNodes();

 for(GraphNode node :nodes) {

  for(GraphLink link: node.getLinkedNodes()){

   ArrayList<String> tableRow = new ArrayList<String>();

   tableRow.add(node.getName()+" ->"+link.linkedNode.getName());

   for(int i = 0;i< node.getBitCode().length();i++){

    tableRow.add(""+node.getBitCode().charAt(i));

   }

   for(int i = 0;i< node.getBitCode().length();i++){

    tableRow.add(""+link.linkedNode.getBitCode().charAt(i));

   }

   

   Pattern pat = Pattern.compile(",");

   String[] lexems = null;

   if(link.yConditions.size()!=0){ lexems = pat.split(link.yConditions.get(0));}

   System.out.println(node.getName()+"  ->"+link.linkedNode.getName());

   String xSignal=null;

   String x = null;

   if(link.yConditions.size()!=0){

    xSignal =link.xConditions.get(0);

    x= "1";

    if(xSignal.length()==3){x ="0"; xSignal =xSignal.substring(1, 3);}

   }

   for(int i = pSignalsB;i <pSignalsE;i++){

    tableRow.add("-");

    if(xSignal!=null){

     if(graphTable.get(0).get(i).equals(xSignal)){

      tableRow.set(tableRow.size()-1,x);

      continue;

     }

    }

    if(lexems!=null){

     for(int j = 0;j<lexems.length;j++){

      if(graphTable.get(0).get(i).equals(lexems[j])){

       tableRow.set(tableRow.size()-1,"1");

       break;

      }

     }

    }

    

   }

   for(int i = 0;i< node.getBitCode().length();i++){

    String jk = getJK(node.getBitCode().charAt(i),

      link.linkedNode.getBitCode().charAt(i));

    tableRow.add(jk);

   }

   graphTable.add(tableRow);

  }

 }

}

private String getJK(char from, char to){

 String jk = "";

 if((from=='0')&&(to=='0')){jk = "0-";}

 if((from=='0')&&(to=='1')){jk = "1-";}

 if((from=='1')&&(to=='0')){jk = "-1";}

 if((from=='1')&&(to=='1')){jk = "-0";}

 return jk;

}

@Override

public int getColumnCount() {

 return graphTable.get(0).size();

}

@Override

public int getRowCount() {

 return graphTable.size();

}

@Override

public Object getValueAt(int arg0, int arg1) {

 return graphTable.get(arg0).get(arg1);

}

}

Выводы:

 В результате выполнения данной лабораторной работы я приобрёл навыки анализа графовых структур и автоматизации процедуры построения таблицы переходов. Мной был разработан класс для генерации таблицы переходов. А также я реализовал методы для визуального отображения сгенерированной таблицы переходов автомата.

import javax.swing.table.AbstractTableModel;

import java.util.*;

import java.util.regex.Pattern;

public class GraphTableModel extends AbstractTableModel{

 private static final long serialVersionUID = 1L;

 

 private ArrayList<ArrayList<String>> graphTable;

 private int numOfQ;

 private int pSignalsB;

 private int pSignalsE;

 public GraphTableModel(NewGraph graph){

 graphTable = new ArrayList<ArrayList<String>>();

 numOfQ = graph.getNumOfQ();

 graphTable.add(createHeaderRow(graph));

 addRows(graph);

}

 //marking the heading row of the table

 private ArrayList<String> createHeaderRow(NewGraph graph){

 ArrayList<String>  headers = new ArrayList<String>();

 headers.add("Transition");//matching the the transition

 for(int i = 0; i<numOfQ;i++){//marking all Q

  headers.add("Q"+i+"[t]");

 }

 for(int i = 0; i<numOfQ;i++){

  headers.add("Q"+i+"[t+1]");

 }

 pSignalsB=headers.size();//get pointer on signals beginning

 for(String signal:graph.getSignals()) {//marking all signals

  headers.add(signal);

 }

 pSignalsE=headers.size();//pointer on signals ending

 for(int i = 0; i < numOfQ;i++) {

  headers.add("J"+i+"K"+i);

 }

 return headers;

}

 

 

 

 //add all infomative rows in the table

 private void addRows(NewGraph graph){

 ArrayList<GraphNode> nodes = graph.getNodes();

 for(GraphNode node :nodes) {

  for(GraphLink link: node.getLinkedNodes()){

   ArrayList<String> tableRow = new ArrayList<String>();

   tableRow.add(node.getName()+" ->"+link.linkedNode.getName());//adding the transition

   for(int i = 0;i< node.getBitCode().length();i++){

    tableRow.add(""+node.getBitCode().charAt(i));//adding the Qs of output node

   }

   for(int i = 0;i< node.getBitCode().length();i++){

    tableRow.add(""+link.linkedNode.getBitCode().charAt(i));//adding information about input node

   }

   

   Pattern pat = Pattern.compile(",");

   String[] lexems = null;

   //spliting Y conditions on list of with each one

   if(link.yConditions.size()!=0){ lexems = pat.split(link.yConditions.get(0));}

   System.out.println(node.getName()+"  ->"+link.linkedNode.getName());

   String xSignal=null;

   String x = null;

   if(link.yConditions.size()!=0){

    xSignal =link.xConditions.get(0);

    x= "1";

    //checking if our transit with 0 signal of current Y.

    if(xSignal.length()==3){x ="0"; xSignal =xSignal.substring(1, 3);}

   }

   //finding and marching signals from the transition into appropriate columns

   for(int i = pSignalsB;i <pSignalsE;i++){

    tableRow.add("-");//if there not such signal then we leave it -

    if(xSignal!=null){

     if(graphTable.get(0).get(i).equals(xSignal)){

      tableRow.set(tableRow.size()-1,x);

      continue;

     }

    }

    if(lexems!=null){

     for(int j = 0;j<lexems.length;j++){

      if(graphTable.get(0).get(i).equals(lexems[j])){

       tableRow.set(tableRow.size()-1,"1");

       break;

      }

     }

    }

    

   }

   //matching our JK transitions

   for(int i = 0;i< node.getBitCode().length();i++){

    String jk = getJK(node.getBitCode().charAt(i),

      link.linkedNode.getBitCode().charAt(i));

    tableRow.add(jk);

   }

   graphTable.add(tableRow);

  }

 }

}

 //JK function

 private String getJK(char from, char to){

 String jk = "";

 if((from=='0')&&(to=='0')){jk = "0-";}

 if((from=='0')&&(to=='1')){jk = "1-";}

 if((from=='1')&&(to=='0')){jk = "-1";}

 if((from=='1')&&(to=='1')){jk = "-0";}

 return jk;

}

 @Override

 public int getColumnCount() {

 return graphTable.get(0).size();

}

 @Override

 public int getRowCount() {

 return graphTable.size();

}

 @Override

 public Object getValueAt(int arg0, int arg1) {

 return graphTable.get(arg0).get(arg1);

 }

}


 

А также другие работы, которые могут Вас заинтересовать

28092. Сформулюйте вимоги для наведеної в завданні функції інформаційної системи 148.33 KB
  Функція «Обробка звітів». Податкова інспекція приймає звіти по прибутковому податку щомісяця. Звіти від підприємств приходять в електронному виді. Для безпеки використовується шифрування за допомогою відкритого ключа. Підприємство шифрує звіт відкритим ключем податкової, податкова шифрує звіт відкритим ключем підприємства
28093. Виконайте декомпозицію інформаційної системи по її опису 32.5 KB
  Основні завдання, які вирішує підрозділ: облік продажів комп’ютерів й їх комплектуючих. Покупець може вибрати або готову конфігурацію комп’ютера, або сформувати свою конфігурацію разом з менеджером, або придбати комплектуючі окремо. Для підвищення ефективності роботи менеджера існує можливість підбора аналогічних комплектуючих
28096. Произведите декомпозицию информационной системы по ее описанию 144.43 KB
  Доступ из сети LAN1 во внешний мир для порта 80НТТР ограничена по скорости до 128Кбит сек а из сети LAN2 – на всех портах кроме 21 до 64Кбит сек.10 LAN1 LAN2.
28097. Сформировать требования для приведенной в задании функции информационной системы 154.95 KB
  Заявка включает следующую информацию: реквизиты покупателя текущую датувыставляется автоматически ожидаемая дата поставки условия поставки наименования мателопродукции и ГОССТАНДАРТ необходимое количество менеджер который принял заявкувыставляется автоматически по логину пользователя в системе. Заявка закрепляется за менеджером который ее принял. После заполнения заявка сохраняется в базе данных. Заявка которая была сохранена присваивается статус: принята.
28098. Выполните декомпозицию информационной системы по ее описанию 192.07 KB
  226 LAN2 На рисунке показана структура локальной сети Intranet которая имеет выход в глобальную сеть. Весь трафик електронных новостей ограниченный 2Кбайт сек для сети LAN1 а для сети LAN2 и LAN3 ограничения нет.