Форум 3DNews
Вернуться   Форум 3DNews > Программирование > Программирование

Ответ Создать новую тему
Опции темы Опции просмотра
Непрочитано 02.08.2005, 18:04   [включить плавающее окно]   #1
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
Помогите усовешенствовать и разобратся - Задание в паскале.

Мне было задана куча заданий - и вот решил тут одно заданице набить.

Посмотрел пример и набил - и получается. Но хочу усовершенствовать работу программы.

Вот задание: РАЗРАБОТАТЬ БАЗУ ДАННЫХ "ДЕТСКАЯ БИБЛИОТЕКА" (ФАМИЛИЯ, ИМЯ, ОТЧЕСТВО, АВТОРА КНИГИ, НАЗВАНИЕ КНИГИ, ГОРОД И ИЗДАТЕЛЬСТВО, ГОД ВЫПУСКА). ВЫВЕСТИ НА ЭКРАН ДАННЫЕ О КНИГАХ, ВЫПУЩЕННЫХ В 1995 ГОДУ.
======================================
Вот что я набил:
-----------------------
Program pr_12;
uses crt;
type person=record
sname,name,otc,avtr,nb,pub,year:string[14];
end;

var rbook:array[1..20] of person;
f1,f2:text; i,n:integer;
st1:string;

BEGIN clrscr; Assign(f1,'p1.pas'); Rewrite(f1);

writeln('Введите количество записей'); readln(n);
for i:=1 to n do with rbook[i] do begin

WRITELN('Фамилия '); readln(sname); writeln(f1,sname);

WRITELN('имя'); readln(name); writeln(f1,name);

WRITELN('Отчество'); readln(otc); writeln(f1,otc);

WRITELN('Автар книги');readln(avtr); writeln(f1,avtr);

WRITELN('Название книги');readln(nb); writeln(f1,nb);

WRITELN('Издательство');readln(pub); writeln(f1,pub);

WRITELN('Год выпуска');readln(year); writeln(f1,year);


end;


Assign(f2,'p2.pas'); rewrite(f2);
Writeln('Введите год');
Readln(st1); Writeln('Ф И О Автар книги Название книги Издательство Год выпуска');
Writeln(f2,'Ф И О Автар книги Название книги Издательство Год выпуска');
for i:=1 to n do begin With rbook[i] do
if year=st1 then begin
Writeln(sname:10,name:10,otc:10,avtr:10,nb:10,pub:10,year:10);
Writeln(f2,sname:10,name:10,otc:10,avtr:10,nb:10,pub:10,year:10);
end; end;
close(f1); Close(f2); readln; END.
-------------------------------------------
!!! как в выше описанной программе (что вней под корректировать чтобы) - сделать так чтобы после того как я введу N количество данных она не спрашивал по какому году искать а сразу за меня искала и вывела резултьата года 1995 !!! - покажите какие строки на что заменить.
--------------------------------------------
программа работает но вот что мне не нравится - фантазировать имена фаимли отчества итд для N количества персон - это немного нудно

и я подумал а почему бы не сделать так создать уже файл P1.pas вбить туда эти данные (вот тока сразу возникает вопрос каким оброзом) запустив уже удавшеюся программуу и минутку думая на соченяв имена прогнав её выполнев все действия я уже получил этот файл мне тока остаётся переписать программу чтобы уже содержимое файла считать)

вот как выглядит содержимое файла:B]P1.pas[/B] :
Федотов
Игорь
Алексеев
Азимов
Академия


это на одну персону данные

я прочитал в книге чтобы паскаль считал мне этот файл надо ввести вот такую строку Assign(f1,'p1.pas'); reset(f1); т.е. мне надо её по идее заменить в и получается вот что
====================
Program pr_12;
uses crt;
type person=record
sname,name,otc,avtr,nb,pub,year:string[14];
end;

var rbook:array[1..20] of person;
f1,f2:text; i,n:integer;
st1:string;

BEGIN clrscr; Assign(f1,'p1.pas'); reset(f1);

Assign(f2,'p2.pas'); rewrite(f2);
Writeln('Введите год');
Readln(st1); Writeln('Ф И О ');
Writeln(f2,'Ф И О А');
for i:=1 to n do begin With rbook[i] do
if year=st1 then begin
Writeln(sname:10,name:10,otc:10,avtr:10,nb:10,pub:10,year:10);
Writeln(f2,sname:10,name:10,otc:10,avtr:10,nb:10,pub:10,year:10);
end; end;
close(f1); Close(f2); readln; END.
===============================
Программа запускается (об ошибках не сообщаентся т.е. с виду их нет):
Но Во первых я не вижу (как сделать так что когда я указываю паскалю что данные необходимо взять из другого файла т.е. считать - чтобы содержимое этого файла (текстового) отоброзилось на экране т.е. вылетает соодержимое потом вопрос какой год?
Во вторых я указываю год 96 и в текстовом файле там есть такой (при работе с тем текстом к программае что я набил в самом верху где я должен всё вручную персонально набить - это работает а в этом случае варианта - высвечивается тока ФИО - т.е. заголовок но нет данных - в чём ошибка?
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.08.2005, 01:29   [включить плавающее окно]   #2
KpeHgeJIb
Мужской Заслуженный
 
Аватар для KpeHgeJIb
 
Регистрация: 10.02.2003
Адрес: Израиль
Цитата (flashg) »
(что вней под корректировать чтобы)
уверен что сам писал?
Код:
Assign(f2,'p2.pas'); 
rewrite(f2);
st1:='1995';
Writeln('Ф И О Автар книги Название книги Издательство Год выпуска');
Writeln(f2,'Ф И О Автар книги Название книги Издательство Год выпуска');
for i:=1 to n do 
begin 
  With rbook[i] do
    if year=st1 then 
      begin
        Writeln(sname:10,name:10,otc:10,avtr:10,nb:10,pub:10,year:10);
        Writeln(f2,sname:10,name:10,otc:10,avtr:10,nb:10,pub:10,year:10);
      end; 
end;
close(f1); 
Close(f2);
readln;  
END.
Цитата (flashg) »
Код:
for i:=1 to n do 
  with rbook[i]do 
    begin
      WRITELN('Фамилия '); readln(sname); writeln(f1,sname);
      WRITELN('имя'); readln(name); writeln(f1,name);
      ...
А тут я подазреваю ты [i] пропустил.

PS Ну и почерк у вас, уважаемый
KpeHgeJIb вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.08.2005, 02:26   [включить плавающее окно]   #3
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
спасибо за помощь а почему ты не поверил что я её сам набил?
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.08.2005, 09:05   [включить плавающее окно]   #4
KpeHgeJIb
Мужской Заслуженный
 
Аватар для KpeHgeJIb
 
Регистрация: 10.02.2003
Адрес: Израиль
Цитата (flashg) »
а почему ты не поверил что я её сам набил?
Да потомучто вроде ты все набил, и считывание и поиск, а переделать чтоб прога автоматом все искала затрудняешся, что на мой взгляд странно. Так что либо писал не сам, либо сам но просто совмещая куски кода из разных примеров из книги.
Цитата (flashg) »
я прочитал в книге чтобы паскаль считал мне этот файл надо ввести вот такую строку Assign(f1,'p1.pas'); reset(f1); т.е. мне надо её по идее заменить в и получается вот что
Паскаль сам ничего ни откуда не читает. Reset открывает файл не обнуляя его внутренность как rewrite, но это не означает что содержимое файла самом по себе попадет в масив rbook. Всю инфу нужно считать из файла.
KpeHgeJIb вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.08.2005, 11:48   [включить плавающее окно]   #5
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
да я взял с книги пример.

Так можно сделать чтобы не самому вбивать персон а взять из заранее набитого текстового файла и чтобы фильтрация осуществилась по этому текстовому файлу. Если да то как?
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.08.2005, 16:48   [включить плавающее окно]   #6
KpeHgeJIb
Мужской Заслуженный
 
Аватар для KpeHgeJIb
 
Регистрация: 10.02.2003
Адрес: Израиль
Цитата (flashg) »
Так можно сделать чтобы не самому вбивать персон а взять из заранее набитого текстового файла и чтобы фильтрация осуществилась по этому текстовому файлу. Если да то как?
Да, можно. Содержимое файла надо считать. Я не буду писать тебе готовый алгоритм, дойди до него сам.
Но подсказки могу дать. И так Для того чтоб начать считывать данные из уже существующего файла, нужно открыть его с помощью Reset, а затем считать из него данные используя Read или Readln. Это почти тоже самое что читать с клавиатуры, но только в Read и Readln первым параметром передается файловая переменная.
Тоесть если есть файловая переменная f и строка s
Код:
Var
   f:Text;
   s:string;
то
Код:
begin 
  Assign(f, 'Drive:\Path\filename.ext');
  Reset(f);
  Readln(f,s);
...
end.
Считает первую строчку из файла.

Также удели внимание функции Eof которая возвращает True когда дстигнут конец файла и False в противном случае. В купе с циклом While эта функция позволит прочитать файл до конца, а не только N значений как это делает for.
Вот впринципе и вся информация к размышлению.

Последний раз редактировалось KpeHgeJIb; 03.08.2005 в 16:50.
KpeHgeJIb вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.08.2005, 19:47   [включить плавающее окно]   #7
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
а мне обязательно полный путь указывать

Assign(f, 'Drive:\Path\filename.ext');

если фаил в той же директории т.е. можно ли прописать
Assign(f, 'filename.ext');

и ещё обязательно ли формат ext или же можно в другой1 фомат в том числе и PAS
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.08.2005, 19:58   [включить плавающее окно]   #8
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
вот я тут пытался иным немного способом сделать (посовету) - хотя неочень выходит.

Посмотри прототип

скажи своё мнение насчёт идеи

а идея такая


Смотри где вводятся данные о годе:
"Writeln('Введите год');
Readln(st1);" Меняй на
st1 := '1995';

"вот тока сразу возникает вопрос каким оброзом" Открываешь свой файл в блокноте.... Так как в первой программе данные пишуться в файл с помощью оператора WriteLN, то следовательно поля записи разделяються между собой знаком переноса строки... Т.е. вот твой файл для N записей:
Фамилия1
Имя1
Отчество1
Автор1
Название1
Издательство1
Год1
Фамилия2
Имя2
Отчество2
...
ИздательствоN
ГодN
Значит в блокноте забиваешь Фамилию1, жмешь <Enter>, забиваешь Имя1 и т.д.


я уже вновом файле p1.pas писал и просто
0
и
фамилия0
и
sname0
и так до года прописывал но это ничего не меняет
оно не выводит что надо м.б ответ (решение) близко я м.б. чуть чуть строкой ошибся

глянь вложение
Вложения
Тип файла: zip rel12.zip (810 байт, 115 просмотров)
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 03.08.2005, 23:35   [включить плавающее окно]   #9
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
Решил ещё заданице паролельно решить - но....
Вот дано
Дан двумерный массив (матрица) А размерностью 180 на 180 элементов типа integer с произвольными значениями. Сформировать из него массив В(180,180), путем замены каждого пятого элемента матрицы суммой четырех предыдущих элементов. Вывести на экран 2 фрагмента размером 10 на 10 исходной и полученной матриц, а также элементы А(5,5) и В(5,5).

а вот прога которая не запускается - в чём дело где ошибка
Вложения
Тип файла: zip r15.zip (699 байт, 113 просмотров)
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 04.08.2005, 12:37   [включить плавающее окно]   #10
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
Выводит заголовок но не результат у меня уже крыша едет
Вложения
Тип файла: zip new.zip (834 байт, 96 просмотров)
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 04.08.2005, 21:36   [включить плавающее окно]   #11
KpeHgeJIb
Мужской Заслуженный
 
Аватар для KpeHgeJIb
 
Регистрация: 10.02.2003
Адрес: Израиль
И так разбор полетов
Код:
Program pr_12;
   uses crt;
   type person=record
   sname,name,otc,avtr,nb,pub,year:string[14];
   end;
   
   var  rbook:array[1..20] of person;
   f1,f2:text; i,n:integer;
   st1:string;
   s:string;

BEGIN 
  clrscr;  
  Assign(f1, 'E:\p1.pas');
  Reset(f1);
  Readln(f1,s); {Что и куда ты тут считываеш? Читай п. 1}
	         
  Assign(f2,'p2.pas');  
  rewrite(f2); 
  st1:='1995';
  Writeln('Ф И О Автар книги Название книги Издательство Год выпуска');
  Writeln(f2,'Ф И О Автар книги Название книги Издательство Год выпуска');
  for i:=1 to n do {Чему равно n ? читай п. 2}
  begin   
    With rbook[i] do    
      if year=st1 then       
      begin        
         Writeln(sname:10,name:10,otc:10,avtr:10,nb:10,pub:10,year:10);       
         Writeln(f2,sname:10,name:10,otc:10,avtr:10,nb:10,pub:10,year:10);     
      end; 
  end;
  close(f1);
  Close(f2);
  readln; 
END.
1. Ты внмательно читал то, что я писал выше? От того что ты считываеш одну строку из файла, да еще и в переменную s, твой масив rbook не заполняется а остается пустым. Ты когда с клавы вводиш, ты что читаеш только одну строку? Нет, ты читаеш все, и из фала нужно читать ВСЕ.
2. Этот цикл for не выполняется вообще, потому что ты не задаеш начальное значение переменной n. А это означает что ее значение не определено. Правда pascal изначально нулюет переменные главной программы, поэтому n=0. А цикл for от 1 до 0 выполнятся не будет.

И совет на будущее, начни табировать код, а то так как ты пишеш, без сдвигов, несколько команд в одну строчку, ничерта не понятно, кто под кем сидит.

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

PS будут вопросы по коду спрашивай.

KpeHgeJIb добавил :

Цитата (flashg) »
а вот прога которая не запускается - в чём дело где ошибка
Код:
type a=array[1..180,1..180] of integer;
     b=array[1..180,1..180] of integer;
Написав это ты обявляеш два типа данных, один под именем "a", а другой под именем "b".
Вышеописаный код не создает переменных данного типа, а лиш определяет тип.
если тебе надо объявить два двухмерных масива, то делается это так
Код:
var
  a,b:array[1..180, 1..180] of integer;
Вложения
Тип файла: zip vot.zip (1.7 Кб, 114 просмотров)
KpeHgeJIb вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 04.08.2005, 23:16   [включить плавающее окно]   #12
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
Спасибо.

А куда мне деватся - в смысле задаче по проще - это мои задания

Последний раз редактировалось flashg; 05.08.2005 в 21:07.
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 07.08.2005, 11:52   [включить плавающее окно]   #13
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
Вот ещё одно задание что надо решить нашёл примерное похожие задание для решения:

для задания
Для каждого слова заданного предложения указать долю согласных. Определить слово в котором доля согласных максимальна.

- только первую часть задания и оно высчитывает процент слов содержаших согласные только набранные латинскими а не русскими буквами что необходимо поменять чтобы понимало русский язык.
Вложения
Тип файла: zip dolsog.zip (631 байт, 101 просмотров)
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 07.08.2005, 23:39   [включить плавающее окно]   #14
KpeHgeJIb
Мужской Заслуженный
 
Аватар для KpeHgeJIb
 
Регистрация: 10.02.2003
Адрес: Израиль
flashg
Не ленись полистай учебник.
KpeHgeJIb вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 07.08.2005, 23:42   [включить плавающее окно]   #15
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
ещё бы знать какие уебники хорошие а какие не стоит читать
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 08.08.2005, 16:57   [включить плавающее окно]   #16
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
ну в смысле какие на товй взягляд книги лучше не брать в руки (сжигать) а какие медали достойны
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 08.08.2005, 20:18   [включить плавающее окно]   #17
KpeHgeJIb
Мужской Заслуженный
 
Аватар для KpeHgeJIb
 
Регистрация: 10.02.2003
Адрес: Израиль
Цитата (flashg) »
ну в смысле какие на товй взягляд книги лучше не брать в руки (сжигать) а какие медали достойны
Да я уже не помню, я последний раз книгу по паскалю, держал лет 6 назад. Я уже даже и не помню как она выглядела. Но поидее если вам задают такие задания, то все что нужно, должно быть в книге по которой вы занимаетесь.
В принципе тебе пойдет любая книга описывающая азы языка.
Да и писать всетаки по началу нужно задания попроще, что бы понять как это все выполняется.
KpeHgeJIb вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 08.08.2005, 21:10   [включить плавающее окно]   #18
Johnnie Walker
Опытный
 
Регистрация: 28.04.2004
Я программировать начал со старой советской книжки. Потом за все время прочитал только еще одну по Дельфи, которую подарили, очень качественная, хоть и старая. Все остально, что я видел - дрянь. Если есть желание программировать, то книжки не нужны.
Johnnie Walker вне форума  
Ответить с цитированием
Непрочитано 09.08.2005, 13:34   [включить плавающее окно]   #19
ender
Мужской Интересующийся
 
Аватар для ender
 
Регистрация: 01.07.2004
Лучшая книга, которую я читал по Паскалю, это:

Прайс Д. Программирование на языке Паскаль: Практическое руководство. Пер. с англ. - М.: Мир, 1987.- 232с.
ender вне форума  
Конфигурация ПК
Ответить с цитированием
Непрочитано 09.08.2005, 17:53   [включить плавающее окно]   #20
flashg
Мужской Продвинутый
Автор темы
 
Аватар для flashg
 
Регистрация: 18.01.2004
Адрес: Сургут
Цитата (Johnnie Walker) »
Я программировать начал со старой советской книжки. Потом за все время прочитал только еще одну по Дельфи, которую подарили, очень качественная, хоть и старая. Все остально, что я видел - дрянь. Если есть желание программировать, то книжки не нужны.

да и как мне без книг чему нибудь научится - я не говорю супер справочники на 500 страниц а типа паскаль в примерах итп

flashg добавил :

а реально книгу Прайс Д. Программирование на языке Паскаль: Практическое руководство. Пер. с англ. - М.: Мир, 1987.- 232с. в интернете найти в электроном варинте для скачки
flashg вне форума  
Конфигурация ПК
Ответить с цитированием
Ответ Создать новую тему

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 15:16. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 2000-2017 3DNews. All Rights Reserved.
Администрация 3DNews требует соблюдения на форуме правил и законов РФ
Серверы размещены в Hostkey