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

 }

}


 

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

43509. СОЗДАНИЕ МАРКШЕЙДЕРСКОГО–ГЕОДЕЗИЧЕСКОГО ОБОСНОВАНИЯ И ПРОИЗВОДСТВА ТОПОГРАФИЧЕСКОЙ СЪЕМКИ В МАСШТАБЕ 1:2000 ГОРНОДОБЫВАЮЩЕГО ПРЕДПРИЯТИЯ 39.5 KB
  Высоты пунктов съемочного обоснования определить методом технического или спутникового нивелирования. ИСХОДНЫЕ ДАННЫЕ: Топографическая карта растр масштаба 1:100 000 с нанесенными на ней: территория горнодобывающего предприятия; пункты исходного геодезического обоснования ГГС: полигонометрия или триангуляция 4 класса точности с отметками определенными из нивелирования III класса все доступные на исходной топографической карте. Проект опорного планововысотного обоснования.
43510. Финансирование энергосберегающих проектов предприятий электроэнергетики за счёт собственных средств 313 KB
  Ухта мощностью 150 Гкал ч объект: Ухтинские тепловые сети; 2 Реконструкция теплоснабжения поселка Бельгоп г.Ухта объект: Ухтинские тепловые сети; 3 Оснащение дутьевых вентиляторов котлоагрегатов частотными приводами объект: Сосногорская ТЭЦ; 4 Внедрение системы непрерывной очистки трубокконденсаторов шарикоочистка с эластичными шариками объект: Сосногорская ТЭЦ; 5 Оснащение насосного оборудования центральных тепловых пунктов частотными приводами объект: Сосногорская ТЭЦ; 6 Подача тепла на теплофикационную установку...
43511. Внутренний аудит процесса «Управление записями в отделе сервисного обслуживания» на ЗАО «Компания Новгородский Завод ГАРО» 882 KB
  Основным процессом поставщиком для данного процесса является «Оформление и предоставление актов работ», в ходе которого инженеры, совместно с потребителями продукции ГАРО, составляют акты о проведенных работах, а секретарь ОС ведет реестр актов работ и является ответственным за хранение записей и предоставление их для дальнейшего использования.
43512. Анализ технико-экономического показателей работы промышленного предприятия 755.5 KB
  Одним из важнейших разделов анализа работы предприятия является анализ трудовых ресурсов. Его цель - в выявлении резервов роста производительности труда, улучшении нормирования, организации и условий труда, снижении себестоимости продукции, то есть важнейших технико-экономических показателей.
43513. РАСПРОСТРАНЕНИЕ РАДИОВОЛН И АНТЕННО-ФИДЕРНЫЕ УСТРОЙСТВА 264.5 KB
  Технические требования на проектируемую антенну номер канала дБ коэффициент усиления бортовой передающей антенны дБВт уровень мощности на входе малошумящего приемного устройства м протяженность радиолинии ИСЗ Земля модуль характеризующий потери в атмосфере Земли. С тех пор двойные зеркальные телескопы носят название телескопов Кассегрена и это название было распространено на антенны с аналогичным принципом конструкции зеркал. Антенны Кассегрена в настоящее время являются широко...
43514. Разрабоика схемы тахометра 154.5 KB
  Параметры счетчика: Счетчик считает обороты в течении 10 секунд и поэтому необходимо делить входной сигнал на 10 чтобы соблюсти соответствие с оборотами в минуту. Алгоритм работы тахометра На вход устройства подается сигнал tkt; Счетчику D присваивается значение Dtkt; Если счетчик D досчитал до 10 тогда переход к п.4; Счетчику Ct присваивается значение Hrz1 ; Если счетчик Ct досчитал до 10то переход к п. Формируется сигнал записи Cwr ; По сигналу Cwr происходит запись результата в регистр W; Сигналом...
43515. Будова та основні характеристики мікропроцесора Intel Core i5-661 888.5 KB
  Опис процесора Intel Core i5661 рисунок. Intel Core i5661 Процесор Intel Core i5651 заснований на 32нм ядрі Clrkdle. І в цьому лежить його головна технологічна відмінність від процесорів Intel Core i57xx. Так Intel Core i5650 це двоядерний процесор на відміну від чотирьохядерних Intel Core i57xx що мають вдвічі більший обєм кешпамяті 8 МБ проти 4 МБ.
43516. СОЦІАЛЬНА СТРАТИФІКАЦІЯ СУЧАСНОГО СУСПІЛЬСТВА 197 KB
  Поняття соціальної стратифікації суспільства. Типи стратифікованого суспільства . Соціальна стратифікація сучасного суспільства .
43517. Проектирование цифрового счетчика 454 KB
  Дополнительные требования: предусмотреть управление реверсом и индикацию направления счета Теоретическая часть Счетчиком называется последовательное устройство предназначенное для счета входных импульсов и фиксации их числа в двоичном коде. В цифровых схемах счетчики могут выполнять следующие микрооперации над кодовыми словами: 1 установка в исходное состояние запись нулевого кода; 2 запись входной информации в параллельной форме; 3 хранение информации; 4 выдача хранимой информации в параллельной форме; 5 инкремент ...