Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2013, 14:47   #1
Justfeel
Новичок
Джуниор
 
Регистрация: 09.12.2013
Сообщений: 2
По умолчанию Что не так? Pascal помогите(доделать)

Посмотрите все ли так и пожалуйста если можно сделайте так чтоб еще Имя выводилось, то есть кому отправлено
Условие: Описать, используя структуру данных запись, почтовую сортировку (город,
улица, дом, квартира, кому, ценность). Составить программу, определяющую: 1)
сколько посылок отправлено в г.Москву; 2) сколько отправлено посылок ценностью
выше 10 рублей; 3) кому отправлено более 1 посылки.
Код:
Program gorlobolit;
Const
nmax=100;
type
  Mail=record
  gorod:string;
  street:string;
  kvartira:integer;
  imya:string;
  cennost:integer;
end;
Var
  a:array[1..nmax] of Mail;
  b:array[1..nmax] of string;
  x:array[1..nmax] of string;
 
 i,j,k,sum,m,p,q,n,count:integer;
begin
writeln('Сколько посылок отправлено?');
readln(n);
for i:=1 to n do
with a[i] do
begin
writeln('Данные по ',i,' -й посылке:');
with a[i] do
begin
write('город:');
readln(gorod);
write('улица:');
readln(street);
repeat
write('квартира:');
readln(kvartira);
until kvartira>0;
write('кому:');
readln(imya);
repeat
write('ценность:');
readln(cennost);
until cennost>0;
end;
end;
for i:=1 to n do
b[i]:=a[i].gorod;
x[i]:=a[i].imya;
m:=n; i:=1;
while i<=m do
begin
j:=i+1;
while j<=m do
begin
if b[j]=b[i] then
begin
for k:=j to m-1 do
b[k]:=b[k+1];
m:=m-1;
 
end
else j:=j+1;
end;
i:=i+1;
end;
for i:=1 to m do
begin
sum:=0;
for j:=1 to n do
begin
if a[j].gorod=b[i] then
sum:=sum+a[j].cennost;
if a[j].imya=x[i] then
sum:=a[j].cennost;
end;
if sum>10 then
writeln('В город ',b[i],'ушло посылок на** ',sum,'рублей');
end;
count:=0;
for i:=1 to n do
if a[i].gorod='Москва*' then inc(count);
writeln('Кол-во посылок отправленных в город Москва*: ', count);
if n>1 then
writeln(' человеку ' ' ',x[i],' отправлено более одной посылке');
if sum>10 then
writeln('кол-во посылок свыше 10 руб. ''отправлено :',count);
readln;
end.
Justfeel вне форума Ответить с цитированием
Старый 20.12.2013, 15:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
все ли так
Нет. Все АБСОЛЮТНО не так. Посылки передаются не по городу а по коду почтового отделения. Естесственно потом отделение уже разводит по адресатам.
Тебе вместо города нужно сделать поле почтового индекса.
Цитата:
kvartira:integer;
Существуют квартиры с буквами.
Цитата:
cennost:integer;
Плохая идея. Ценность может быть до копеек. А возводить на 100 это глупость для того чтоб тупо хранить целое.
Короче вот что бы я сделал:
1)
Код:
type
  Mail=record
   index:string;
   street:string;
   kvartira:string[5];
   FIO:string;
   cennost:Real;
end;
2) Прием посылок:
Код:
procedure inp;
var i:integer;
begin
 for i:=1 to 10 do begin
  Write('Индекс ОПС'); readln(a[i].index);
  Write('Улица'); readln(a[i].street);
  Write('Квартира'); readln(a[i].kvartira);
  Write('Получатель'); readln(a[i].FIO);
  Write('Ценность'); readln(a[i].cennost);
 end;
end;
3)
Цитата:
сколько посылок отправлено в г.Москву;
Код:
Function SeekMail(aIndex:string):Integer;
var i,j:integer;
begin j:=0;
 for i:=1 to 10 do begin
  if a[i].index<>aindex then Continue;
  Write('Улица'); writeln(a[i].street);
  Write('Квартира'); writeln(a[i].kvartira);
  Write('Получатель'); writeln(a[i].FIO);
  Write('Ценность'); writeln(a[i].cennost);
  inc(j);
 end;
 SeekMail:=j;
end;
Тут нужно учитывать опять таки что в Москве много индексов. Но если предположить что посылки отправлены в генеральный сортировочный центр то можно просто вводить его индексы (главной сортировки), как и делается на сортировках почтовых служб.
Соответственно
Код:
write('введите индекс в москве'); readln(i); write('Итого: ',SeekMail(i));
Выдаст список посылок на этот индекс и их кол-во

Цитата:
сколько отправлено посылок ценностью
выше 10 рублей;
Ну тоже самое только
Код:
Function SeekMailCen(acennost :string):Integer;
...
if a[i].cennost<acennost then ...
...
Цитата:
кому отправлено более 1 посылки.
Это сложнее. Два цикла
Код:
Function Count(k:integer):Integer;
var i,j:integer;
begin j:=0;
 for i:=1 to 10 do begin
  if 
    (a[k].index=a[i].index) and
    (a[k].street=a[i].street) and
    (a[k].kvartira=a[i].kvartira) and
    (a[k].FIO=a[i].FIO) and
  then 
  inc(j);
 end;
 Count:=j;
end;

Procedure SeekRecp;
var i,j:integer;
begin 
 for i:=1 to 10 do begin
  if Count(i)=1 then Continue;
  Write('Улица'); writeln(a[i].street);
  Write('Квартира'); writeln(a[i].kvartira);
  Write('Получатель'); writeln(a[i].FIO);
  Write('Ценность'); writeln(a[i].cennost);
 end;
end;
Соответственно: Write(SeekRecp); должно показать получателей с несколькими посылками.

Коды я пишу с потолка, так что проверять их тебе. Но однозначно то что в топе темы написано не катит, или катит но на двойку.
I'm learning to live...

Последний раз редактировалось Stilet; 20.12.2013 в 15:11.
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
что то не так с выводом кода. помогите плиз mishammm Помощь студентам 5 29.09.2013 22:14
помогите Что я делаю не так? FaRRa Общие вопросы Delphi 5 22.09.2013 16:48
Turbo Pascal исправьте меня что не так виталик66 Помощь студентам 0 21.05.2012 20:59
Помогите определить что с компом не так?? molodoyy Компьютерное железо 15 02.01.2009 22:06