Помощь - Поиск - Пользователи - Календарь
Полная версия: Школьная задача
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Сержик
Задали задачу, написал код но что то не проходит ( последний раз писал 7 лет назад)
Дана последовательность целых чисел a1, a2, ..., am . Постройте на ее основе новую
последовательность, содержащую только те числа, которые в исходную
последоватеьность входят по одному разу.
uses crt;
const nmax=100;
var a:array[1..nmax] of integer;
n,i,j:byte;
f,k:boolean;
begin
clrscr;
randomize;
repeat
write('Размер последовательности A до ',nmax,'n=');
readln(n);
until n in [1..nmax];
writeln('Последовательнось:');
for i:=1 to n do
begin
a[i]:=random(10);
write(a[i]:3);
end;
writeln;
writeln;
writeln('Входят по одному разу:');
k:=false;
for i:=1 to n do
begin
f:=true;
for j:=1 to n do
if(a[i]=a[j])and(i<>j) then f:=false;
if f then
begin
write(a[i]:3);
k:=true;
end;
end;
if not k then write('Таких чисел нет');
end.

Что то не пойму в чем дело,почему не работает, задачу помогал делать друг (основная работа его)
Буду благодарен за помощь
Федосеев Павел
Отсортируй исходную последовательность. Дальше просто.

----------------------------
Погонял прогу несколько раз - всё правильно работает.
Но, что собственно не устраивает?
Сержик
начинаю прогонят код в RUN
выходит окно размер последовательности до 100 ввожу н равное например 30 нажимаю энтер и окно завкрывется остается окно с кодом
Федосеев Павел
Добавь в конце readln
..............
write('Press enter...');
readln;
end.
Сержик
Спасибо так стало получше, но что то, несооответствует условиям задачи
Как Вы считаете мой код правильный?
Федосеев Павел
Условие выполняется?
Цитата
содержащую только те числа, которые в исходную последоватеьность входят по одному разу

Что не соответствует?

Если нет, то приведите примервходных данных.
Гость
Вот так получается
Гость
s019.radikal.ru/i608/1204/ba/ea9d80280088.jpg
Федосеев Павел
Стесняюсь спросить, я что поступает на вход программы? Какие данные она вводит? Неужели массив?
Или всё же нечто иное - длину массива? Того самого, что заполняется случайными числами от 0 до 9.

Да и строка приглашения какбэ намекает:
Цитата
write('Размер последовательности A до ',nmax,'n=');
Сержик
Вообще должно быть так вводишь последовательность а на основе ее появляется новая
А получилось то что есть (делал с помошью друга и интернета)
Если вводишь размер последовательности то выходит что последовательность строится сама?
TarasBer
Цитата(Гость @ 8.04.2012 18:38) *

s019.radikal.ru/i608/1204/ba/ea9d80280088.jpg

ЖОПЕГокартинка пипец.
В вин7 в пеинте по умолчанию предлагается ПНГ, который куда больше подходит для таких изображений, но снова и снова я вижу мерзские отвратительные мыльные жопегокартинки. Откуда вы их берёте?!
Федосеев Павел
Сержик, да. Ввод массива вручную:
  for i:=1 to 10 do
read(a[i]);
writeln;


TarasBer, да, и не говори. Зверев(=звезда) в шоке - человек почти самостоятельно (см. первый топик) создал программу на 40 строк и на пртяжении дня делает в ней открытие за открытием.

Сержик, не принимай близко к сердцу, но кое-что ты мог сделать 1) самостоятельно и 2) на сутки раньше.
Сержик
А можете поправить код что бы последовательность вводилась а программа сравнивала числа и строила новую?

JPEG для того что бы можно было посмотреть на всех устройствах (у меня телефон его поддерживает)
Krjuger
Федосеев Павел png хуже качеством,но занимает места меньше.Поскольку для данного рода фоток качество вообще не важно(в разумных пределах конешно же).То логичней использовать формат,который занимает меньше памяти.Можно еще в плюсы записать,что интернета меньше кушает,да, немного натянуто,но все же.

Цитата
JPEG для того что бы можно было посмотреть на всех устройствах (у меня телефон его поддерживает)

Если чесно,то весьма сомнительный довод. То что у вас на телефоне поддерживается,не значит,что у всех поддерживается,функционал,знаете ли бывает разный.Смысл сидеть да форуме с данной тематикой с мобильного телефона????Это не развлекательных Баш.


const nmax=100;
var a:array[1..nmax] of integer;
n,i,j:byte;
f,k:boolean;
begin
randomize;
repeat
write('Размер последовательности A до ',nmax,'n=');
readln(n);
until n in [1..nmax];
writeln('Последовательнось:');
for i:=1 to n do
read(a[i]);
for i:=1 to n do
write(a[i]:3);
writeln;
writeln;
writeln('Входят по одному разу:');
k:=false;
for i:=1 to n do
begin
f:=true;
for j:=1 to n do
if(a[i]=a[j])and(i<>j) then f:=false;
if f then
begin
write(a[i]:3);
k:=true;
end;
end;
if not k then write('Таких чисел нет');
readln;
end.


Если я правильно тебя понял,если неправильно,то обьясни,что тебе надо более доходчиво.
IUnknown
Цитата
png хуже качеством

Offtop, но... (Показать/Скрыть)
TarasBer
Цитата(Krjuger @ 8.04.2012 22:44) *

png хуже качеством


PNG вообще не теряет качество, вообще-то. В отличие от ужасного мыльного жопега.
Жопег нужен только там, где ПНГшные алгоритмы сжатия сливают по размеру.

Правка - да и то, зачастую, если ПНГ хреново сжимает, то есть смысл сначала перегнать в 256 или 16 -цветный формат (только не пеинтом, микрософт до сих пор не осилил автопоиск оптимальной палитры), причём может даже без зашумления, а потом применить уже сжатие ПНГ.
Сержик
Нужно решить задачу в начале топика.
Мой код автоматически выводит последовательность, а мне нужно что бы последовательность которую ввели
переделать в другую состоящая из тех чисел которые в исходную входят по одному разу.
Т.е. код должен быть наверно в два раза меньше моего
Федосеев Павел
Исправленный под требование ручного ввода исходник предоставлен выше.
Программа правильно решает поставленную задачу.
Хоть алгоритм неаптимален для больших последовательностей, для малых он вполне приемлем и даже оптимален.

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

Подведу итог - короче отформатированный исходник уже не станет (только длиннее), и это и есть окончательная редакция программы для этой задачи.

--------------------
Может быть, топикстартер не может выразить мысль хочет сказать, что выходная последовательность должна быть сохранена в отдельном массиве, а уже потом выведена на экран? Тогда
uses
crt;
const
nmax = 100;
var
a, b: array [1..nmax] of integer;
n,i,j, k: byte;
f: boolean;
begin
clrscr;
randomize;
repeat
Write('Размер последовательности A до ',nmax,' n=');
readln(n);
until n in [1..nmax];
writeln('Последовательнось:');
for i:=1 to n do
begin
a[i]:=random(10);
Write(a[i]:3, ' ');
end;
writeln;
writeln;
k:=0; {индекс в массиве b}
for i:=1 to n do
begin
f:=true;
for j:=1 to n do
if (a[i]=a[j])and(i<>j) then f:=false;
if f then
begin
Inc(k);
b[k]:=a[i];
end;
end;
WriteLn;
writeln('Входят по одному разу:');
if k=0 then Write('Таких чисел нет');
for i:=1 to k do
Write(b[i]:3);
WriteLn;
readln;
end.
Сержик
Всем большое СПАСИБО!!!!!
Особенно Федосеев Павел тебе отдельная благодарность.
Спасибо за код завтро покажу преподавателю свой код твой и Krjuger
Krjuger тебе тоже большое спасибо. Я просто прогонял твой код и подумал он не правильный, но потом что то щелкнуло у меня решил немного посмотреть и добавил readln; после
read(a[i]);
for i:=1 to n do
write(a[i]:3);

И все заработало.
Теперь осталось начертить блок схему.
Надеюсь у меня получится.
Lapp
Цитата(Сержик @ 9.04.2012 21:33) *
Всем большое СПАСИБО!!!!!

Сержик, давай кончай заходить гостем - логинься и сможешь реально прибавлять репутацию тем, кто тебе помог (после 5 постов). Может, тебе так и удобнее, но все же подумай о других. Или ты забыл пароль? Заведи тогда новый акк, а тот я уничтожу.
Сeржик
Может кто поможет составить блок схему, какой день мучаюсь.
Попробовал с помощью программы получилась очень большая и много циклов
Сeржик
Может выложить тот код который мне сделала программа?
Lapp
Цитата(Сeржик @ 13.04.2012 17:21) *
Может выложить тот код который мне сделала программа?
Нет, уж лучше жабу в рот..
Мы все тут (надеюсь, я в целом правильно выражаю мнение всех завсегдатаев этого форума) уже устали бороться с этими программными построителями блок-схем. БОЛЬШИЙ вред для обучения програмированию трудно себе представить. Советую этот твой "код" стереть с жесткого диска, а сам ЖД выбросить в очко в нужнике. А для построения блок-схемы надо применять не программы, а МОЗГИ, причем НЕ ПОСЛЕ написания проги, а ДО ТОГО. Если ты, как сказал, "какой день мучишься", то лучше покажи хоть что-то из своих наработок. Составить б-с не проблема, но нужна хоть какая-то затравка с твоей стороны. Дело это муторное, и просто так никто делать не станет. Если покажешь, что хоть что-то сделал - мож, кто и сжалится..
Сeржик
Вот что у меня получилось. Завтро пойду сдавать.

Изображение

Изображение
Гость
Всем спасибо контрольную благополучно сдал.
P.S. Первый цикл в блок схеме не правильно оформлен нужно поменять местами.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.