Помощь - Поиск - Пользователи - Календарь
Полная версия: комбинированные типы данных
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Dimanez-
не в тему: почему не могу создавать новые темы будучи пользователем, а гостем без проблем...? дескриминация)



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

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.



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


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

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

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

Добавлено через 3 мин.
По поводу
Цитата
не могу создавать новые темы будучи пользователем, а гостем без проблем
- идешь сюда: Книга жалоб и предложений
поднимаешь глаза наверх, и в разделе объявление видишь заголовок... Смотришь, в чем дело...
neic
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
Dimanez
черт..правда))..спасибо...сейчас испробуем)
насчет begin - не первый его пропуск в прогрмме((
neic
Пиши сразу же форматом. А так сам путаешься и других в заблуждение вводишь. ;)
Будут вопросы стучи в тему ;)
Dimanez
вот текст программы...с выводом таблицы итд...есь один момент...
при вводе более одной детали, программка выводи ток первую строку ..но ! подсчет суммы (что и требуется от программы) идет со всех данных о деталях..

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

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

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

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

Отформатируй исходник как положено - сам все увидишь...
Dimanez
спасиб)...помогло)...всроду не догадался бы)

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


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

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


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

  {вывод строк таблицы}
  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;

Можно здесь ошибиться?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.