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);

 }

}


 

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

19739. Эксплуатация теплотехнического оборудования 13.23 KB
  Эксплуатация теплотехнического оборудования Основные задачи по эксплуатации: обеспечение надёжности работы оборудования заданных технологическим процессом минимальный расход теплоты и теплопотери.К оборудованию предъявляют следующие эксплуатационные требования...
19740. Задачи энергетической службы промышленного предприятия. Функции Проматомнадзора и Энергонадзора. Основные руководящие, нормативные документы 14.66 KB
  Задачи энергетической службы промышленного предприятия. Функции Проматомнадзора и Энергонадзора. Основные руководящие нормативные документы Функции энергетической службы предприятия: разработка нормативов касающихся энергетической службы; планирование потр...
19741. Структура энергоцеха промышленного предприятия. Функциональные обязанности главного энергетика, начальников различных участков, техническая документация на оборудование котельной 17.32 KB
  Структура энергоцеха промышленного предприятия. Функциональные обязанности главного энергетика начальников различных участков техническая документация на оборудование котельной Главный энергетик: 1.Организует технически правильную эксплуатацию и своевременный...
19742. Основные требования к эксплуатации топливного хозяйства при сжигании твёрдого топлива. Особенности эксплуатации мазутного хозяйства 16.99 KB
  Основные требования к эксплуатации топливного хозяйства при сжигании твёрдого топлива. Особенности эксплуатации мазутного хозяйства. Основные требования к эксплуатации газового хозяйства промышленного предприятия Топливным хозяйством называют систему устройств и
19743. Эксплуатация тягодутьевых машин. Неполадки в работе тягодутьевых машин и меры по их предотвращению. Эксплуатация центробежных насосов и компрессорных установок 15.58 KB
  Эксплуатация тягодутьевых машин. Неполадки в работе тягодутьевых машин и меры по их предотвращению. Эксплуатация центробежных насосов и компрессорных установок Тягодутьевые машины и газовоздушный тракт котельного агрегата до начала испытаний должны быть внимательно...
19744. Требования правил Проматомнадзора к конструкции, материалам, изготовлению и монтажу паровых и водогрейных котлов, их арматуре 18.3 KB
  Требования правил Проматомнадзора к конструкции материалам изготовлению и монтажу паровых и водогрейных котлов их арматуре 2.1. Основное требование к конструкции котлов водоподогревателей и их основных частей обеспечение надежной долговечной и безопасной экспл
19745. Требования правил Проматомнадзора к КИП и приборам безопасности, водному режиму, питательным устройствам, помещениям 16.33 KB
  Требования правил Проматомнадзора к КИП и приборам безопасности водному режиму питательным устройствам помещениям Питание котлов может быть групповым с общим для подключенных котлов питательным трубопроводом или индивидуальным только для одного котла. Включе
19746. Регистрация и техническое освидетельствование паровых и водогрейных котлов. Разрешение на эксплуатацию 15.4 KB
  Регистрация и техническое освидетельствование паровых и водогрейных котлов. Разрешение на эксплуатацию Перед техническим освидетельствованием котел должен быть охлажден отключен и очищен в соответствии с требованиями Правил по котлонадзору. Внутренние устройства ...
19747. Эксплуатация топок для слоевого и камерного сжигания твёрдого топлива 14.79 KB
  Эксплуатация топок для слоевого и камерного сжигания твёрдого топлива В паровых котлах на органическом топливе теплоту для нагрева рабочего тела получают в топках топочных камерах путем сжигания топлива. В зависимости от способа сжигания и вида топлива различают топ