Разработка программно-вычислительного комплекса, предназначенного для разработки эффективных форматов микрокоманд для различных способов микропрограммирования
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
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