не в тему: почему не могу создавать новые темы будучи пользователем, а гостем без проблем...? дескриминация)
есть программа....где описывается массив записей,которые содержит информацию о нескольких деталях(наименование, масса, габаитные размеры: длина, ширина,высота: материал).
опеределиьт массу всех деталей.
вот сам текст программы:
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. Вот ты-то уморил =).
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. А я в коде вообще не вижу чтобы ты массу заполнял
черт..правда))..спасибо...сейчас испробуем)
насчет begin - не первый его пропуск в прогрмме((
Пиши сразу же форматом. А так сам путаешься и других в заблуждение вводишь. ;)
Будут вопросы стучи в тему ;)
вот текст программы...с выводом таблицы итд...есь один момент...
при вводе более одной детали, программка выводи ток первую строку ..но ! подсчет суммы (что и требуется от программы) идет со всех данных о деталях..
то есть..выводит только одну первую строку...
помогите разобраться..
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.
{формирование и вывод итоговой строки}Отмеченное место является ошибкой... У тебя там присутствует вложенный цикл, причем по той же переменной I, что и внешний, "Вывод строк таблицы"...
s:=0;
for i:=1 to n do { <--- !!! }
with summary[i] do
begin
спасиб)...помогло)...всроду не догадался бы)
{формирование и вывод итоговой строки}
s:=0;
for i:=1 to m do { <--- !!! }
with summary[i] do
begin
Видимо, ты так и не переформатировал исходник. И не видишь, где у тебя один цикл, а где - другой... Вот же они:
{вывод строк таблицы}Можно здесь ошибиться?
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;