Автор: Ветеран-склеротик 11.11.2004 5:36
В годы светлой и безоблачной юности, когда компьютеры были в тысячу раз медленнее - а цветов на мониторе так и вовсе в мильоны раз меньше было - знавал я Паскаль как свои пять пальцев, а то и лучше.
Всякие там ТэЭсЭры мерзопакостные и прочие полезные штуки с пацанами клепали.
Жизнь была впереди и весь мир лежал у наших залитых соса-солой клавиш.
Потом настали крупные да твёрдые окна (как принято было тогда говорить... и как до сих пор некоторым оскомину не набило!?), глобальное зл.. ой, то бишь - глобальная сеть, линухи-подсолнухи и прочие знаковые хреновины нашего глобализованного и глубоко брендированного времени.
Прошли годы.
И попросила меня вчера девчушка милая - ну, мол, ты типа умный, кнопки нажимать умеешь, значит наверняка помочь сможешь. Задачки две, на паскале. Реши, мол, а?
Сами понимаете, дамам не отказывают ;)
Да и почему бы стариной не тряхнуть?
Тряхнул, называется.
Друзья! Я понимаю, что преподавателям надо что-то преподавать, кому-то переучиваться поздно, кому-то влом, кто-то от жизни оторван.. но чтобы настолько!?
Не очень врубаюсь, почему паскаль - и, вернее даже, ТОЛЬКО паскаль!!! - до сих пор требуют в университетах!?
Я ещё понимаю, лет эдак 10 назад, когда винда и инет только набирали обороты.
Но сейчас!? Какая польза от этого практическая?
Понимаю, да, основы программирования, стиля правильного и тд и тп... но... эх!
Зачем это всяким юристам-экономистам?
Лучше уж хмтл-ю учили бы их, ей 6огу, хоть какая-то польза могла бы быть.
А программирование, да без практики - на кой?
Крик души просто вырвался, не могу остановить.
Остаётся надеяться, что это не прочитает любимый в светлые годы (см. выше) тов. Калашников из Физтеха, который меня в своё время на данную тему просвещал... да и вообще никого обидеть не хочу
Просто удивляюсь чуток.
Ну так вот.
Поставил я Паскаль - господи! лет эдак шесть его вообще не видел, не вспоминал. Полчаса пытался освоиться с когда-то родной, а нынче такой непривычной оболочкой.
Признаюсь, так и не удалось :p2:
А уж чтобы написать что-то!!!!!!!!!!!!!
НАРОД! это травма на всю жизнь.
Я, писавший когда-то на паскале чуть ли не лучше всех в своём городе, несколько минут потратил на написание хеллоу ворлд :o
В общем!
Друзья, выручайте, ежели кому не влом будет
Могу отблагодарить - к примеру, на php и тд накатать чего угодно, или ещё как...
После нескольких лет пэхапэ с экшен скриптом милый родимый паскаль уже, боюсь, понять заново не получится .. по крайней мере, это заняло бы много времени.
Ассемблер - и тот вспомнить проще, думаю.
Т.к. он особенный, а тут всё уже перемешалось.
Ладно, даже вот написал это всё - и то полегчало :D
А уж если поможет кто старику-склеротику - и вовсе ...!!!
Так. Вот они, задачки.
---1
Каждая из N компаний предоставила перечень из M машин разных моделей - для их приобретения В ЕДИНСТВЕННОМ (!) экземпляре.
Составить общий перечень необходимых моделей машин с указанием их кол-ва, расположив модели в порядке убывания потребности в них.
---2
Структура записи исходных данных:
{ Код предприятия | Название предприятия | Продукция | Произведено, ед. | Цена (ед.) }
2.1 Дать сведения об общем выпуске конкретного вида продукции (в натуральном выражении) и средней стоимости выпуска одним предприятием.
2.2 Дать сведения об общем выпуске продукции каждого вида продукции и о её средней цене.
2.3 Выдать список предприятий в порядке убывания стоимости произведённой продукции
---
Вот такие вот задачки.
Понимаю, что не на две минуты - но и сложного ничего нет
Что меня сразу убило - это требование компилятора в секии var объявить длину массива :no:
Отвык я от таких дел! Сразу руки опустились.
На php, ясен пень, задача решается на раз плюнуть.
Но на паскале.. эх, ладно, уже повторяюсь. Хватит! ;)
Короче, удачи всем !!!
Если вдруг,... заранее спасибо!!!
Зайду ещё сюда днём да ближе к вечеру.
p.s. надеюсь, никого своим криком души не обидел.. давайте жить дружно и всё такое! просто очень удивился, .. а так, лет 10 назад сам лекции мог читал про это дело, хехе... как говорится, и на старуху, sh*t happens, и так далее
Автор: Altair 11.11.2004 14:43
Цитата
Друзья, выручайте, ежели кому не влом будет
Ну раз вас девушка попросила, то надо помочь
чего-нибудь сейчас сделаю ...
Автор: Altair 11.11.2004 16:01
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 11.11.2004 16:24
Oleg_Z
Цитата
не ясно откуда брать эту потребность ...
С этим, как раз все ясно - нужно считать количество заказов на каждую модель и потом сортировать эти количества по убыванию. Чем больше модель заказывают - тем потребность выше :yes:
Автор: Altair 11.11.2004 17:32
ОК, а откуда брать количество заказов? :D :P
Автор: volvo 11.11.2004 20:04
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 12.11.2004 11:05
volvo, что-то здесб связанно с экономикой чую ;)
А везде где экономика пересекаетсяс программированием, там хаос и неразбериха имхо
Имхо задание дано не точно ... (во всяком случае для меня)