Попко Андрей, 2 курс, 3 группа
Лабораторная работа № 7
Структуры и массивы структур
Условие задачи
Составить программу, в которой будут вводиться 7 - 10 строк таблицы.
Таблица выводится на экран - сразу же после ввода и после сортировки ее по значениям в первом столбце.
При написании программы следует учитывать различные варианты как входных данных (например, составные наименования, не конкретные значения, а их диапазоны и т.п.), так и варианты некорректного ввода данных.
Описание алгоритма
В структуре Time описываем четыре переменные для хранения данных. Name – название программы, Strok – количество строк ввода, TimeCall – время использования на SGI Callenge, TimeIndy – время использования на SGI Indy.
Добавим проверку ввода имени. Посимвольно будем сравнивать, является ли он буквой, и если не является, то повторим ввод. Ввод данных заканчивается, когда имя – “***”. Выполним вывод исходных данных в виде таблицы.
Сортировку по первому столбцу проведем с помощью метода Compare класса String и выведем отсортированные данные в таблице.
Код
using System;
namespace Lab_7
{
struct Time
{
public string Name;
public int Strok;
public double TimeCall;
public double TimeIndy;
}
class Program
{
static void Main()
{
int m = 0;
Time[] a = new Time[10];
for(int i=0; i<10; i++)
{
m = i;
Console.WriteLine("Введите данные ");
// проверка на ввод имени ---------------------------
int char_I = 0;
do
{
Console.Write("Название: ");
char_I = 0;
a[i].Name = Console.ReadLine();
if (a[i].Name == "***") break;
for (int j = 0; j < a[i].Name.Length; j++)
if (char.IsLetter(a[i].Name[j])) char_I++;
}
while (char_I!= a[i].Name.Length);
if (a[i].Name == "***") break;
//---------------------------------------------------
Console.Write("Количество строк кода: ");
a[i].Strok = int.Parse(Console.ReadLine());
Console.Write("Время исп. на SGI Callenge: ");
|
a[i].TimeCall = double.Parse(Console.ReadLine());
Console.Write("Время исп. на SGI Indy: ");
a[i].TimeIndy = double.Parse(Console.ReadLine());
}
Console.WriteLine("________________________________________________________________________________");
Console.WriteLine("|Время выполнения некоторых программ, которые применяют параллельные алгоритмы |");
Console.WriteLine("--------------------------------------------------------------------------------");
Console.WriteLine("|Название | Количество строк | Время исп.на | Время исп.на |");
Console.WriteLine("|Название | кода | SGI Callenge | SGI Indy |");
Console.WriteLine("________________________________________________________________________________");
for (int i = 0; i < 10; i++)
{
if (a[i].Name == "***")
break;
else
Console.WriteLine("|{0,-11}|{1,-20}|{2,-24}|{3,-20}|", a[i].Name, a[i].Strok, a[i].TimeCall, a[i].TimeIndy);
}
Console.WriteLine("--------------------------------------------------------------------------------");
Console.WriteLine("|SGI Call-ЦП R1000 196MHz,1.024MB RAM SGI Indy-ЦП MIPS R4600 134MHz,64MB RAM |");
Console.WriteLine("--------------------------------------------------------------------------------");
bool t = true;
while(t)
{
t = false;
for (int i = 0; i < (m-1); i++)
{
int result = String.Compare(a[i].Name, a[i+1].Name,true);
if (result > 0)
{
Time about = a[i];
a[i] = a[i+1];
a[i+1] = about;
t = true;
}
}
}
Console.WriteLine("________________________________________________________________________________");
Console.WriteLine("|Время выполнения некоторых программ, которые применяют параллельные алгоритмы |");
Console.WriteLine("--------------------------------------------------------------------------------");
Console.WriteLine("|Название | Количество строк | Время исп.на | Время исп.на |");
Console.WriteLine("| | кода | SGI Callenge | SGI Indy |");
Console.WriteLine("________________________________________________________________________________");
for (int i = 0; i < 10; i++)
{
if (a[i].Name == "***")
break;
else
Console.WriteLine("|{0,-11}|{1,-20}|{2,-24}|{3,-20}|", a[i].Name, a[i].Strok, a[i].TimeCall, a[i].TimeIndy);
}
Console.WriteLine("--------------------------------------------------------------------------------");
Console.WriteLine("|SGI Call-ЦП R1000 196MHz,1.024MB RAM SGI Indy-ЦП MIPS R4600 134MHz,64MB RAM |");
|
Console.WriteLine("--------------------------------------------------------------------------------");
Console.ReadKey();
}
}
}
Отладка
Результат работы программы