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

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

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

> комбинированные типы данных, не работает ,как ожидается.....
-Dimanez-
сообщение 11.12.2007 1:49
Сообщение #1


Гость






не в тему: почему не могу создавать новые темы будучи пользователем, а гостем без проблем...? дескриминация)



есть программа....где описывается массив записей,которые содержит информацию о нескольких деталях(наименование, масса, габаитные размеры: длина, ширина,высота: материал).
опеределиьт массу всех деталей.
вот сам текст программы:

program zapisi;
const
nmax=10;
type
plant=record
name:string[10];
massa:integer;
gr:record
dl:integer;
sh:integer;
vis:integer;
end;
mtl:string[10]
end;

var
summary; array [1..nmax] of plant;
i,k,n,s:integer;

begin
writeln('введите количество деталей');
readln(n);

{ввод записей}

for i;=1 to n do
with summary[i] do
begin
writeln('введите данные о',i,'-ой детале:');
writeln('наименование');
readln(name);
with gr do
writeln('длина');
read(dl);
writeln('ширина');
read(sh);
writeln('высота');
read(vis)
end;
writeln('материал');
readln(mtl);
end;

{вывод заголовка таблицы}
... ...

{формирование и вывод итоговой строки}
s:=0;
for I:=1 to n do
with summary[i] do
begin
s:=s+massa;
end;
with summary[n+1] do
begin
name:='сумма масс';
massa:=s;
begin
for k:=1 to 80 do
write('_');
writeln;
end;
writeln('|',name,'':12-length(name),'|':2,s:8,'|':2);
end;
for k:=1 to 80 do
write('_');
writeln;
end.



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


наедеюсь на помощб)))

 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 8)
volvo
сообщение 11.12.2007 1:57
Сообщение #2


Гость






Цитата
при вводи строк, игнорирует строку-материал....
При вводе строк надо пользоваться ReadLn вместо Read, если нужно объяснение, почему - в поиск, уже неоднократно объяснялось... Поменяй все Read-ы на ReadLn...

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

Добавлено через 3 мин.
По поводу
Цитата
не могу создавать новые темы будучи пользователем, а гостем без проблем
- идешь сюда: Книга жалоб и предложений
поднимаешь глаза наверх, и в разделе объявление видишь заголовок... Смотришь, в чем дело...
 К началу страницы 
+ Ответить 
neic
сообщение 11.12.2007 2:06
Сообщение #3


Студент 3-к группы (ИГТК)
*

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

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


1. Вот ты-то уморил =).
for i;=1 to n do
with summary[i] do
begin
writeln('введите данные о',i,'-ой детале:');
writeln('наименование');
readln(name);
with gr do
begin
writeln('длина');
read(dl);
writeln('ширина');
read(sh);
writeln('высота');
read(vis)
end;
writeln('материал');
readln(mtl);
end;

А begin кто за тя вставлять будет? Кот Вася из первого подъезда?

2. А я в коде вообще не вижу чтобы ты массу заполнял blink.gif blink.gif

Сообщение отредактировано: neic - 11.12.2007 2:09


--------------------
Жизнь - это лестница. Когда одна ступень проваливается, 2-ая нога находиться на второй ступеньке, а значит есть и второй шанс... ©
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dimanez
сообщение 11.12.2007 2:10
Сообщение #4





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

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


черт..правда))..спасибо...сейчас испробуем)
насчет begin - не первый его пропуск в прогрмме((

Сообщение отредактировано: Dimanez - 11.12.2007 2:11
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
neic
сообщение 11.12.2007 2:12
Сообщение #5


Студент 3-к группы (ИГТК)
*

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

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


Пиши сразу же форматом. А так сам путаешься и других в заблуждение вводишь. ;)
Будут вопросы стучи в тему ;)


--------------------
Жизнь - это лестница. Когда одна ступень проваливается, 2-ая нога находиться на второй ступеньке, а значит есть и второй шанс... ©
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Dimanez
сообщение 20.12.2007 22:36
Сообщение #6





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

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


вот текст программы...с выводом таблицы итд...есь один момент...
при вводе более одной детали, программка выводи ток первую строку ..но ! подсчет суммы (что и требуется от программы) идет со всех данных о деталях..

то есть..выводит только одну первую строку...

помогите разобраться..

program lab7; 
nmax=10;
type
plant=record
name:string[10];
massa:integer;
gr:record
dl:integer;
sh:integer;
vs:integer
end;
mtl:string[10]
end;

var
summary:array[1..nmax] of plant;
i,k,n,s:integer;
begin
writeln('введите количество деталей');
readln(n);

for i:=1 to n do
with summary[i] do
begin
writeln('введите данные о',i,'-ой детале:');
write('наименование ');
readln(name);
write('масса ');
readln(massa);

with gr do
begin
write('длина ');
read(dl);
write('ширина ');
read(sh);
write('высота ');
readln(vs)
end;
write('материал ');
readln(mtl);
end;
{вывод заголовка таблицы}
for k:=1 to 80 do
write('_');
write('|','|':15,'|':10,'габаритные размеры':30,'|':10,'|':14);
write('|','наименование |':13,' масса |':10,'длина |':13,
'ширина |':13,'высота |':14,'материал |':14);
for k:=1 to 80 do
write('_');


{вывод строк таблицы}
for i:=1 to n do
with summary[i] do
begin
write('|',name:10,'':3-length(name),'|':3,
massa:7,'|':3,
gr.dl:10,'|':3,
gr.sh:10,'|':3,
gr.vs:11,'|':3,
mtl:10,'':4-length(mtl),'|');
for k:=1 to 80 do
write('_');
write;

{формирование и вывод итоговой строки}
s:=0;
for i:=1 to n do
with summary[i] do
begin
s:=s+massa;
end;
with summary[n+1] do
begin
name:='общая сумма';
massa:=s;
write('|',name:12,'':3-length(name),'|':3,s:7,'|':3,'|':54);
end;
for k:=1 to 80 do
write('_');
writeln;
end;
readln;
end.


Сообщение отредактировано: Dimanez - 20.12.2007 22:42
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.12.2007 23:10
Сообщение #7


Гость






{формирование и вывод итоговой строки}
s:=0;
for i:=1 to n do { <--- !!! }
with summary[i] do
begin

Отмеченное место является ошибкой... У тебя там присутствует вложенный цикл, причем по той же переменной I, что и внешний, "Вывод строк таблицы"...

Отформатируй исходник как положено - сам все увидишь...
 К началу страницы 
+ Ответить 
Dimanez
сообщение 21.12.2007 1:37
Сообщение #8





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

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


спасиб)...помогло)...всроду не догадался бы)

{формирование и вывод итоговой строки}
s:=0;
for i:=1 to m do { <--- !!! }
with summary[i] do
begin


ввел новый парметр цикла...

но возник дургой вопрос...теперь после каждой строки записи он выдает итоговую строк с суммой масс...а не в самом конце...исправить так и не получилось...
результат один и тот же...или после каждой строки или макси-шоу ввиде бесконечного вывода строк...


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.12.2007 1:56
Сообщение #9


Гость






Видимо, ты так и не переформатировал исходник. И не видишь, где у тебя один цикл, а где - другой... Вот же они:

  {вывод строк таблицы}
for i:=1 to n do
with summary[i] do begin
{ используем WriteLN }
writeln('|',name:10,'':3-length(name),'|':3,
massa:7,'|':3,
gr.dl:10,'|':3,
gr.sh:10,'|':3,
gr.vs:11,'|':3,
mtl:10,'':4-length(mtl),'|');

end; { <--- Все, вывод данных закончился... Осталась только итоговая строка }

{ Разделитель }
for k:=1 to 80 do write('_');
writeln;

{ формирование и вывод итоговой строки }
s:=0;
for j:=1 to n do
with summary[j] do begin
s:=s+massa;
end;

with summary[n+1] do begin
name:='общая сумма';
massa:=s;
writeln('|',name:12,'':3-length(name),'|':3,s:7,'|':3,'|':54); { <--- Опять writeLN }
end;

{ и еще разделитель }
for k:=1 to 80 do write('_');
writeln;

Можно здесь ошибиться?
 К началу страницы 
+ Ответить 

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

 



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