Разработка программно-вычислительного комплекса, предназначенного для разработки эффективных форматов микрокоманд для различных способов микропрограммирования

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

i, int g, int num)

{ bool ok = false;indexSkliki = -1;shetRasnizi = 0;first = MasMO[num][i];second = MasMO[num][g];(first != null & second != null)

{(int k = 0; k < first.Length; k++)

{((first.Substring(k, 1)).Equals(second.Substring(k, 1))) { }{ shetRasnizi++; indexSkliki = k; }

}(shetRasnizi == 1) { MasMO[num][g] = null;[] arr = first.ToCharArray();[indexSkliki]=-;s = new string(arr);[num][i] = s;= true; } }ok; }static int[] FindMinCover(int[,] workArray) {[] selectedRows = new int[workArray.GetLength(0)];[] selectedColumns = new int[workArray.GetLength(1)]; thereIsNoWorkColumn = false;

do{ // ищем ядерные строки (еще не выбранные)

int numberOfNuclearRow = -1;(int i = 0; i < selectedColumns.Length; i++)

{count = 0;(selectedColumns[i] != 1) //если не выбрана еще то считаем в ней единицы

{(int j = 0; j < selectedRows.Length; j++)

{(selectedRows[j] != 1)

{= count + workArray[j, i];

}

}(count == 1) {(int stroka = 0; stroka < selectedRows.Length; stroka++)

{(workArray[stroka,i]==1) numberOfNuclearRow = stroka;

}

}

}

}findNuclear = numberOfNuclearRow;//вернем номер строки ядерной или -1 если нет таких(findNuclear != -1)

{[findNuclear] = 1;

//checkColumnsForRow(findNuclear);(int i = 0; i < selectedColumns.Length; i++)

{(workArray[findNuclear, i] == 1) { selectedColumns[i] = 1; }

}

}{ // если нет ядерных ищем строку максимального ранга из остаdшихся

int numberOfMaxRankRow = -1;rank = 0;(int i = 0; i < selectedRows.Length; i++)

{count = 0;(selectedRows[i] != 1) //если не выбранна еще то считаем в ней единицы

{(int j = 0; j < selectedColumns.Length; j++)

{(selectedColumns[j] != 1)

{= count + workArray[i, j];

}

}(rank < count) { rank = count; numberOfMaxRankRow = i; }

}

}findMaxRank = numberOfMaxRankRow;(findMaxRank != -1)

{[findMaxRank] = 1;

// checkColumnsForRow(findMaxRank);(int i = 0; i < selectedColumns.Length; i++)

{(workArray[findMaxRank, i] == 1) { selectedColumns[i] = 1; }

}

}

} //проверка на то что есть еще незачеркнутые столбцы

thereIsNoWorkColumn = false;(int i = 0; i < selectedColumns.Length; i++)

>subGrafs=Graf.FindAllCliques(tableSovm);//[,]subArray=toArray(subGrafs,tableSovm.GetLength(0));//)">{(selectedColumns[i] != 1) { thereIsNoWorkColumn = true; } } }(thereIsNoWorkColumn);selectedRows; }static string gorVertKod() {text = null;[,] verKod = vertikal();(verKod);[,] tableSovm = FindSovmestOper();//нашли таблицу совместимости микрокоманд subGrafs = Graf.FindAllCliques(tableSovm);// нашли строки составлящие подграфы[,] subArray = toArray(subGrafs, tableSovm.GetLength(0));//преобразовали в массив для поиска мин покрытия)

int[] minCover = FindMinCover(subArray);// нашли строки состаляющие мин покрытие

>subGrafs2=CheckForOverlay(subArray,minCover,subGrafs);//(); (int i = 0; i < subGrafs2.Count; i++){ //посчитать длину генерации и создать массив.

int peremen = subGrafs2[i].Count+1;= (int)Math.Ceiling(Math.Log(peremen, 2));gen = new PermutationsWithRepetition(new int[] { 1, 0 }, peremen);[,] variations = gen.getVariations();[] stroki = new String[subGrafs2[i].Count+1];(int gg = 0; gg < subGrafs2[i].Count; gg++)

{stroka = null;(int ggg = 0; ggg < variations.GetLength(1); ggg++)

{= stroka + variations[gg, ggg];

}[gg] = stroka;

}stroka2 = null;(int dl = 0; dl < peremen; dl++) { stroka2 = stroka2 + "0"; }[subGrafs2[i].Count] = stroka2;.Add(stroki); }(int ii = 0; ii < subGrafs2.Count; ii++){= text + "G" +(ii+1)+" = ";(int jj = 0; jj < subGrafs2[ii].Count; jj++)

{UFUUU = "y" + (subGrafs2[ii][jj] + 1)+" ";= text + UFUUU;

}= text + Environment.NewLine ; }= text + Environment.NewLine;= text + Environment.NewLine;(int i = 0; i < MasMK.Count ; i++){(int ii = 0; ii < subGrafs2.Count; ii++) {hh = YestStroka(MasMK[i],subGrafs2[ii]);(hh != -1) { text = text + "" + Kodi[ii][hh] + " | "; }{text = text + "" + Kodi[ii][subGrafs2[ii].Count]+" | ";}

}= text + "Y" + (i + 1) + " ";= text + Environment.NewLine; }text;

}static int YestStroka(List list_2)

>CheckForOverlay(int[,]subArray,int[]minCover,List subGrafs)

{

List(); // найти перекрытия групп и устранить его

//строк мин покрытия(int i = 0; i < minCover.Length; i++)//для каждой строки мин покрытия выбираем каждый элемент и ищем в других строках мин покрытия

{(minCover[i] != 0) { subGrafs2.Add(subGrafs[i]); }

}[,] tableMinCover = toArray2(subGrafs2, MasMO.Count);// преобразовали в массив

// находим все для каждого элемента массив строк в которых он есть и сравнивая выбираем ту что останется

for (int i = 0; i < subGrafs2.Count-1; i++)

{(int j = 0; j < subGrafs2[i].Count; j++)

{(int ii = i + 1; ii < subGrafs2.Count; ii++)

{(int jj = 0; jj < subGrafs2[ii].Count; jj++)

{(subGrafs2[i][j].Equals(subGrafs2[ii][jj]))

razn2)">{ int del = -1;a = subGrafs2[i].Count -1;b = subGrafs2[ii].Count -1;s1 =(int) Math.Log(a,2);s2 =(int) Math.Log(b,2);N1 =(int) Math.Pow(a,s1);N2 =(int) Math.Pow(b,s2);razn1 = N1 -a;razn2 = N2 -b;(razn1 razn2)

{ del = ii; subGrafs2[ii].RemoveAt(jj); }

else //если одинаково близки то та что длиннее

{(subGrafs2[i].Count > subGrafs2[ii].Count) { subGrafs2[i].RemoveAt(j); }{ subGrafs2[ii].RemoveAt(j); }

}

}

}

}

}

}

}subGrafs2;

}static int[,] toArray2(List subGrafs2, int p)

{[,] massiv = new int[subGrafs2.Count, p];

(int i = 0; i < subGrafs2.Count; i++)

{(int j = 0; j < subGrafs2[i].Count; j++)

{[i, subGrafs2[i][j]] = 1;

}

}massiv;

}static int[,] toArray(List subGrafs,int p)

{[,] massiv = new int[subGrafs.Count, p];

(int i = 0; i < subGrafs.Count; i++)

{(int j = 0; j < subGrafs[i].Count; j++)

{[i, subGrafs[i][j]] = 1;

}

}massiv;

}static string vertGorKod()

{text = null;[,] verKod = vertikal();(verKod);[,] tableNeSovm = FindSovmestOper();//нашли таблицу несовместимости микрокоманд

>subGrafs=Graf.FindAllCliques(tableNeSovm);//[,]subArray=toArray(subGrafs,tableSovm.GetLength(0));//)[]minCover=FindMinCover(subArray);//%b