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

 }

}


 

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

15656. Устройство и работа мобильных телефонов 1.43 MB
  Устройство и работа мобильных телефонов Введение Все гениальное просто. Это выражение полностью подходит к устройству мобильного телефона. Вы думаете это шутка Не улыбайтесь Перед вами Букварь по устройству мобильных телефонов и их отдельных частей. Если под рукой...
15657. ЗАКЛЮЧЕНИЕ ПОД СТРАЖУ НЕСОВЕРШЕННОЛЕТНЕГО 28.6 KB
  ЗАКЛЮЧЕНИЕ ПОД СТРАЖУ НЕСОВЕРШЕННОЛЕТНЕГО С. ТЕТЮЕВ Тетюев Станислав доцент юридического факультета ЮжноУральского государственного университета кандидат юридических наук доцент. Заключение под стражу считается самой жесткой мерой пресечения посколь...
15658. Воспитание детей: организация детского праздника. Обучение в США: виды вузов 40 KB
  Воспитание детей: организация детского праздника Воспитание ребенка – одна из самых сложных задач которые приходится выполнять человеку на протяжении всей его жизни. Ведь в данном случае мало чтобы ребенок был всегда накормлен тепло одет и отправлен в садик или шко
15659. Социальная психология. ВЫБОР И ПРИНЯТИЕ РЕШЕНИЯ: РИСК И СОЦИАЛЬНЫЙ КОНТЕКСТ 114.5 KB
  Социальная психология. ВЫБОР И ПРИНЯТИЕ РЕШЕНИЯ: РИСК И СОЦИАЛЬНЫЙ КОНТЕКСТ Автор: Е. А. САВИНА Х. Т. ВАНГ Исследуется влияние социального контекста и содержания задачи на принятие решения связанного с риском. Авторами использована эмпирическая парадигма А. Тверски
15660. БАЗОВЫЕ И СТРАТЕГИЧЕСКИЕ ПРОЦЕССЫ РАСПОЗНАВАНИЯ СЕМАНТИЧЕСКИХ ОТНОШЕНИЙ 193.5 KB
  БАЗОВЫЕ И СТРАТЕГИЧЕСКИЕ ПРОЦЕССЫ РАСПОЗНАВАНИЯ СЕМАНТИЧЕСКИХ ОТНОШЕНИЙ В работе представлены результаты исследования процессов базовой и стратегической организации познавательных процессов на примере задач семантического решения. Испытуемые должны были оцениват
15661. ПСИХОФИЗИОЛОГИЯ. О ЗАВИСИМОСТИ ОБЪЕМА ПАМЯТИ ОТ РАЗМЕРА АЛФАВИТА СТИМУЛОВ 157 KB
  ПСИХОФИЗИОЛОГИЯ. О ЗАВИСИМОСТИ ОБЪЕМА ПАМЯТИ ОТ РАЗМЕРА АЛФАВИТА СТИМУЛОВ В экспериментальном исследовании обнаружено что объем сенсорной памяти на цифры вычисленный по методике частичного отчета равен объему кратковременной памяти измеренному по методике полног
15662. ОБЪЕМ ПАМЯТИ И РАЗМЕР АЛФАВИТА СТИМУЛОВ 100.5 KB
  ОБЪЕМ ПАМЯТИ И РАЗМЕР АЛФАВИТА СТИМУЛОВ Не смотря на многолетнюю историю экспериментальных исследований психология памяти до сих пор остается ареной теоретических споров и столкновения разных концепций. Одной из горячо обсуждаемых проблем является даже то сколько в...
15663. ОНТОЛОГИЯ СПОРТА И ФИЗИЧЕСКОГО ВОСПИТАНИЯ КАК ФЕНОМЕНОВ ЭКЗИСТЕНЦИАЛИСТСКОЙ КУЛЬТУРЫ 91 KB
  ОНТОЛОГИЯ СПОРТА И ФИЗИЧЕСКОГО ВОСПИТАНИЯ КАК ФЕНОМЕНОВ ЭКЗИСТЕНЦИАЛИСТСКОЙ КУЛЬТУРЫ Ибрагимов М.М. Национальный университет физического воспитания и спорта Украины Постановка проблемы. В первую очередь следует отметить что историографический анализ спорта обна...
15664. СОВА МИНЕРВЫ и АПОЛЛОН или ДВА СПОСОБА ФИЛОСОФСКОГО ОСМЫСЛЕНИЯ СПОРТА 124 KB
  СОВА МИНЕРВЫ и АПОЛЛОН или ДВА СПОСОБА ФИЛОСОФСКОГО ОСМЫСЛЕНИЯ СПОРТА Аннотация: В статье Сова Минервы и Аполлон или два способа философского осмысления спорта кандидата философских наук профессора Ибрагимова М.М. Национальный университет физического воспитания и...