Автор Тема: Помощь в решении простых задач на Pascal'е  (Прочитано 7867 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Сформировать файл «temp_d.dat» из положительных чисел, хранящихся в файле «temp.dat». Файл «temp.dat» уже содержит несколько чисел (+ и -).

Цитировать
program lab1;
procedure temp_p (var T,S : real);
var temp2 : file of real;
begin
assign (temp2,'c:\temp_p.dat');
rewrite (temp2);
write(T);
close(temp2);
end;
var temp : file of real; T,S : real; n : integer;
begin
assign (temp,'c:\temp.txt');
reset(temp);
while not eof(temp) do
begin
read(temp,T);
if T>0 then temp_p
end;
close(temp);
end.

Суть в том что надо заставить при выполнении условия заносить положительные числа через подпрограмму в нужный файл. Не могу понять как сделать подпрограмму. Буду рад помощи :)
Сноси Винду — переходи на Линукс :-)

Оффлайн Selyd

  • Старожил
  • ****
  • Сообщений: 408
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #1 : 24 Июня 2011, 15:02:37 »
Мне кажется, что нужна такая последовательность.
1. program lab1;
2. procedure temp_p (var T,S : real);
var temp2 : file of real;
begin
здесь только запись выбраного числа
end;
3. var temp : file of real; T,S : real; n : integer;
Описать «temp_d.dat»
Открыть «temp.dat»
Читать из «temp.dat»
проверять конец «temp.dat» while not eof(temp)
записывать в «temp_d.dat»
if T>0 then temp_p (обращение для записи)
4. close(temp_d);
close(temp);

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #2 : 24 Июня 2011, 15:20:05 »
Неее чет не хочет... Видимо нельзя так процедуру вызывать, ругается:

Цитировать
if T>0 then temp_p


Я уже по-всякому пробовал, и все-таки бросил эту затею с подпрограммой, сделал без неё :)
Спасибо за вариант  ;)
Сноси Винду — переходи на Линукс :-)

Оффлайн Selyd

  • Старожил
  • ****
  • Сообщений: 408
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #3 : 24 Июня 2011, 15:33:27 »
В процедуре многократно описание assign.
Так не пойдёт.
Описали процедуру.
Один раз описываем файл в теле программы.
Что-то туда пихаем (в теле процедуры) и закрываем (в теле программы).

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #4 : 24 Июня 2011, 16:25:57 »
Честно говоря, мне вообще не понятна сама структура подпрограммы, как её описать... не я канеш читал в инете, но так и не понял как надо... Раньше знал немного, а сейчас совсем не помню :(

Помогите ещё с одной простенькой прогой:

Цитировать
1.   На складе храниться следующая информация о товаре:
a)   Наименование товара
b)   Категория товара (продукты, бакалея, канцелярия и т.д.)
c)   Цена
d)   Дата изготовления товара (TdateTime)
e)   Срок хранения (дней)
Внести в файл 5 записей.
Написать программу поиска:
a)   всех товаров  заданной категории
b)   всех просроченных товаров.
Использовать следующий алгоритм поиска:
1)   Выдать на экран сообщение:
      1 - добавить запись
      2 - просмотр склада
      3 – поиск просроченных товаров.
      4 - выход из программы
      Ваш выбор? -
2)   Обработать выбор с помощью подпрограммы, и если номер выбранного пункта равен 4, то закончить работу с программой.

P.S. Чуть позже приложу свой листинг.
Сноси Винду — переходи на Линукс :-)

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #5 : 24 Июня 2011, 16:46:58 »
program lab1;
type infa=record;
     naimenovanie : string;
     kategoria : string;
     cena : string;
     data : string;
     srok : string;
end;
var sklad : array [1..5] of infa;
i : integer;
begin
     for i:=1 to 5 do
     begin
         writeln ('vvod  ',i,'-oi zapisi');
         writeln ('vvedite naimenovanie');
         readln (sklad[i].naimenovanie);
         writeln ('vvedite kategoriyu');
         readln (sklad[i].kategoria);
         writeln ('vvedite cenu');
         readln (sklad[i].cena);
         writeln ('vvedite datu');
         readln (sklad[i].data);
         writeln ('vvedite srok godnosti');
         readln (sklad[i].srok);
     end;
     for i:=1 to 5
         if

Помогите пожалуйста с подпрограммой...
« Последнее редактирование: 24 Июня 2011, 16:57:08 от berkut_174 »
Сноси Винду — переходи на Линукс :-)

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #6 : 24 Июня 2011, 18:30:49 »
program lab1;
type infa=record;
     naimenovanie : string;
     kategoria : string;
     cena : string;
     data : string;
     srok : string;
end;
procedure add
var k : integer;
begin
     writeln ('skolko zapisei add?');
     readln (k);
     for i:=1 to k do
     begin
         writeln ('vvod  ',i,'-oi zapisi');
         writeln ('vvedite naimenovanie');
         readln (sklad[i].naimenovanie);
         writeln ('vvedite kategoriyu');
         readln (sklad[i].kategoria);
         writeln ('vvedite cenu');
         readln (sklad[i].cena);
         writeln ('vvedite datu');
         readln (sklad[i].data);
         writeln ('vvedite srok godnosti');
         readln (sklad[i].srok);
     end;
end;
procedure view
var
begin
end;
procedure search
var
begin
end;
procedure exit
var
begin
exit
end;
var sklad : array [1..100] of infa;
i,v : integer;
begin
     writeln ('vvedite: 1 - add, 2 - view, 3 - search, 4 - exit');
     readln (v);
     if v=1 then add         //вызывать процедуру add
     if v=2 then view        //вызывать процедуру view
     if v=3 then search     //вызывать процедуру search
     if v=4 then exit         //вызывать процедуру exit
{

Вот так вроде правильней, только нужно грамотно подпрограммы сделать, помогите  :(
Сноси Винду — переходи на Линукс :-)

Оффлайн Selyd

  • Старожил
  • ****
  • Сообщений: 408
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #7 : 24 Июня 2011, 19:16:27 »
program lab1;
type infa=record;
     naimenovanie : string;
     kategoria : string;
     cena : string;
     data : string;
     srok : string;
end;
procedure add
var k : integer;
begin
     writeln ('skolko zapisei add?');
     readln (k);
     for i:=1 to k do
     begin
         writeln ('vvod  ',i,'-oi zapisi');
         writeln ('vvedite naimenovanie');
         readln (sklad.naimenovanie);
         writeln ('vvedite kategoriyu');
         readln (sklad.kategoria);
         writeln ('vvedite cenu');
         readln (sklad.cena);
         writeln ('vvedite datu');
         readln (sklad.data);
         writeln ('vvedite srok godnosti');
         readln (sklad.srok);
     end;
m=m+k;  текущее количество
end;
procedure view
var
begin
цикл по m
goto ent;
end;
procedure search
var
begin
цикл по m
goto ent;
end;

var sklad : array [1..100] of infa;
i,v,m : integer;  глобальные переменные
Здесь вставить 5 штук стартовых
m=5  стартовое количество

ent:   вход для повторов из процедер
begin
     writeln ('vvedite: 1 - add, 2 - view, 3 - search, 4 - exit');
     readln (v);
     if v=1 then add         //вызывать процедуру add
     if v=2 then view        //вызывать процедуру view
     if v=3 then search     //вызывать процедуру search
     if v=4 then goto exit         //выйти по 4
end;
exit:
end;
Вот так структуру слепили. Теперь мясо добавить.
Можна без мяса прокачать работу вставив временно в процедуры
печать пребывания ЗДЕСЬ БЫЛ ВАСЯ.
таким образом прокачаешь каркас.
Дерзай!

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #8 : 24 Июня 2011, 20:13:20 »
Переделал так:

program lab1;

type infa=record
     naimenovanie : string;
     kategoria : string;
     cena : string;
     data : string;
     srok : string;
end;
var i,v : integer; var sklad : file of infa;

procedure add;
var k : integer; var a : infa;
begin
     writeln ('skolko zapisei add?');
     readln (k);
     rewrite (sklad);
     for i:=1 to k do
     begin
         writeln ('vvod  ',i,'-oi zapisi');
         writeln ('vvedite naimenovanie');
         readln (a.naimenovanie); write (sklad,a);
         writeln ('vvedite kategoriyu');
         readln (a.kategoria); write (sklad,a);
         writeln ('vvedite cenu');
         readln (a.cena); write (sklad,a);
         writeln ('vvedite datu');
         readln (a.data); write (sklad,a);
         writeln ('vvedite srok godnosti');
         readln (a.srok); write (sklad,a);
     end;
     close (sklad);
end;

procedure view;
begin
writeln('dva');
end;

procedure search;
begin
writeln('tri');
end;

begin
     assign (sklad,'c:\temp.txt');
     writeln ('vvedite: 1 - add, 2 - view, 3 - search, 4 - exit');
     readln (v);
     if v=1 then add;
     if v=2 then view;
     if v=3 then search;
     if v=4 then exit;
     readln;
exit;
end.

Сама структура работает.
Вроде работает процедура add (правда не знаю что уж она там заносит в файл temp.txt, но после её работы файл занимает 6.25 кбайт). Осталось теперь сделать остальные процедуры.
P.S. Кстати, задача по теме «Записи»!
« Последнее редактирование: 24 Июня 2011, 20:47:38 от berkut_174 »
Сноси Винду — переходи на Линукс :-)

Оффлайн Selyd

  • Старожил
  • ****
  • Сообщений: 408
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #9 : 25 Июня 2011, 18:10:41 »
Прочитай его с F3, F4

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #10 : 25 Июня 2011, 20:37:34 »
Оказалось что задачи не эти нужно было делать :) Спасибо за помощь :)
Помогите вот эту решить:

  • Дан массив целых чисел. Записать его задом наперед.

Много сам сделал, а вот эту не могу осилить, хоть она и очень простая :)
Не могу сообразить как заставить массив выводиться задом наперед :)
Может у кого есть каие-н. мысли?
Сноси Винду — переходи на Линукс :-)

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #11 : 26 Июня 2011, 09:41:50 »
  • Дан массив целых чисел. Записать его задом наперед.

Решил :)

for i:=1 to n do
write (A[n-i+1],' ');
readln;
Сноси Винду — переходи на Линукс :-)

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #12 : 26 Июня 2011, 11:04:21 »
Вот эту не могу решить:

  • Дана строка символов. Дано слово. Удалить из строки это слово.

Буду рад помощи :)
Сноси Винду — переходи на Линукс :-)

Оффлайн Selyd

  • Старожил
  • ****
  • Сообщений: 408
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #13 : 26 Июня 2011, 11:56:29 »
Или так
for i:=n to 1 step -1 do
write (A,' ');
readln;

1. Определяем длину строки (ns) и слова (nw). Если длина слова больше, чем длина строки - проверять нечего.
    Если равны, проверяем на совпадение.
2. Если строка длинее - алгоритм.
    Цикл от i=1 до nw-ns+1 
    Вырезать кусок длиной nw с i-го места, сравнить со словом.
    Если не совпадает, продолжить дальше.
    Если совпадает, со строки вырезываем кусок длиной nw с i-го места
    и выбрасываем. Потом отрезаем хвост с места i+nw до конца
    и приклеиваем с i-го места. Печатаем урезаное.
3. Если цикл закончился без находки, что-то там печатаем.
Схематично так.
Нужны операторы - определения длины строки символов,
                            вырезывания группы символов с указанного места.

   

Оффлайн berkut_174

  • Постоялец
  • ***
  • Сообщений: 135
    • Просмотр профиля
Re: Помощь в решении простых задач на Pascal'е
« Ответ #14 : 26 Июня 2011, 13:10:32 »
program lab1;
var
s,slovo : string;
i,a : integer;
begin
write ('vvedite stroky: ');
readln (s);
write ('vvedite slovo: ');
readln (slovo);
for i:=1 to length(slovo) do
begin
a:=a+1;
end;

???

writeln ('stroka imeet vid: ',s);
readln;
end.

Не могу и все... Покажите хоть часть кодом, а не словами. Я то сам немного представляю как сделать, а реализовать это в программе не получается... :(
Сноси Винду — переходи на Линукс :-)

 

Visual Basic. Нужна помощь в курсовой работы по информатике

Автор Borserg

Ответов: 6
Просмотров: 7717
Последний ответ 01 Апреля 2010, 22:25:19
от Borserg
Maple помощь с непростой функцией в частном виде

Автор Tilesto

Ответов: 0
Просмотров: 8712
Последний ответ 14 Мая 2015, 14:41:43
от Tilesto
нужна помощь прямо сейчас )

Автор lu

Ответов: 1
Просмотров: 6864
Последний ответ 06 Июня 2009, 14:24:44
от Asix
Очень нужна помощь в ПАСКАЛЕ

Автор tiffany

Ответов: 4
Просмотров: 5638
Последний ответ 31 Августа 2010, 20:36:36
от Asix
Помощь с учебной литературой

Автор PandaPivovar

Ответов: 3
Просмотров: 5465
Последний ответ 25 Ноября 2009, 00:34:11
от PandaPivovar