![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Окран |
![]()
Сообщение
#1
|
Гость ![]() |
Умоляю помочь сделать данную задачу до завтрашнего дня!!!!!Очень прошу!!Сам вышел из больницы 2 дня назад и в первый же день учебы лабараторная по паскалю на котором я был всего на 1-2 лекциях а потом загремел по состоянию здоровья в больницу!!!Пожалуйста!!!!
Код Полугодовая информация о изданиях по каждому подчиненному имеет следующую структуру: ФИО - 20 знаков участок доставки - 2 знака адрес кол-во выписанных изданий - 2 знака список изданий адрес в свою очередь состоит из следующих компонентов: улица - 20 знаков номер дома - 3 знака номер квартиры - 3 знака Список изданий состоит из следующих компонентов: название - 20 знаков вид - 1 знак(газета, журнал) месяцы на которые оформлена подписка. Список изданий представляет собой массив структур, содержащий N элементов из которых заполнены K - количествовыписанных изданий.Если подписчик оформил подписку на более чем N изданий то для него имеется 2 или более записи идущие подряд.Информация о месяцах подписки может быть представлена в виде массива из 12 логических элементов. А теперь само задание :) : создайте файл о подписных изданиях. |
![]() ![]() |
BlackShadow |
![]()
Сообщение
#2
|
Гость ![]() |
Код Const N = 20; Type TMonths=Array[0..1] Of Boolean; TIzdanie=Record Title:Strin[20]; Tip:Char; Months:TMonth End; TAddr=Record Street:String[20]; Home:String[3]; Flat:String[3] End; TChel=Record Name:String[20]; Uchastok:String[2]; Addr:TAddr; Count:String[2]; Izdaniya:Array[0..N-1] Of TIzdan End; Const Names:Array[0..2] Of String = ('Ivanov','Petrov','Sidorov'); {Дополнишь сам} Streets:Array[0..2] Of Stirng = ('Pervaya','Vtoraya','Tretyaya'); {См. выше} Titles:Array[0..2] Of String = ('Programmer','Lamer','Sysop'); {Ну ты догадался} Tips:Array[0..2] Of Char = ('G','J','D'); {Буквы на угад. Типы изданий.} MName:Array[0..1] Of String = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); Var Chels:Array[1..100] Of TChel; TotalChels:Integer; TotalRecords:Integer; {Придумывает человечка и сохраняет его в массиве} Procedure GenerateChel; Var x,i,j:Integer; Begin With Chels[TotalRecords] Do Begin Name:=Names[Random(3)]; {Придумаем имя} Str(Random(100),Uchastok); {Придумаем участок} Addr.Street:=Streets[Random(3)]; {Придумаем улицу} Str(Random(1000),Addr.Home); {Дом} Str(Random(1000),Addr.Flat) {Квартиру} x:=Random(50)+1; {Вот столько изданий он и выписал} Str(x,Count); End; {Придумаем ему издания} For i:=0 To x-1 Do With Chels[TotalRecords+(i Div N)].Izdaniya[i Mod M] Do Begin Title:=Titles[Random(3)]; {Название} Tip:=Tips[Random(3)]; {Тип} For j:=0 To 11 Do Months[j]:=Random(2)=0; {Месяцы подписки} End; Inc(TotalRecords,x Div N) End; Var f:Text; i,j,k,x,e:Integer; Begin Randomize; TotalChels:=Random(30); {Не более 30 человек, где 0 значит, что 1 чел всё-таки есть} TotalRecords:=0; {В массиве Chels пока ничего нет} For i:=0 To TotalChels Do {придумаем всех челов} GenerateChel; Assign(f,'Chels.Txt'); {Создадим файл} ReWrite(f); i:=0; While i < TotalRecords Do {И скинемтуда все записи} Begin With Chels[i] Do Begin WriteLn(f,Name); WriteLn(f,' From Uchastok ',Uchastok); WriteLn(f,' That Lives At ',Addr.Street,' in house #',Home,' in flat ',Flat); WriteLn(f,' Subscribed For ',Count,' izdaniy:'); Val(s,x,e) End; For j:=0 To x-1 Do With Chels[i + (j Div N)].Izdaniya[j Mod N] Do Begin Write(f,Ttitle,' (',Tip,') :'); For k:=0 To 11 Do If Months[k] Then Write(f,MName[k]); WriteLn(f) End; Inc(i,1 + (x Div N)) End; Close(f) End. Должно быть так. сли что не так - свисти, отвечу. |
Окран |
![]()
Сообщение
#3
|
Гость ![]() |
Простите пожалуйста, но у вас целая куча ошибок!!!Такие как неправильное название stirng вместо string я исправил но там остались какие-то непонятные!!!Памагите пожалуйста!!!
|
BlackShadow |
![]()
Сообщение
#4
|
Гость ![]() |
Я с работы писал - там у меня компилятора нет.
Ща перепроверю ближе к вечеру пришлю. |
BlackShadow |
![]()
Сообщение
#5
|
Гость ![]() |
Код Const N = 20; Type TMonths=Array[0..1] Of Boolean; TIzdanie=Record Title:String[20]; Tip:Char; Months:TMonths End; TAddr=Record Street:String[20]; Home:String[3]; Flat:String[3] End; TChel=Record Name:String[20]; Uchastok:String[2]; Addr:TAddr; Count:String[2]; Izdaniya:Array[0..N-1] Of TIzdanie End; Const Names:Array[0..2] Of String = ('Ivanov','Petrov','Sidorov'); {Дополнишь сам} Streets:Array[0..2] Of String = ('Pervaya','Vtoraya','Tretyaya'); {См. выше} Titles:Array[0..2] Of String = ('Programmer','Lamer','Sysop'); {Ну ты догадался} Tips:Array[0..2] Of Char = ('G','J','D'); {Буквы на угад. Типы изданий.} MName:Array[0..11] Of String = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); Var Chels:Array[0..100] Of TChel; TotalChels:Integer; TotalRecords:Integer; {Придумывает человечка и сохраняет его в массиве} Procedure GenerateChel; Var x,i,j:Integer; Begin With Chels[TotalRecords] Do Begin Name:=Names[Random(3)]; {Придумаем имя} Str(Random(100),Uchastok); {Придумаем участок} Addr.Street:=Streets[Random(3)]; {Придумаем улицу} Str(Random(1000),Addr.Home); {Дом} Str(Random(1000),Addr.Flat); {Квартиру} x:=Random(50)+1; {Вот столько изданий он и выписал} Str(x,Count); End; {Придумаем ему издания} For i:=0 To x-1 Do With Chels[TotalRecords+(i Div N)].Izdaniya[i Mod N] Do Begin Title:=Titles[Random(3)]; {Название} Tip:=Tips[Random(3)]; {Тип} For j:=0 To 11 Do Months[j]:=Random(2)=0; {Месяцы подписки} End; Inc(TotalRecords,(x Div N) + Byte((x Mod N) <> 0)) End; Var f:Text; i,j,k,x,e:Integer; Begin Randomize; TotalChels:=Random(30); {Не более 30 человек, где 0 значит, что 1 чел всё-таки есть} TotalRecords:=0; {В массиве Chels пока ничего нет} For i:=0 To TotalChels Do {придумаем всех челов} GenerateChel; Assign(f,'Chels.Txt'); {Создадим файл} ReWrite(f); i:=0; While i < TotalRecords Do {И скинемтуда все записи} Begin With Chels[i] Do Begin WriteLn(f,Name); WriteLn(f,' From Uchastok ',Uchastok); WriteLn(f,' That Lives At ',Addr.Street,' in house #',Addr.Home,' in flat ',Addr.Flat); WriteLn(f,' Subscribed For ',Count,' izdaniya:'); Val(Count,x,e) End; For j:=0 To x-1 Do With Chels[i + (j Div N)].Izdaniya[j Mod N] Do Begin Write(f,' ',Title,' (',Tip,') :'); For k:=0 To 11 Do If Months[k] Then Write(f,MName[k],' '); WriteLn(f) End; Inc(i,(x Div N) + Byte((x Mod N) <> 0)) End; Close(f) End. Старею... Без компилятора уже трудновато ![]() |
Окран |
![]()
Сообщение
#6
|
Гость ![]() |
Храни тебя бог!!!!!!!!!!!
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Окран |
![]()
Сообщение
#7
|
Группа: Пользователи Сообщений: 6 Репутация: ![]() ![]() ![]() |
BlackShadow друг выручи меня еще раз пожалуйста!!!!!
На эту же задачу тока вот новое задание: Код Написать программу обработки файла подписных изданий по данным № месяца и изданию!Найдите количество экземпляров, подлежащих доставке! Спаси утопающего! ![]() |
BlackShadow |
![]()
Сообщение
#8
|
Гость ![]() |
Аллах акбар!
Я понял так: надо перелопатить файл, созданный прошлой прогой и вычленить оттуда кол-во изданий с указанным названием, на которые кто-нибудь да подписался в указнном месяце. Если так, то лови: Код Type TMonths=Array[0..11] Of Boolean; TIzdanie=Record Title:String[20]; Tip:Char; Months:TMonths End; TAddr=Record Street:String[20]; Home:String[3]; Flat:String[3] End; TChel=Record Name:String[20]; Uchastok:String[2]; Addr:TAddr; Count:String[2]; Izdaniya:Array[0..N-1] Of TIzdanie End; Var f:File Of TChel; IzdName:String; SubscrMonth:Integer; Total:Integer; x,e,i:Integer; c:TChel; Begin Write('Enter Name Of Izdanie: '); ReadLn(IzdName); Write('Enter Month (0..11, where 0 is January): '); ReadLn(SubscrMonth); Assign(f,'Chels.Txt'); Reset(f); Total:=0; While Not Eof(f) Do Begin Read(f,c); Val(c.Count,x,e); i:=0; While i<x Do Begin If (i>0) And (i Mod N = 0) Then Read(f,c); With c.Izdaniya[i Mod N] Do If Title = IzdName Then If Months[SubscrMonth] Then Inc(Total) End End; Close(f); WriteLn('Total ',Total,' units of ',IzdName,' will be needed') End. Опять с работы, опять без компилятора. Если что - свисти. |
Окран |
![]()
Сообщение
#9
|
Группа: Пользователи Сообщений: 6 Репутация: ![]() ![]() ![]() |
BlackShadow ругается на переменную N-ты ее вроде не обозначил?????
|
BlackShadow |
![]()
Сообщение
#10
|
Гость ![]() |
Забыл.
Ну допиши в начале Код Const N = 20; Только смотри, чтобы в обеих прогах N совпадало. |
Окран |
![]()
Сообщение
#11
|
Группа: Пользователи Сообщений: 6 Репутация: ![]() ![]() ![]() |
BlackShadow я так и сделал!!Спасиба!!!!
Сдал я сегодня программу а препод как начал меня спрашивать!!!!!Ой!!!!! Скажи пожалуйста что означают следующие строки?? Код Total:=0; Код Val(c.Count,x,e); Код TChel=Record Name:String[20]; Uchastok:String[2]; Addr:TAddr; Count:String[2]; (что вот это????) Izdaniya:Array[0..N-1] Of TIzdanie End; И что это за цикл такой и как работает??Почему тут i:=0? Код Val(c.Count,x,e); i:=0; While i<x Do Begin If (i>0) And (i Mod N = 0) Then Read(f,c); With c.Izdaniya[i Mod N] Do If Title = IzdName Then If Months[SubscrMonth] Then Inc(Total) End Спасибо большое за все что ты сделал для меня!!! ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
BlackShadow |
![]()
Сообщение
#12
|
Гость ![]() |
Ндя...
Начнём 1). Усвой сразу и навсегда, если ещё собираешься вернуться к программированию: любая переменная обнуляется (число = 0б строка - пустая) при запуске программы ТОЛЬКО В РЕЖИМЕ ОТЛАДКИ! А при обычном запуске на её месте может (с вероятностью 2^SizeOf(Variable):1) отнюдь не 0. Поэтому перед посчётом чего-то там я принудительно обнулил переменную Total. А то ведь могло бы получиться, что 3 человека выписали 148 журналов "Мурзилка" на январь ![]() 2). Процедура Val преобразует строку в число: Val(Str:String;Var x;Var e:Integer). Первый параметр, понятно, строка, второй - туда куда преобразовывать, третий - код ошибки. Сюда записывается номер первого неверного символа в строке ('ю' например) или 0, если всё пучком. В этой программе кол-во подписок я храню в виде строки, а цикл-то строкой не организуешь - вот и перевожу в число. 3). Вроде уже как и сказал... Count - кол-во изданий, на которые подписан данный чел. Хранится в виде строки для удобства (хотя, может и неудобства, но я так написал). 4). А цикл этот вот что делает. Он перебирает все издания этого чела, проверяет, то ли название у текущей подписки и активна ли она в нужном месяце. Если всё это выполняется, то увеличивает Total. Делается это так. Сначала в x записывается сколько у него вообще подписок. Затем начинаем цикл по i (почему i:=0, надеюсь понятно из п. 1). Внутри цикла сначала проверяем, не пришло ли время считать очередную запись (так как в одной записи может храниться максимум N подписок, а их может быть больше, тогда надо брать сведения из следующей записи, см. условия). после этого выполняются все вышеперечисленные проверки и т. д. для подписки №(i Mod N). Если вдуматься, то можно заметить, что i проходит цикл от 0 до x-1, а i Mod N - от 0 до N-1, но при этом переключаясь на другие записи (как, если ты хочешь сделать 50 шагов, но делаешь их по кругу радиусом в метр). Это вобщем и есть основная задумка всей программы. Вот, вроде и всё. |
APAL |
![]()
Сообщение
#13
|
![]() Смотрю... ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 1 055 Пол: Мужской Реальное имя: Пшеничный Алексей Анатольевич Репутация: ![]() ![]() ![]() |
Цитата И что это за цикл такой и как работает??Почему тут i:=0? А что, препод не знает что это за цикл такой? :D -------------------- |
Окран |
![]()
Сообщение
#14
|
Группа: Пользователи Сообщений: 6 Репутация: ![]() ![]() ![]() |
BlackShadow спасибо друг!!!
![]() ![]() ![]() ![]() Вот последнее задание и я получу зачет: Код Написать программу обработки файла подписных изданий по заданным ФИО.Распечатать список подписных изданий подписчика(записей, относящихся к одному подписчику может быть несколько)!!!! Пожалуйста!!! |
BlackShadow |
![]()
Сообщение
#15
|
Гость ![]() |
Код Const N = 20; Type TMonths=Array[0..11] Of Boolean; TIzdanie=Record Title:String[20]; Tip:Char; Months:TMonths End; TAddr=Record Street:String[20]; Home:String[3]; Flat:String[3] End; TChel=Record Name:String[20]; Uchastok:String[2]; Addr:TAddr; Count:String[2]; Izdaniya:Array[0..N-1] Of TIzdanie End; Const MonthName:Array[0..11] Of String=('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'); Var f:File Of TChel; Name:String; c:TChel; i,j:Integer; Begin Write('Enter Name: '); ReadLn(Name); Assign(f,'Chels.Txt'); Reset(f); While Not Eof(f) Do Begin Read(f,c); If c.Name=Name Then Begin Val(c.Count,x,e); i:=0; While i<x Do Begin If (i>0) And (i Mod N = 0) Then Read(f,c); With c.Izdaniya[i Mod N] Do Begin Write(Title,': '); For j:=0 To 11 Do If (Monts[j]) Then Write(MonthName[j]); WriteLn End; Inc(i) End End; Close(f) End. Вроде так... Если "вывод на печать" подразумевает принтёр, то добавь в начало Uses Printer; и допиши пару строк: Код With c.Izdaniya[i Mod N] Do Begin Write(Title,': '); Write(Lst,Title,': '); For j:=0 To 11 Do If (Monts[j]) Then Begin Write(MonthName[j]); Write(Lst,MonthName[j]) End WriteLn; WriteLn(Lst) End; Должно работать... |
Окран |
![]()
Сообщение
#16
|
Группа: Пользователи Сообщений: 6 Репутация: ![]() ![]() ![]() |
BlackShadow тебе можно памятник ставить - спасибо!!!
Только вот еще одно НО!К первой проге заставили составить блок-схему. Как ее делать? Как записи там обозначать?А с файлами какие блоки? Помогите плиз!!! Код Const N = 20; Type TMonths=Array[0..1] Of Boolean; TIzdanie=Record Title:String[20]; Tip:Char; Months:TMonths End; TAddr=Record Street:String[20]; Home:String[3]; Flat:String[3] End; TChel=Record Name:String[20]; Uchastok:String[2]; Addr:TAddr; Count:String[2]; Izdaniya:Array[0..N-1] Of TIzdanie End; Const Names:Array[0..2] Of String = ('Ivanov','Petrov','Sidorov'); {Дополнишь сам} Streets:Array[0..2] Of String = ('Pervaya','Vtoraya','Tretyaya'); {См. выше} Titles:Array[0..2] Of String = ('Programmer','Lamer','Sysop'); {Ну ты догадался} Tips:Array[0..2] Of Char = ('G','J','D'); {Буквы на угад. Типы изданий.} MName:Array[0..11] Of String = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'); Var Chels:Array[0..100] Of TChel; TotalChels:Integer; TotalRecords:Integer; {Придумывает человечка и сохраняет его в массиве} Procedure GenerateChel; Var x,i,j:Integer; Begin With Chels[TotalRecords] Do Begin Name:=Names[Random(3)]; {Придумаем имя} Str(Random(100),Uchastok); {Придумаем участок} Addr.Street:=Streets[Random(3)]; {Придумаем улицу} Str(Random(1000),Addr.Home); {Дом} Str(Random(1000),Addr.Flat); {Квартиру} x:=Random(50)+1; {Вот столько изданий он и выписал} Str(x,Count); End; {Придумаем ему издания} For i:=0 To x-1 Do With Chels[TotalRecords+(i Div N)].Izdaniya[i Mod N] Do Begin Title:=Titles[Random(3)]; {Название} Tip:=Tips[Random(3)]; {Тип} For j:=0 To 11 Do Months[j]:=Random(2)=0; {Месяцы подписки} End; Inc(TotalRecords,(x Div N) + Byte((x Mod N) <> 0)) End; Var f:Text; i,j,k,x,e:Integer; Begin Randomize; TotalChels:=Random(30); {Не более 30 человек, где 0 значит, что 1 чел всё-таки есть} TotalRecords:=0; {В массиве Chels пока ничего нет} For i:=0 To TotalChels Do {придумаем всех челов} GenerateChel; Assign(f,'Chels.Txt'); {Создадим файл} ReWrite(f); i:=0; While i < TotalRecords Do {И скинемтуда все записи} Begin With Chels[i] Do Begin WriteLn(f,Name); WriteLn(f,' From Uchastok ',Uchastok); WriteLn(f,' That Lives At ',Addr.Street,' in house #',Addr.Home,' in flat ',Addr.Flat); WriteLn(f,' Subscribed For ',Count,' izdaniya:'); Val(Count,x,e) End; For j:=0 To x-1 Do With Chels[i + (j Div N)].Izdaniya[j Mod N] Do Begin Write(f,' ',Title,' (',Tip,') :'); For k:=0 To 11 Do If Months[k] Then Write(f,MName[k],' '); WriteLn(f) End; Inc(i,(x Div N) + Byte((x Mod N) <> 0)) End; Close(f) End. |
fms |
![]()
Сообщение
#17
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 195 Пол: Женский Репутация: ![]() ![]() ![]() |
а в чем проблемы с блок схемами то?!
___ и любят преподы издеваться.. ![]() -------------------- непонимающая..
|
Catty |
![]()
Сообщение
#18
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 239 Пол: Женский Реальное имя: Юлия Репутация: ![]() ![]() ![]() |
Код Как записи там обозначать?А с файлами какие блоки? записи по-моему обозначаются обычными прямоугольными блоками (если идет действие с этой записью), а файлы обозначаются ввиде бочек или больших венчестеров или фиг его знает что оно такое!! ![]() ![]() -------------------- For every evil under the sun
There is a remedy or there is none If there is one - try to find it If there is none - never mind it! |
Окран |
![]()
Сообщение
#19
|
Группа: Пользователи Сообщений: 6 Репутация: ![]() ![]() ![]() |
Вы очень помогли!
![]() |
kile |
![]()
Сообщение
#20
|
Новичок ![]() Группа: Пользователи Сообщений: 14 Репутация: ![]() ![]() ![]() |
окран, ты еще недоволен ??
|
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 0:09 |