uses crt; var s,s1:string; a:array[1..100] of string; n,i,j,k:byte; begin clrscr; writeln('Введите текст из слов, разделенных пробелами'); readln(s); s:=' '+s+' ';{добавим пробел в начало и в конец} n:=length(s); i:=2; k:=0;{всего слов} while i<=n do if (s[i]<>' ')and (s[i-1]=' ') then{если не пробел а перед ним пробел} begin k:=k+1;{+ слово} j:=i; s1:=''; while (j<=n) and (s[j]<>' ') do {пока не пробел и не конец строки} begin s1:=s1+s[j]; j:=j+1; end; a[k]:=s1;{пишем его в массив} i:=i+length(s1);{перешагиваем через слово} end else i:=i+1;{пропускаем пробелы} for i:=1 to k-1 do {сортируем массив по возрастанию=по алфавиту} for j:=i+1 to k do if a[i]>a[j] then begin s1:=a[i]; a[i]:=a[j]; a[j]:=s1 end; writeln('Слова текста в алфавитном порядке:'); for i:=1 to k do writeln(a[i]); readln end.
Значение переменной i не задано, поэтому выведет что - то произвольное, Почему while (a<N) ? А если первая цифра слева в числе = 1? while (a<N) нужно заменить на while (0<N) Убрать строку a=N%10; перед while После строки min=10; добавить строку i=0;
после изменений будет примерно так:
#include<stdio.h> #include<conio.h>
main() { int N,a, min, i, imin; scanf("%d", &N); min=10; i=0; while (0<N) { i++; a=N%10; N=N/10; if (a<min) { min=a; imin=i; } } printf ("%d", imin); getch(); return 0; }
var s,s1:string;
a:array[1..100] of string;
n,i,j,k:byte;
begin
clrscr;
writeln('Введите текст из слов, разделенных пробелами');
readln(s);
s:=' '+s+' ';{добавим пробел в начало и в конец}
n:=length(s);
i:=2; k:=0;{всего слов}
while i<=n do
if (s[i]<>' ')and (s[i-1]=' ') then{если не пробел а перед ним пробел}
begin
k:=k+1;{+ слово}
j:=i;
s1:='';
while (j<=n) and (s[j]<>' ') do {пока не пробел и не конец строки}
begin
s1:=s1+s[j];
j:=j+1;
end;
a[k]:=s1;{пишем его в массив}
i:=i+length(s1);{перешагиваем через слово}
end
else
i:=i+1;{пропускаем пробелы}
for i:=1 to k-1 do {сортируем массив по возрастанию=по алфавиту}
for j:=i+1 to k do if a[i]>a[j] then
begin
s1:=a[i];
a[i]:=a[j];
a[j]:=s1
end;
writeln('Слова текста в алфавитном порядке:');
for i:=1 to k do
writeln(a[i]);
readln
end.
Почему while (a<N) ? А если первая цифра слева в числе = 1?
while (a<N) нужно заменить на while (0<N)
Убрать строку a=N%10; перед while
После строки min=10; добавить строку i=0;
после изменений будет примерно так:
#include<stdio.h>
#include<conio.h>
main() {
int N,a, min, i, imin;
scanf("%d", &N);
min=10; i=0;
while (0<N)
{ i++;
a=N%10;
N=N/10;
if (a<min)
{ min=a;
imin=i; }
}
printf ("%d", imin);
getch();
return 0;
}