Помощь - Поиск - Пользователи - Календарь
Полная версия: забыл паскаль напрочь - а ведь было время!))
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Ветеран-склеротик
В годы светлой и безоблачной юности, когда компьютеры были в тысячу раз медленнее - а цветов на мониторе так и вовсе в мильоны раз меньше было - знавал я Паскаль как свои пять пальцев, а то и лучше.
Всякие там ТэЭсЭры мерзопакостные и прочие полезные штуки с пацанами клепали.
Жизнь была впереди и весь мир лежал у наших залитых соса-солой клавиш.

Потом настали крупные да твёрдые окна (как принято было тогда говорить... и как до сих пор некоторым оскомину не набило!?), глобальное зл.. ой, то бишь - глобальная сеть, линухи-подсолнухи и прочие знаковые хреновины нашего глобализованного и глубоко брендированного времени.

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

Тряхнул, называется.
Друзья! Я понимаю, что преподавателям надо что-то преподавать, кому-то переучиваться поздно, кому-то влом, кто-то от жизни оторван.. но чтобы настолько!?
Не очень врубаюсь, почему паскаль - и, вернее даже, ТОЛЬКО паскаль!!! - до сих пор требуют в университетах!?
Я ещё понимаю, лет эдак 10 назад, когда винда и инет только набирали обороты.
Но сейчас!? Какая польза от этого практическая?
Понимаю, да, основы программирования, стиля правильного и тд и тп... но... эх!
Зачем это всяким юристам-экономистам?
Лучше уж хмтл-ю учили бы их, ей 6огу, хоть какая-то польза могла бы быть.
А программирование, да без практики - на кой?
Крик души просто вырвался, не могу остановить.
Остаётся надеяться, что это не прочитает любимый в светлые годы (см. выше) тов. Калашников из Физтеха, который меня в своё время на данную тему просвещал... да и вообще никого обидеть не хочу smile.gif
Просто удивляюсь чуток.

Ну так вот.
Поставил я Паскаль - господи! лет эдак шесть его вообще не видел, не вспоминал. Полчаса пытался освоиться с когда-то родной, а нынче такой непривычной оболочкой.
Признаюсь, так и не удалось :p2:

А уж чтобы написать что-то!!!!!!!!!!!!!
НАРОД! это травма на всю жизнь.
Я, писавший когда-то на паскале чуть ли не лучше всех в своём городе, несколько минут потратил на написание хеллоу ворлд :o

В общем!
Друзья, выручайте, ежели кому не влом будет rolleyes.gif
Могу отблагодарить - к примеру, на php и тд накатать чего угодно, или ещё как...
После нескольких лет пэхапэ с экшен скриптом милый родимый паскаль уже, боюсь, понять заново не получится .. по крайней мере, это заняло бы много времени.
Ассемблер - и тот вспомнить проще, думаю.
Т.к. он особенный, а тут всё уже перемешалось.

Ладно, даже вот написал это всё - и то полегчало :D
А уж если поможет кто старику-склеротику - и вовсе ...!!!

Так. Вот они, задачки.

---1
Каждая из N компаний предоставила перечень из M машин разных моделей - для их приобретения В ЕДИНСТВЕННОМ (!) экземпляре.
Составить общий перечень необходимых моделей машин с указанием их кол-ва, расположив модели в порядке убывания потребности в них.

---2
Структура записи исходных данных:
{ Код предприятия | Название предприятия | Продукция | Произведено, ед. | Цена (ед.) }

2.1 Дать сведения об общем выпуске конкретного вида продукции (в натуральном выражении) и средней стоимости выпуска одним предприятием.
2.2 Дать сведения об общем выпуске продукции каждого вида продукции и о её средней цене.
2.3 Выдать список предприятий в порядке убывания стоимости произведённой продукции

---

Вот такие вот задачки.
Понимаю, что не на две минуты - но и сложного ничего нет smile.gif
Что меня сразу убило - это требование компилятора в секии var объявить длину массива :no:
Отвык я от таких дел! Сразу руки опустились.
На php, ясен пень, задача решается на раз плюнуть.
Но на паскале.. эх, ладно, уже повторяюсь. Хватит! ;)

Короче, удачи всем !!!
Если вдруг,... заранее спасибо!!!
Зайду ещё сюда днём да ближе к вечеру.

p.s. надеюсь, никого своим криком души не обидел.. давайте жить дружно и всё такое! просто очень удивился, .. а так, лет 10 назад сам лекции мог читал про это дело, хехе... как говорится, и на старуху, sh*t happens, и так далее
Altair
Цитата
Друзья, выручайте, ежели кому не влом будет 

Ну раз вас девушка попросила, то надо помочь smile.gif
чего-нибудь сейчас сделаю ...
Altair
1 задача.
Не сказано, откуда берутся исходные данные... Может из файла может еще откуда...
Не сказано, предоставляют ли все компании одинаковое количество моделей.
Не сказано что значит составить список необходимых моделей.

Дальше -
Цитата
Составить общий перечень необходимых моделей машин с указанием их кол-ва
Поскольку ничего не сказано, предположим, что у разных компаний есть одинаковые модели ...
(иначе какое может быть количество, ведь сказано, что для приобретения в ед. экз.?)
Цитата
расположив модели в порядке убывания потребности в них.

неясно, откуда брать эту потребность ... вероятно сортировка, только по какому признаку?

На основании таких скудных данных о задаче, можно предположить следующее задание:
Дано: 1. Массив
Код
array [1..N, 1..M] of name: string; {название модели}
все компании предоставляют одинаковое количество моделей.
2. Файл в котором в порядке уменьшения необходимости моделей написаны названия моделей.
P.S.: массив вводится вручную, текстовый файл с указанием необходимости должен быть создан. На каждой строчке должно быть имя модели.

Требуется записать в текстовый файл перечень моделей в порядке необходимости с указанием количество моделей.
Если так пойдет (а это на 100% соответствует условию задачи, ни один пункт не противоречит условию!) то вот программа:
Код
Type
TELEM = record
         name: string;
         kol:word
        end;
ArrType = array[1..1,1..1] of TELEM;

Var
 Arr:^ArrType;
 i,j,N,M:word;
 path:string;
 f:text;
 r:text;
begin
write('ўўҐ¤ЁвҐ Є®«ЁзҐбвў® Є®¬Ї ­Ё©, ЇаҐ¤®бв ўЁўиЁе ЇҐаҐз­Ё ¬®¤Ґ«Ґ© (N): ');
readln(N);
write('ўўҐ¤ЁвҐ Є®«ЁзҐбўв® ЇаҐ¤®бв ў«Ґ­­ле ¬®¤Ґ«Ґ©: '); readln(m);
GetMem(arr,N*M*SizeOf(TELEM)); {ўл¤Ґ«Ґ­ЁҐ Ї ¬пвЁ Ї®¤ ­ и ¤Ё­ ¬Ёз. ¬ ббЁў}
For i:=1 to n do
for j:=1 to m do
begin
 writeln('Є®¬Ї ­Ёп ­®¬Ґа ',i);
 write('ўўҐ¤ЁвҐ Ё¬п ',j,' ¬®¤Ґ«Ё:');readln(arr^[i,j].name);
 write('ўўҐ¤ЁвҐ Є®«ЁзҐбўв®: '); readln(arr^[i,j].kol)
end;
repeat
 write('ўўҐ¤ЁвҐ Ё¬п д ©«  б ¤ ­­л¬Ё ® ­Ґ®Ўе®¤Ё¬®бвЁ ¬®¤Ґ«Ґ©: ');
 readln(path);
 assign(f,path);
 {$I-}reset(f) {$I+}
until IOResult=0;
Write('‚ўҐ¤ЁвҐ Ё¬п д ©«  ¤«п б®еа ­Ґ­Ёп १г«мв в®ў: ');
readln(path);
assign(r,path);
rewrite(r);

while NOT EOF(F) do
begin
 readln(f,path);
 for i:=1 to n do for j:=1 to m do If arr^[i,j].name=path then
   writeln(r,'Є®¬Ї ­Ёп ­®¬Ґа: ',i,' ',arr^[i,j].name,' ',arr^[i,j].kol);
end;
close(f); close(r);
 FreeMem(arr,N*M*SizeOf(TELEM));
end.

Обратите внимание что массивы и в паскале динамические ;) :)

2 задача.
По сути это БД. Для удобства пусть это все хранится в файле со следующей структурой:
<Код_предприятия><пробел>
<Название_предприятия><пробел>
<Продукция><пробел>
<Произведено_ед.><пробел>
<Цена (ед.)>
где <прбел> Это новая строка :lol: :D
Где <Код_предприятия> - целое без знака
<Название_предприятия> - строка
<Продукция> - строка
<Произведено_ед.> и <Цена (ед.)> - целое без знака.

Код
Type
TELEM = record
         KOD:word;
         Name:string[30];
         prod:string[30];
         kol:word;
         zena:word
        end;
ArrType = array[1..1] of TELEM;

Var
 Arr:^ArrType;
 s:string;
 f:text;
 kolstr,i:word;
begin
repeat
 write('ўўҐ¤ЁвҐ Ё¬п д ©«  б Ёб室­л¬Ё ¤ ­­л¬Ё: ');
 readln(s);
 assign(f,s);
 {$I-} reset(f) {$I+}
Until IOResult=0;
While not EOF(F) do begin readln(f,s); inc(kolstr) end; {Ї®¤бзҐв Є®«-ў  бва®Є ў д ©«Ґ}
Reset(F); {ЇҐаҐ®вЄалвЁҐ, гЄ § ⥫м д ©«  ­  1}
kolstr:=round(kolstr/5);
GetMem(arr,kolstr*SizeOf(TELEM));
i:=1;
while not eof(f) do
begin
 readln(f,arr^[i].KOD);
 readln(f,arr^[i].Name);
 readln(f,arr^[i].prod);
 readln(f,arr^[i].kol);
 readln(f,arr^[i].zena);
 inc(i);
end;
close(f);


{ For i:=1 to kolstr do writeln(arr^[i].KOD,' ',arr^[i].Name,
 ' ',arr^[i].prod,' ',arr^[i].kol,' ', arr^[i].zena);}

Freemem(arr,kolstr*SizeOf(TELEM));

end.

Этот код только для чтения из файла данных... думаю что реализовать все остальное нет особого труда, все данные уже в динамическуом массиве, так что доделаете....
volvo
Oleg_Z

Цитата
не ясно откуда брать эту потребность ...

С этим, как раз все ясно - нужно считать количество заказов на каждую модель и потом сортировать эти количества по убыванию. Чем больше модель заказывают - тем потребность выше :yes:
Altair
ОК, а откуда брать количество заказов? :D rolleyes.gif :P
volvo
Oleg_Z

Цитата
Каждая из N компаний предоставила перечень из M машин разных моделей - для их приобретения В ЕДИНСТВЕННОМ (!) экземпляре.


Если модель X присутствует в списке из M машин (предоставленном компанией Y), количество заказов на эту модель увеличивается... Вся проблема - как представлять этот самый список из M машин...

Я думаю, что раз в единственном экземпляре - неплохо бы задействовать множества... Итак, имеем:
Код

Type
 machineType = (model_1, model_2, ..., model_M);
 modelSet = set of machineType;
const
 modelName: Array[machineType] of string =
 ('machine_name_01', 'machine_name_02', ... 'machine_name_M');
var
 Order: Array[1 .. n{кол-во компаний}] of modelSet;
 Count: Array[machineType] Of integer;
 count_index: array[1 .. m] of machineType;


а потом идем по Order и проверяем, сколько раз в нем встречается модель model_1, model_2, и т.д. Результаты - записываем в Count... А потом сортируем Count по убыванию (вместе с переформированием Count переформируем также count_index) и печатаем:

Код

 for i := low(machineType) to high(machine_type) Do
   if Count > 0 Then
     WriteLn( succ(ord(i)), ' - ', modelName[count_index[Ord(i)]], ' - ', count[i] );


Все просто ... :P
Altair
volvo, что-то здесб связанно с экономикой чую ;)
А везде где экономика пересекаетсяс программированием, там хаос и неразбериха имхо smile.gif

Имхо задание дано не точно ... (во всяком случае для меня)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.