Консультация № 185245
22.01.2012, 11:25
59.54 руб.
0 12 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: помогите пожалуйста упростить программу убрать оттуда гистограмму и сделать программу по проще и очень нужна блок схема помогите с ней очень надо и немного описание дабавить
Задание:Даны k значений натуральных чисел n. Найти все различные цифры, входящие в запись чисел n и их количество. Найти число с наибольшим и наименьшим количеством различных цифр.
Код:
using System;
using System.Linq;
namespace Program1
{
class Program
{
//количество значений
const int k = 5;
static void Main(string[] args)
{
//решение построим на основе невыравненного массива
char[][] n = new char[k][];
//для ввода используем 64-битные числа для возможности ввести число побооольше
Int64 intvalue;
bool IsInt;
//переменные для определения максимальных-минимальынх количеств различных чисел
int maxDistinct = 1;
int minDistinct = 1;
//переменные для хранения максимального-минимального значения
Int64 maxDistinctValue = 0;
Int64 minDistinctValue = 0;
//массив для хранения количеств не повторяющихся чисел
int[] Distincts = new int[k];
//цикл для ввода чисел
Console.WriteLine("===============ввод данных==================\r\n");
for (int i = 0; i < k; ++i)
{
Console.Write("Введите число n[{0}]:", i);
IsInt = false;
while (!IsInt)
{
IsInt = Int64.TryParse(Console.ReadLine(), out intvalue);
if (!IsInt)
Console.WriteLine("Введено не верное значение!");
else
{
//сразу определим размер массива для цифр, из которых состоит число
//и разобъем число в символьный массив
n[i] = new char[intvalue.ToString().Length];
n[i] = intvalue.ToString().ToCharArray();
}
}
}
Console.WriteLine("\r\n==========поиск различных чисел и их количество============\r\n");
//цикл по всем значениям
for (int i = 0; i < k; ++i)
{
//массив различных цифр в значении
var uniqueChars = n[i].Distinct();
//запоминаем количество различных цифр, будет использоваться для построения гистограммы
Distincts[i] = uniqueChars.Count();
// число собираем из массива символов
Console.WriteLine("В числе {0} найдены различные цифры:", new string(n[i]));
//цикл по массиву различных элементов
foreach (var uc in uniqueChars)
{
//подсчитываем одинаковое количество цифр в числе
int amount = (from a in n[i]
where a == uc
select a).Count<char>();
Console.WriteLine("{0} в колличестве {1} шт.", uc, amount);
}

//запоминаем максимальное количество
if (uniqueChars.Count() >= maxDistinct)
{
//запоминаем максимальное количество различных цифр
maxDistinct = uniqueChars.Count();
//запоминаем число которому принадлежит максимальное количество различных цифр
maxDistinctValue = Int64.Parse(new string(n[i]));
}
if (uniqueChars.Count() <= minDistinct)
{
//тоже самое для минимального
minDistinct = uniqueChars.Count();
minDistinctValue = Int64.Parse(new string(n[i]));
}
}
//выводим на экран значения с максимальным и минимальным количеством различных цифр
Console.WriteLine("\r\n==========max/min количества различных чисел============\r\n");
Console.WriteLine("Число с максимальным количеством различных цифр: {0}", maxDistinctValue);
Console.WriteLine("Число с минимальным количеством различных цифр: {0}", minDistinctValue);
//гистограмма
//в консоле гистограмму рисуем символами, по другому нельзя
Console.WriteLine("\r\n===============гистограмма==================");
Console.WriteLine("порядковый номер:количество различных цифр\r\n");
for (int i = 0; i < k; ++i)
{
Console.WriteLine("{0}:{1}", i, new string('-', Distincts[i]));
}
//ждем нажатия клавиши для завершения программы
Console.ReadKey();
}
}
}

Обсуждение

Неизвестный
22.01.2012, 11:42
общий
22.01.2012, 11:51
блок-схема в Visio пойдёт?
И что в вашем понимании сделать попроще?
То есть что именно кажется избыточным.
Неизвестный
22.01.2012, 11:49
общий
так они там кривые не правильные
Неизвестный
22.01.2012, 11:54
общий
В Visio не правильные блок-схемы? Могу вас уверить с тем набором элементов они даже под наши ГОСТы подходят. Просто надо знать в каком виде вам надо блок-схему, и что избыточного в этой программе? С начальными условиями: массив и большое целое число для ввода , с такими условиями её решить можно так.Гистограмму убрать не сложно.
Неизвестный
22.01.2012, 12:14
общий
мне гистограмму убрать и если возможно сделать программу попроще так как я не все моменты понимаю, но что бы все считало как вышеуказанная. А на счёт программы по блок схемам Code Visual to Flowchart, она отличается от той что вы предложили?
Неизвестный
22.01.2012, 12:23
общий
блок-схемы, если отличаются то немного. Когда надо было описать большую программу именно блок схемами, мы брали Code Visual to Flowchart, потом переводили автоматически созданные блок-схемы в Visio, где вручную всё доделывали.
А что в коде непонятно, может смогу объяснить?:) Просто делать проще-это как написать программу заново.
Неизвестный
22.01.2012, 12:49
общий
29,30,32,33 и 65 строка не понятно зачем запоминать и гистограмму убрать
Неизвестный
22.01.2012, 13:14
общий
22.01.2012, 13:15
Код:
 
//Флаг, что число не введено
IsInt = false;
//проверяем, пока число не введено
while (!IsInt)
{
//получили число или нет
IsInt = Int64.TryParse(Console.ReadLine(), out intvalue);
//Если не получили
if (!IsInt)
Console.WriteLine("Введено не верное значение!");
//Если получили число
else
{
//сразу определим размер массива для цифр, из которых состоит число
//и разобъем число в символьный массив
n[i] = new char[intvalue.ToString().Length];
n[i] = intvalue.ToString().ToCharArray();
}
}


убрать гистограмму:
надо закомментировать строки 22,23,50,51,83-90

в строке 65 запоминаем, чтобы вывести в строках 81,82
Неизвестный
23.01.2012, 17:37
общий
Если не понятно, пишите.
давно
Профессор
230118
3054
25.01.2012, 19:35
общий
У Вас окончательный ответ? Напишите в форме ответа, вопросы без ответа нельзя оставлять.
Неизвестный
25.01.2012, 19:57
общий
Адресаты:

Просто моё сообщение - это не дословный и не полный ответ на задание. К тому же непонятно в каком виде человеку блок-схему делать.
давно
Профессор
230118
3054
28.01.2012, 04:16
общий
29,30,32,33 строки нужны для того, чтобы проверить, что ввели действительно число.
давно
Профессор
230118
3054
29.01.2012, 23:28
общий
это ответ
Здравствуйте, Иванов Евгений Александрович!
Код:
using System;
using System.Linq;
namespace Program1
{
class Program
{
//количество значений
const int k = 5;
static void Main(string[] args)
{
//решение построим на основе невыравненного массива
char[][] n = new char[k][];
//для ввода используем 64-битные числа для возможности ввести число побооольше
Int64 intvalue;
bool IsInt;
//переменные для определения максимальных-минимальных количеств различных чисел
int maxDistinct = 1;
int minDistinct = 1;
//переменные для хранения максимального-минимального значения
Int64 maxDistinctValue = 0;
Int64 minDistinctValue = 0;
//массив для хранения количеств не повторяющихся чисел
//цикл для ввода чисел
Console.WriteLine("===============ввод данных==================\r\n");
for (int i = 0; i < k; ++i)
{
Console.Write("Введите число n[{0}]:", i);
IsInt = false;
while (!IsInt)
{
IsInt = Int64.TryParse(Console.ReadLine(), out intvalue);
if (!IsInt)
Console.WriteLine("Введено неверное значение!");
else
{
//сразу определим размер массива для цифр, из которых состоит число
//и разобъем число в символьный массив
n[i] = new char[intvalue.ToString().Length];
n[i] = intvalue.ToString().ToCharArray();
}
}
}
Console.WriteLine("\r\n==========поиск различных чисел и их количество============\r\n");
//цикл по всем значениям
for (int i = 0; i < k; ++i)
{
//массив различных цифр в значении
var uniqueChars = n[i].Distinct();
// число собираем из массива символов
Console.WriteLine("В числе {0} найдены различные цифры:", new string(n[i]));
//цикл по массиву различных элементов
foreach (var uc in uniqueChars)
{
//подсчитываем одинаковое количество цифр в числе
int amount = (from a in n[i]
where a == uc
select a).Count<char>();
Console.WriteLine("{0} в количестве {1} шт.", uc, amount);
}
//запоминаем максимальное количество
if (uniqueChars.Count() >= maxDistinct)
{
//запоминаем максимальное количество различных цифр
maxDistinct = uniqueChars.Count();
//запоминаем число которому принадлежит максимальное количество различных цифр
maxDistinctValue = Int64.Parse(new string(n[i]));
}
if (uniqueChars.Count() <= minDistinct)
{
//тоже самое для минимального
minDistinct = uniqueChars.Count();
minDistinctValue = Int64.Parse(new string(n[i]));
}
}
//выводим на экран значения с максимальным и минимальным количеством различных цифр
Console.WriteLine("\r\n==========max/min количества различных чисел============\r\n");
Console.WriteLine("Число с максимальным количеством различных цифр: {0}", maxDistinctValue);

//ждем нажатия клавиши для завершения программы
Console.ReadKey();
}
}
}


Форма ответа