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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2016, 23:13   #1
lizka270398
 
Регистрация: 08.01.2016
Сообщений: 3
По умолчанию Нужна помощь в программе, тип - запись. Создать файл содержащий сведения о веществах. (Паскаль)

Создать файл содержащий сведения о веществах.Структура записи: название вещества,удельный вес,проводимость(проводник,полупров одник,изолятор).Количество записей не менее 15.Написать программу выдающую следующую информацию:
- о всех полупроводниках;
-данные о проводниках,упорядоченные по убыванию их удельных весов;
-изолятор с максимальным удельным весом.
-есть ли сведения стекле ,если нет- дописать данную информацию в файл.

Есть вот такая программка,но она на таблицу.а мне нужно создать фаил с информацией.
Код:
Const Veshestvo = 1;

Type Material = Record {материал}
                Name: String[20]; {наименование}
                Weight: Real; {удельный вес}
                Provod: Integer; {проводимость}
                                 {0 - изолятор}
                                 {1 - полупроводник}
                                 {2 - проводник}
           End;


Var Result,I,J,N: Integer;
    F : Array[1..20] Of Material;

    
Begin

F[1].name := 'Медь';           F[1].Weight := 4.00; F[1].Provod := 2;
F[2].name := 'Бумага';         F[2].Weight := 66.0; F[2].Provod := 0;
F[3].name := 'Кремний';        F[3].Weight := 5.40; F[3].Provod := 1;
F[4].name := 'Германий';       F[4].Weight := 21.5; F[4].Provod := 1;
F[5].name := 'Арсеид галлия'; F[5].Weight := 3.00; F[5].Provod := 1;
F[6].name := 'Алюминий';       F[6].Weight := 50.0; F[6].Provod := 2;
F[7].name := 'Керамика*';       F[7].Weight := 9.90; F[7].Provod := 0;
F[8].name := 'Резина';         F[8].Weight := 80.0; F[8].Provod := 0;
F[9].name := 'Фторпласт';     F[9].Weight := 4.00; F[9].Provod := 0;

       N := 9;
       Result := 0;

       Writeln('Наименование материала   Удельный вес     Проводимость');
       Writeln('-----------------------------------------------------------');
       For I := 1 to N Do
           If (F[I].Provod = Veshestvo) Then Begin
              Write(F[I].Name:22,F[I].Weight:15:2);

              Case F[I].Provod Of
              0: WriteLn('изолятор':15);
              1: WriteLn('полупроводник':15);
              2: WriteLn('проводник':15);
              End;

              Result := Result + 1;
           End;
       Writeln('-----------------------------------------------------------');
       Writeln('Найдено' , Result , 'материала.');

       If Result = 0 Then WriteLn('Такого материала нет');
       Readln;
End.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 08.01.2016 в 23:33.
lizka270398 вне форума Ответить с цитированием
Старый 08.01.2016, 23:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Это несложно.
Надо объявить файловую переменную
Код:
var f: file of Material;
связываете с файлом на диске и открываете на запись:
Код:
Assign(f, 'D:\YourFile.rec');
Rewrite(f);
и писать нужные элементы:
Код:
Write(f, F[i]);
потом закрыть файл
Код:
Close(f);
Учтите, что файл будет типизированный (бинарный) и просто так его не откроешь и не посмотришь - только программным путём можно получить доступ к его содержимому.

Есть вопросы?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.01.2016, 23:53   #3
lizka270398
 
Регистрация: 08.01.2016
Сообщений: 3
По умолчанию

Спасибо,Вы прекрасно объяснили как создать файл с информацией!Мне это очень помогло!!! Но самая большая загвоздка на самом деле в записи в этот файл дополнительной информации о стекле и упорядочении удельных весов по убыванию может Вы и в этом мне поможете?! (студентка 1 курса)
lizka270398 вне форума Ответить с цитированием
Старый 09.01.2016, 00:36   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Но самая большая загвоздка на самом деле в записи в этот файл дополнительной информации о стекле
нужно прочитать файл, последовательно проверить все записи, если среди них name='Стекло', если есть, то ничего не делать, иначе перейти в конец файла и записать в конец новую запись про стекло.
в коде это выглядит примерно так:
Код:
Reset(f);
flagIsStekloInFile:=false;
while Not Eof(f) do begin
  Read(f, OneRec);
  if OneRec.Name='Стекло' then begin 
    flagIsStekloInFile := true;
    break    
  end;
end;
if not flagIsStekloInFile then begin {записи о Стекле нет, нужно добавить}
  Seek(f, FileSize(f)); {перейти в конец файла}
  OneRec.Name := 'Стекло';
  OneRec.Weight := КакоеТочисло_удельный_вес_стекла; 
  OneRec.Provod := 0; {если мне память верна, то стекло - это изолятор}
  Write(f, OneRec); {дописали в конец файла}
end;
Close(f); {закрыли файл}

Цитата:
упорядочении удельных весов по убыванию
Вы имеете в виду:
Цитата:
данные о проводниках,упорядоченные по убыванию их удельных весов;
я бы не парился.
описал статический массив, размером записей на 1000 (с запасом, так сказать).
Прочитал из файла в него только те записи, которые являются проводником (.Provod=2)
Отсортировал массив любым удобным способом (да хоть тем же "Пузырьком")
Вывел содержимое массива.

Что вызывает сложности из описанного?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.01.2016, 10:35   #5
lizka270398
 
Регистрация: 08.01.2016
Сообщений: 3
По умолчанию

спасибо большое ,что возитесь со мной!
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение


я бы не парился.
описал статический массив, размером записей на 1000 (с запасом, так сказать).
Прочитал из файла в него только те записи, которые являются проводником (.Provod=2)
Отсортировал массив любым удобным способом (да хоть тем же "Пузырьком")
Вывел содержимое массива.
во это вызывает сложности,тоже вчера читала про пузырьковый метод,но не особо понимаю как сделать чтоб выходили не удельные весы,а наименование ещества.
и еще паскаль требует двоеточия после Assign(f, 'C:ximi.pas') выдает ошибку,
еще никак не могу записи записать он то равенство требует ,то двоеточие
lizka270398 вне форума Ответить с цитированием
Старый 09.01.2016, 10:41   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
и еще паскаль требует двоеточия после Assign(f, 'C:ximi.pas') выдает ошибку,
какой у Вас компилятор Паскаля?
если Delphi или FreePascal, то вместо Assign нужно писать AssignFile()
и, кстати, вместо Close(f) нужно писать CloseFIle(f)

Массив нужно описывать с типом ваших записей:
Код:
const MaxCount = 1000;

var
  F : Array[1..MaxCount] Of Material;
а отсортировать его проще простого:
пусть в этом массиве есть n записей.
тогда:
Код:
  {сортировка}
  for i:=1 to n-1 do
    for j:=i+1 to n do
      if F[i].Weight<F[j].Weight then begin
        temp:=F[i];
        F[i]:=F[j];
        F[j]:=temp;
      End;

Последний раз редактировалось Serge_Bliznykov; 09.01.2016 в 10:46.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 09.01.2016, 11:24   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
какой у Вас компилятор Паскаля?
если Delphi или FreePascal, то...
можно этот код выкинуть и написать свой новый годный код.

з.ы. поосторожней с веществами. а то у нас тут за инфу про вещества чуть википедию не забанили!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык С Создать файл, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю. Каждая запись содержит поля: ф FYNZIK Помощь студентам 0 04.03.2014 12:51
Создать файл содержащий сведения о том kot i @ Паскаль, Turbo Pascal, PascalABC.NET 0 25.05.2010 17:27