Другие языки программирования и технологии

Дан текст. файл. Вывести слово текста наимен. длины. Слово- набор симолов без пробелов и огран. пробелом. Помогите ПЛЗ!

На бейсике так:
Dim i As Integer, Min As Integer, MinWord As String, x1 As String
Open "FileName" For Input As #1 ' Вместо FileName задаем имя файла
Min = 32767: MinWord = "" ' Min - берем самое большое число типа Integer
Do While Not EOF(1) ' цикл чтения строк
Line Input #1, x1 ' чтение строки
intPoz = 1
Do While x1 <> ""
intPoz = InStr (1, x1, " ", vbTextCompare) ' ищем пробел
If intPoz > 0 Then
Word = Left$ (x1, intPoz - 1) ' слово - от начала строки до пробела
x1 = Mid$ (x1, intPoz + 1) ' новая строка - от пробела до конца старой строки
Else ' Не нашли пробелов - это последнее слово в строке
Word = x1
x1 = ""
End If
If Len (Word) < Min Then ' Сравниваем длину слова с минимальной
Min = Len (Word)
MinWord = Word
End If
Loop
Loop
MsgBox (MinWord) ' Выводим самое короткое слово
End

Почему программы на Бейсике всегда короче, чем на Паскале?
Олег Емельянов
Олег Емельянов
65 852
Лучший ответ
Первый способ:

Uses Crt;
Var
f1:text;
st,sl,min:string;
begin
assign(f1,'text.txt');
reset(f1);
min:=' '; // тут между апострофами должно быть столько пробелов сколько символов в самой длинной строке в тексте
while not eof(f1) do
begin
readln(f1,st);
while pos(' ',st)<>0 do
begin
sl:=copy(st,1,pos(' ',st));
if length(min)>=length(sl) then min:=sl;
delete(st,1,pos(' ',st));
end;
end;
close(f1);
writeln('Min = ',min);
readln;
end.

Второй способ:

uses crt;
var min, len, i : integer;
s, str, min_str : string;
f:text;
begin
clrscr;
assign(f,'text.txt');
reset(f);
while not eof(f) do begin
readln(f,s); //читаем строку
min := length(s); // длина строки
len := 0; // обнуляем переменную
min_str := ''; // обнуляем переменную
str := ''; // обнуляем переменную
for i:=1 to length(s) do // циклом проходимся по всей строке - от 1-го символа и до последнего
if s[ i ] <> ' ' then begin // если символ не является пробелом, то:
inc(len); // увеличиваем длину слова на 1
str := str + s[ i ]; // присваеваем текущий символ строке, по одному символу будет собираться слово полностью
end else begin
if len < min then begin // если длина последнего найденного слова меньше предыдущего (минимального)
min := len; // длина слова
min_str := str; // само слово
end;
len := 0; // обнуляем для того чтобы искать длину следующего слова
str := ''; // обнуляем чтоб записывать следующее найденное слово
end;
end;
close(f);
writeln('min = ', min_str); // вывод
readln; // а ето будет ожидать нажатия Enter
end.
Павел Роганов
Павел Роганов
41 962
Паскаль?

Похожие вопросы