Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Информационные технологии
        Турбо Паскаль. Программирование на Pascal
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Информационные технологии" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]
Модераторы: paradise, KMA
  

kub


Новичок

ВОК КОЕ-ЧТО НАВОЯЛ. Может посмотрите, проверите.Мне кажется не совсем соответствует заданию.

program q;
type cat=record
    avtor:string[40];
    nazv:string[80];
    god:string[4];
    spec:string[40];
    end;
    var s1,s2:string;
        i,n:integer;
        f1,f2:text;
        d:array [1..100] of cat;
        begin writeln('vvedite n');
              readln(n);
              writeln('vvedite put k 1-my faily');
              readln(s1);
              assign(f1,s1);
              writeln('vvedite put k 2-my faily');
              readln(s2);
              assign(f2,s2);
              rewrite(f1);
              writeln('вводите авторов в алфавитном порядке');
              for I:=1 to n do
                 with d do
            begin writeln('vvesti avtora');
                  readln(avtor);
                  writeln(f1,avtor);
                  writeln('vvesti nazvanie');
                  readln(nazv);
                  writeln(f1,nazv);
                  writeln('vvesti god');
                  readln(god);
                  writeln(f1,god);
                  writeln('vvesti special');
                  readln(spec);
                  writeln(f1,spec);
                  end;
                  close(f1);
                  reset(f1);
                  rewrite(f2);
                  writeln('введите автора для поиска');
                  readln(s1);
                  while not(eof(f1)) do
                  for i:=1 to n do
                 begin readln(f1,s2);
                  if s1=s2 then writeln(f2,d.nazv);
                      end;
                         close(f1);
                          close(f2);
                              end.

Всего сообщений: 10 | Присоединился: апрель 2007 | Отправлено: 26 апр. 2007 23:07 | IP
ditar


Новичок

KMA, пмоги пожалуйста с задачей, что-то я совсем запутался.
Есть основная программа и два модуля mod_my и Obj_mod, когда не использую Obj_mod все работает нормально, стоит мне его подключить - основная программа обращается только к нему,   хотя ниде даже нет вызова его процедур, а первый модуль игнорирует.
вот основная программа, если нужны модули-выложу, не хотел места много занимать.

program kursovaya;
Uses winCRT,  mod_my, Obj_mod;
var c2:word;
begin
   repeat
   menu;
   readln(c2);
case c2 of
   1:Spisok_sotr;
   2:zapis(C);
   3:obrabotka_zaprosov;
   4:exit;
else neverno;
end;
until c2=4;
end.
все процедуры относятся к mod_my, а выполняется Obj_mod.

Всего сообщений: 6 | Присоединился: октябрь 2006 | Отправлено: 26 апр. 2007 23:37 | IP
KMA



Долгожитель

Код оформлен ужасно =( Постарайся писать более что-ли правильнее, я не наставиваю на больших отступах, но хотя бы чтобы begin а под ним соответствующий ему end.

Далее пиши [ i ] вот так, или {} скобках, т. к. здесь это читается, как ВВК Сode, и выделяет курсивом.
Год, кстати, можно занести и как целое число, а не как строка.

Еще вопрос тебе обязательно вводить в алфавитном порядке?


Ладно суть не в этом.  Во-первых не зачем работать с массивом, из 100 значений, ты не обижайся, но реально, такое количество памяти заест любого.

Создай переменную,
VAR buf: cat;
и производи все действия через нее, честное слово не убудет (вместо with d[ i ] do, ставишь with buf do ) Кстати записывать все же лучше одну переменную. С нее же потом и читать будешь.  Хотя дело твое, в общем меняю только последнее, запись всех произведений заданного автора.

У тебя ошибка в следующем, когда читаешь все из файла, и запускаешь цикл по i, и если находит нужную фамилию, то выводит i запись. Но ведь у тебя не i же автор??? У тебя на 1 запись попадает 4 строки в файле.

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

reset (f1);
reWrite (f2);
write ('Введите атора для поиска ->');
readLn (s1);
while not eof(f1) do
begin
  readLn (f1, s2)
  if s2=s1
     then
       begin
         readLn (f1, s2); {следующая после автора запись по списку это произведение, поэтому его-то и считываем, а затем записываем}
         writeLn (f2, s2)
       end
end;



(Сообщение отредактировал KMA 26 апр. 2007 23:48)

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 26 апр. 2007 23:45 | IP
KMA



Долгожитель

ditar, подключили вы его правильно =) Больше ничего сказать не могу.

Вы его компилировали? У вам был создан файл Obj_mod.tpu и cоответствует ли заголовок этому названию (obj_mod)? Да, и еще, пожалуйста, напишите что вам говорит компилятор?

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 26 апр. 2007 23:53 | IP
ditar


Новичок

KMA, все скомпилировано, названия файлов соответствуют, лежит в одной папке. Компилятор говорит ОК. По отдельности (Uses winCRT,  mod_my;) или (Uses winCRT,   Obj_mod;) выполняются и первый и второй модули, а в кучу слепить не могу. Мне еще интересно то, что я к этому Obj_mod в программе не обращаюсь, а он выполняется. А не мог я в модуле что-то такое сотворить, чтобы он "тянул на себя одеяло" ? Он раньше был автономной программой, а я из него модуль сделал....

Unit Obj_mod;
interface
uses wincrt;
Type Tsymb=object
      x,y:integer;
      c:char;
     constructor Init(ax,ay:integer; ac:char);
     Procedure Draw(ac:char);  virtual;
     Procedure Show;
     Procedure Hide;
     Procedure MoveTo(dx,dy:integer);
    end;
    implementation
Type Tstr=object(Tsymb)
      n:byte;
     constructor Init(ax,ay:integer; an:byte; ac:char);
     Procedure Draw(ac:char); virtual;
    end;

Constructor TSymb.Init;
begin
  x:=ax;
  y:=ay;
  c:=ac;
end;
Constructor TStr.Init;
begin
  inherited init(ax,ay,ac) ;
  n:=an;
end;

Procedure TSymb.Draw;
begin
  gotoxy(x,y);
  write(ac);
end;

Procedure Tstr.Draw;
var {i}:byte;
begin
  gotoxy(x,y);
  for {i}:=1 to n do
  write(ac);
end;
Procedure TSymb.Show;
begin
  Draw(c);
end;
Procedure TSymb.Hide;
begin
  Draw(' ');
end;
Procedure TSymb.MoveTo;
begin
  Hide;
  x:=x+dx;
  y:=y+dy;
  Show;
end;

Var p:Tstr;
      c:char;
Begin
  cursorto(0,0);
  writeln('Используйте стрелки Num pad для дви-жения строки.');
  writeln('Для выхода нажмите Esc...');
  p.Init(10,5,3,'%');
  p.Show;
  while true do
  begin
    c:=readkey;
    case c of
    #49:p.Moveto(-1,1);
    #50:p.Moveto(0,1);
    #51:p.Moveto(1,1);
    #52:p.Moveto(-1,0);
    #54:p.Moveto(1,0);
    #55:p.Moveto(-1,-1);
    #56:p.Moveto(0,-1);
    #57:p.Moveto(1,-1);
    #27:donewincrt;
    end;
  end;
readkey;
donewincrt;
End.

Всего сообщений: 6 | Присоединился: октябрь 2006 | Отправлено: 27 апр. 2007 0:07 | IP
KMA



Долгожитель

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

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

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 27 апр. 2007 0:17 | IP
KMA



Долгожитель

Почитал, свой пост и понял, что сказал не по русски.

В общем вот это

Begin
 cursorto(0,0);
 writeln('Используйте стрелки Num pad для дви-жения строки.');
 writeln('Для выхода нажмите Esc...');
 p.Init(10,5,3,'%');
 p.Show;
 while true do
 begin
   c:=readkey;
   case c of
   #49:p.Moveto(-1,1);
   #50:p.Moveto(0,1);
   #51:p.Moveto(1,1);
   #52:p.Moveto(-1,0);
   #54:p.Moveto(1,0);
   #55:p.Moveto(-1,-1);
   #56:p.Moveto(0,-1);
   #57:p.Moveto(1,-1);
   #27:donewincrt;
   end;
 end;
readkey;
donewincrt;
End.

У тебя выполняется при подключении модуля, это есть текст модуля, точнее команды, которые должны выполниться, при компиляции программы. Их бы следовало избегать.

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 27 апр. 2007 0:22 | IP
anuta



Новичок

Пожалуйсто помогите написать программу сумму от 0 до 100 с операторами цикла while,repeat,for,естественно на паскале,очень прошу....

Всего сообщений: 7 | Присоединился: апрель 2007 | Отправлено: 29 апр. 2007 14:35 | IP
Siriusss



Новичок

Пожалуйста, помогите, забылось все...
прога по Паскалю.
Сформировать двумерный массив B размером 2 x 4 с помощью генератора случайных чисел и вывести элементы массива на экран и в файл - это сделано. Вычислить и вывести на экран и в файл строку матрицы B, содержащую максимальное количество отрицательных элементов (оформить вычисление количества отрицательных элементов в виде функции).

Сделано только это:

uses crt;
type mas=array[1..2,1..4] of integer;
   var B:mas;D:mas;
   i,j,k:integer;
Function Otr(D:mas):integer;
  begin
     k:=0;
        for i:=1 to 2 do
        for j:=1 to 4 do begin
        if D[i,j]<0 then
        k:=k+1;
        otr:=k;
       end;
    end;
begin
  clrscr;
  Randomize;
  writeln('Dannyi massiv');
  for i:=1 to 2 do
  for j:=1 to 4 do B[i,j]:=random(1001)-500;
     for i:=1 to 2 do
        begin
         for j:=1 to 4 do write(B[i,j]:5);
         writeln;
        end;
       writeln('Kolichestvo otricatelnyh elementov matricy=',Otr(B));
       readln;
end.

Всего сообщений: 28 | Присоединился: апрель 2007 | Отправлено: 29 апр. 2007 17:10 | IP
KMA



Долгожитель


Сформировать двумерный массив B размером 2 x 4 с помощью генератора случайных чисел и вывести элементы массива на экран и в файл - это сделано. Вычислить и вывести на экран и в файл строку матрицы B, содержащую максимальное количество отрицательных элементов (оформить вычисление количества отрицательных элементов в виде функции).


Воо, молодец.

Функция, которая определяет количество отрицательных элементов в строке будет выглядить так:

function otrInRow (m: mas; i: byte): byte;
Var j, k: byte;
Begin
     k:=0;
     for j:=1 to 4 do
       if m[i, j]<0 then inc (k);
     otrInRow:=k
End;
здесь i это номер строки.

В основной программе, это будет выглядеть так.
(nRow строки, в которой максимальное значение отрицательных элементов)

nOtr:=0;
for i:=1 to 2 do
begin
  nNow:=otrInRow (B, i); {текущее знач. отриц. элементов}
  if nNow>nOtr  {ищем отриц. максим. количество отриц. элем.}
     then
       begin
         nOtr:=nNow;
         nRow:=i;
       end;
end;

{Выведем строки с наибольшим количеством отриц. элементов}

for j:=1 to 4 do
write (B[nRow, j], ' ');

Вот и вся задача =)

Всего сообщений: 940 | Присоединился: декабрь 2005 | Отправлено: 29 апр. 2007 23:10 | IP

Эта тема закрыта, новые ответы не принимаются

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 ]

Форум работает на скрипте © Ikonboard.com