IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Школьная задача, Массив (последовательность чисел)
Сержик
сообщение 7.04.2012 23:11
Сообщение #1





Группа: Пользователи
Сообщений: 1
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Задали задачу, написал код но что то не проходит ( последний раз писал 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.

Что то не пойму в чем дело,почему не работает, задачу помогал делать друг (основная работа его)
Буду благодарен за помощь
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
Федосеев Павел
сообщение 8.04.2012 9:59
Сообщение #2


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Отсортируй исходную последовательность. Дальше просто.

----------------------------
Погонял прогу несколько раз - всё правильно работает.
Но, что собственно не устраивает?

Сообщение отредактировано: Федосеев Павел - 8.04.2012 10:06
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Сержик
сообщение 8.04.2012 15:40
Сообщение #3


Гость






начинаю прогонят код в RUN
выходит окно размер последовательности до 100 ввожу н равное например 30 нажимаю энтер и окно завкрывется остается окно с кодом
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 8.04.2012 15:46
Сообщение #4


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Добавь в конце readln
..............
write('Press enter...');
readln;
end.


Сообщение отредактировано: Федосеев Павел - 8.04.2012 15:46
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Сержик
сообщение 8.04.2012 17:43
Сообщение #5


Гость






Спасибо так стало получше, но что то, несооответствует условиям задачи
Как Вы считаете мой код правильный?
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 8.04.2012 18:17
Сообщение #6


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Условие выполняется?
Цитата
содержащую только те числа, которые в исходную последоватеьность входят по одному разу

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

Если нет, то приведите примервходных данных.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 8.04.2012 18:37
Сообщение #7


Гость






Вот так получается
 К началу страницы 
+ Ответить 
Гость
сообщение 8.04.2012 18:38
Сообщение #8


Гость






s019.radikal.ru/i608/1204/ba/ea9d80280088.jpg
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 8.04.2012 18:48
Сообщение #9


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Стесняюсь спросить, я что поступает на вход программы? Какие данные она вводит? Неужели массив?
Или всё же нечто иное - длину массива? Того самого, что заполняется случайными числами от 0 до 9.

Да и строка приглашения какбэ намекает:
Цитата
write('Размер последовательности A до ',nmax,'n=');


Сообщение отредактировано: Федосеев Павел - 8.04.2012 18:49
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Сержик
сообщение 8.04.2012 19:17
Сообщение #10


Гость






Вообще должно быть так вводишь последовательность а на основе ее появляется новая
А получилось то что есть (делал с помошью друга и интернета)
Если вводишь размер последовательности то выходит что последовательность строится сама?
 К началу страницы 
+ Ответить 
TarasBer
сообщение 8.04.2012 19:36
Сообщение #11


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(Гость @ 8.04.2012 18:38) *

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

ЖОПЕГокартинка пипец.
В вин7 в пеинте по умолчанию предлагается ПНГ, который куда больше подходит для таких изображений, но снова и снова я вижу мерзские отвратительные мыльные жопегокартинки. Откуда вы их берёте?!


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 8.04.2012 22:17
Сообщение #12


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Сержик, да. Ввод массива вручную:
  for i:=1 to 10 do
read(a[i]);
writeln;


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

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

Сообщение отредактировано: Федосеев Павел - 8.04.2012 22:43
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Сержик
сообщение 8.04.2012 22:25
Сообщение #13


Гость






А можете поправить код что бы последовательность вводилась а программа сравнивала числа и строила новую?

JPEG для того что бы можно было посмотреть на всех устройствах (у меня телефон его поддерживает)
 К началу страницы 
+ Ответить 
Krjuger
сообщение 8.04.2012 22:44
Сообщение #14


Профи
****

Группа: Пользователи
Сообщений: 652
Пол: Мужской
Реальное имя: Алексей

Репутация: -  20  +


Федосеев Павел 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.


Если я правильно тебя понял,если неправильно,то обьясни,что тебе надо более доходчиво.

Сообщение отредактировано: Krjuger - 8.04.2012 23:04
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 9.04.2012 1:09
Сообщение #15


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


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

Offtop, но... (Показать/Скрыть)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
TarasBer
сообщение 9.04.2012 9:21
Сообщение #16


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Цитата(Krjuger @ 8.04.2012 22:44) *

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


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

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

Сообщение отредактировано: TarasBer - 9.04.2012 10:21


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Сержик
сообщение 9.04.2012 15:56
Сообщение #17


Гость






Нужно решить задачу в начале топика.
Мой код автоматически выводит последовательность, а мне нужно что бы последовательность которую ввели
переделать в другую состоящая из тех чисел которые в исходную входят по одному разу.
Т.е. код должен быть наверно в два раза меньше моего
 К началу страницы 
+ Ответить 
Федосеев Павел
сообщение 9.04.2012 19:33
Сообщение #18


Бывалый
***

Группа: Пользователи
Сообщений: 298
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  8  +


Исправленный под требование ручного ввода исходник предоставлен выше.
Программа правильно решает поставленную задачу.
Хоть алгоритм неаптимален для больших последовательностей, для малых он вполне приемлем и даже оптимален.

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

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

--------------------
Может быть, топикстартер не может выразить мысль хочет сказать, что выходная последовательность должна быть сохранена в отдельном массиве, а уже потом выведена на экран? Тогда
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.


Сообщение отредактировано: Федосеев Павел - 9.04.2012 19:52
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Сержик
сообщение 9.04.2012 20:33
Сообщение #19


Гость






Всем большое СПАСИБО!!!!!
Особенно Федосеев Павел тебе отдельная благодарность.
Спасибо за код завтро покажу преподавателю свой код твой и Krjuger
Krjuger тебе тоже большое спасибо. Я просто прогонял твой код и подумал он не правильный, но потом что то щелкнуло у меня решил немного посмотреть и добавил readln; после
read(a[i]);
for i:=1 to n do
write(a[i]:3);

И все заработало.
Теперь осталось начертить блок схему.
Надеюсь у меня получится.
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.04.2012 2:27
Сообщение #20


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Сержик @ 9.04.2012 21:33) *
Всем большое СПАСИБО!!!!!

Сержик, давай кончай заходить гостем - логинься и сможешь реально прибавлять репутацию тем, кто тебе помог (после 5 постов). Может, тебе так и удобнее, но все же подумай о других. Или ты забыл пароль? Заведи тогда новый акк, а тот я уничтожу.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:22
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"