Бумер Опубликовано 24 октября, 2006 Жалоба Поделиться Опубликовано 24 октября, 2006 Юзер вводит числа (вещественные). Сколько штук он введет - неизвестно. их надо отсортировать. числа он вводит, разделяя пробелом. Сортировку как осуществить сам разберусь как нибудь, но как сделать, чтобы вводился массив из х элементов????? Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 24 октября, 2006 Жалоба Поделиться Опубликовано 24 октября, 2006 Смотря как поставлена задача. Если задача на сортировку - тогда просто обьяви массив из 1000 или 10000 элементов. Если же задача именно на работу с динамической памятью, со ссылками и списками - разговор совсем другой. Ссылка на комментарий Поделиться на другие сайты Поделиться
ant_ig Опубликовано 24 октября, 2006 Жалоба Поделиться Опубликовано 24 октября, 2006 (изменено) то что он вводит это строка вто в простом варианте vars,s1:string;mas=array [1...10000] of intger;k:integer;beigns1:='';k:=1;for i:=1 to length(s) do beginif s[i]<>' ' then s1:=s1+s[i] else begin mas[k]:=strtoint(s1); s1:=''; k:=k+1; end; end;end. s-строка что ввел юзер s1-накапливаем числа Изменено 24 октября, 2006 пользователем ant_ig Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 24 октября, 2006 Жалоба Поделиться Опубликовано 24 октября, 2006 ant_ig Ну, навскидку сразу несколько проблем: 1. Учитываются только одноразрядные числа (0-9) 2. Паскалевская строка может содержать не больше 255 символов Ссылка на комментарий Поделиться на другие сайты Поделиться
yuriks Опубликовано 24 октября, 2006 Жалоба Поделиться Опубликовано 24 октября, 2006 uses crt;var ch : char; a : array[1..10000] of integer; s : string; code : integer; k : integer;begin s := ''; k := 1; repeat ch := readkey; write(ch); if (ch <> ' ') and (ch <> #13) then s := s + ch else begin val(s,a[k],code); inc(k); s := ''; end; until ch = #13; writeln;end. Ссылка на комментарий Поделиться на другие сайты Поделиться
ant_ig Опубликовано 25 октября, 2006 Жалоба Поделиться Опубликовано 25 октября, 2006 (изменено) ant_ig Ну, навскидку сразу несколько проблем: 1. Учитываются только одноразрядные числа (0-9) 2. Паскалевская строка может содержать не больше 255 символов 1. тут ты не прав if s<>' ' then s1:=s1+s,<- тут накапливаем 2. как я понял это для лабы, когда я учился больше 255 и не требовалось но вариант yuriks явно универсальней Изменено 25 октября, 2006 пользователем ant_ig Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 25 октября, 2006 Жалоба Поделиться Опубликовано 25 октября, 2006 ant_ig Действительно прощелкал Ссылка на комментарий Поделиться на другие сайты Поделиться
Бумер Опубликовано 25 октября, 2006 Автор Жалоба Поделиться Опубликовано 25 октября, 2006 Люди, оказалось не все так просото (для меня): Юзер вводит числа нажимая энтэр после каждого. Их надо отсортировать по возрастанию и вывести только те, которые встречаются только один раз. Использовать можно только массивы, операторы условного перехода, циклы и все. Ссылка на комментарий Поделиться на другие сайты Поделиться
Shurr Опубликовано 25 октября, 2006 Жалоба Поделиться Опубликовано 25 октября, 2006 Юзер вводит числа нажимая энтэр после каждого.Это сделать несложно - read() в цикле и нет проблем. Как узнать что он ввел все что хотел, и введенные данные пора обрабатывать?Их надо отсортировать по возрастанию и вывести только те, которые встречаются только один разТоже, собственно, проблем нету. Сначал сортировка, потом проход по отсортированному массиву и вывод только тех, которые не повторяются (одинаковые числа стоят рядом, так что проблем найти их нету).Использовать можно только массивы, операторы условного перехода, циклы и все.Хм... :) А что, собственно ты еще собирался использовать? GOTO что-ли? Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 25 октября, 2006 Жалоба Поделиться Опубликовано 25 октября, 2006 Бумер: vari,j,n: Integer; t: Integer;A: array[0..100] of Integer;beginn:=0; A[0]:=0;repeatinc(n); ReadLn (A[n]);until A[n]=0;n:=n-1;for i:=1 to n dofor j:=1 to n-i do if A[j]>A[j+1] then begint:=A[j]; A[j]:=A[j+1]; A[j+1]:=t; end; for i:=1 to n doif (A[i-1]<>A[i]) and (A[i]<>A[i+1]) then WriteLn(A[i]);end. Пример - для целых чисел, для вещественных надо изменить объявления t и A. Ввод чисел заканчивается вводом нуля. Кстати, где ты возьмешь "оператор условного перехода" в Паскале? Разве что самому сконструировать :) IF ... THEN GOTO ... Ссылка на комментарий Поделиться на другие сайты Поделиться
Бумер Опубликовано 28 октября, 2006 Автор Жалоба Поделиться Опубликовано 28 октября, 2006 А где можно нормально (понятно) почитать о сортировках вставкой, выбором и обменом. Чтоб понятно и с примерами. Есть такое? Ведь их же не учить надо, а понимать... Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 28 октября, 2006 Жалоба Поделиться Опубликовано 28 октября, 2006 Бумер: Вообще главным руководством по алгоритмам считается трехтомник Дональда Кнута "Искусство программирования". Классикой считается также "Алгоритмы и структуры данных" Никлауса Вирта. Ну и книжек и статей других авторов тоже хватает. Набери в Яндексе "сортировка данных", и можно читать до умопомрачения. Например, это или это. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти