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

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

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

 
 Ответить  Открыть новую тему 
> комбинированные типы данных, не работает ,как ожидается.....
сообщение
Сообщение #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.



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


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

 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

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

Добавлено через 3 мин.
По поводу
Цитата
не могу создавать новые темы будучи пользователем, а гостем без проблем
- идешь сюда: Книга жалоб и предложений
поднимаешь глаза наверх, и в разделе объявление видишь заголовок... Смотришь, в чем дело...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -


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





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

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


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

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


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

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

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


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


--------------------
Жизнь - это лестница. Когда одна ступень проваливается, 2-ая нога находиться на второй ступеньке, а значит есть и второй шанс... ©
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






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

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

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





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

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


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

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


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

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


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 





- Текстовая версия 21.09.2020 20:57
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name