Здравствуйте. В фаиле, допустим, 1.txt записаны целые и вещественные числа в каждой...

0 голосов
46 просмотров

Здравствуйте. В фаиле, допустим, 1.txt записаны целые и вещественные числа в каждой строке. Нужно написать программу, которая создает массив целых чисел из фаила, которые положительные и целые.
То есть у нас есть текстовый документ, в каждой новой строке которого записаны числа 1; -312;-41.11;412.11 и тд. Нужно в массив, предположим a, записать все положительные целые числа. Массив должен быть динамический типа array of integer, а не array of string. Нужна готовая программа. Писать на языке PascalABC


Информатика (179 баллов) | 46 просмотров
0

Не понял, как разделяются числа - точкой с запятой или точкой с запятой и последующими пробелами, или просто пробелами, а точку с запятой Вы указали просто так... И еще, что значит "в каждой новой строке"? Есть еще какие-то "старые строки"? Или "не новые"? Может быть, имелось в виду "В каждой строке файла записаны числа...." ?

0

У Вас в записи 1; -312;-41.11;412.11 первое число отделено точкой с запятой и пробелом, а остальные - только точками с запятой

0

Пробел поставил случайно, отделяются они ';'

0

В принципе, задача несложная. Сложнее всего придумать тестовый пример))))

0

Хех, мне проще придумать тестовый пример, чем решить задачу). Когда мы это проходили, то я мог спокойно это сделать, но сейчас, тк я не повторял, я практически ничего не понимаю... Нужно ли вообще связывать переменную и фаил (assign(f,1.txt))? Каким образом из строки получить массив числ? Чувствую, что тучка запустил я свое обучении..(

0

В PascalABC.NET сейчас это делается крайне просто, даже напрягать ничего не надо

0

Так Вы сможете мне помочь?

0

Да, и довольно быстро

0

Как скоро?

0

Через пару минут, меня тут отвлекли

Дан 1 ответ
0 голосов
Правильный ответ

// PascalABC.NET 3.1, сборка 1246 от 23.05.2016
begin
  var s:=ReadAllLines('1.txt');
  Writeln('Считано:'); s.Println(NewLine);
  var a:=s.Select(x->x.Replace(';',' ')).ToArray
    .JoinIntoString.ToReals.Where(x->(x>0) and (Frac(x)=0))
    .Select(x->Trunc(x)).ToArray;
  Writeln('Получено:'); a.Println();
  Writeln('Справочно: тип А - ',a.GetType);
end.

Тестовое решение
Считано:
1;-312;-41.11;412.11
43.63;-15;27;7.62;3;-14
1342;23.23;-32.19;18
Получено:
1 27 3 1342 18
Справочно: тип А - System.Int32[]

Тестовый файл 1.txt дан во вложении.


Скачать вложение Текст (TXT)
(142k баллов)
0

Вау! Безусловно, это, наверное, самое короткое решение! Но можете это переписать более менее понятным мне языком?) Использую такие функции как, к примеру, readalllines и тд. Просто такие функции как trunk, frac мы не проходили, а тем более Ваши 5 и 6 строчки начинаются с точки, это мы только на сл год в лучшем случае пройдем :)

0

Trunc() - стандарная функция перевода вещественного в целое (она возвращает целую часть веществнного числа), её проходят сразу же, как только изучают вещественный тип. Frac() - также стандартная функция, возвращающая дробную часть вещественного числа. Без них нельзя корректно привести вещественное к целому.

0

Строчки 5 и 6, которые начинаются с точки - на самом деле просто продолжения строки 4, т.е. это все одни оператор, который начинается var a:=

0

После выполнения того, что написано в 4 строке, мы получаем массив строк или уже целых чисел?

0

Что касается переписать "более понятным языком" - я же не знал изначально (да и сейчас не знаю), что Вам понятно,а что нет. Каждое учебное заведение по-видимому в соответствии с уровнем квалификации своих преподавателей дает изучение языков программирования по-своему... (((

0

Мы должны были получить целочисленный массив А - мы его и получаем оператором, который начинается в четвертой строке. Следующий оператор уже выводит результат. Возможно. Вы не изучали возможность данной версии языка, именуемую "цепочкой", когда результат одной операции сразу же передается следующей.