Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поправить исходники [Pascal]

13K
17 апреля 2007 года
*alt
36 / / 12.04.2007
Задача 1

Напишите процедуру sortmid, которая сортировала бы ряд из п строк в алфавитном порядке, основываясь
на к-ой литере каждой строки, к является параметром, передаваемым процедуре sortmid. Например, если к=3,
то элементы ряда должны быть отсортированы по возрастанию значения в третьей литере каждой строки.
Если длина строки меньше к, то будем предпологать, что его к-й литерой, реально не существующей, служит пробел.

Решение

Чево неправильно и как вывести ответ?
Код:
const n=3;
type arstr=array[1..n]of string;
var i,j,k: integer;
    mas: arstr;

procedure readmas (var mas:arstr);
  var i:integer;
  begin
    writeln('Введите строки:');
    for i:=1 to n do
      begin
        write('Строка №',i,': ');
        readln(mas);
      end;
  end;

procedure inputK (var k:integer);
  var kchar:char;
  begin
    writeln ('Введите литеру'); readln(kchar);
    k:=ord(kchar);
  end;

procedure sortmid(var mas:arstr;n,k:integer);
  var i,j:integer;
     h:string;
     ci,cj:char;
  begin
  for i:=1 to n-1 do
    for j:=i+1 to n do
      begin
        if length(mas)>=k then
          ci:=mas[i,k]
        else
          ci:=' ';
        if length(mas[j])>=k then
          cj:=mas[j,k]
        else
          cj:=' ';
        if ci>cj then
          begin
            h:=mas;
            mas:=mas[j];
            mas[j]:=h;
          end
      end;
  end;

begin {main}
  {обращение к русскому языку}
  setconsoleCp(1251);
  setconsoleOutputCp(1251);

  {ввод}
  readmas(mas);
  inputK (k);

  {обработка}
  sortmid(mas,n,k);

  {вывод}


  readln;
end.



Задача 2
Пусть дана вещественная матрица порядка п. Постройте последовательность веществ чисел а1,...,ап по правилу: если в i-й строке
матрицы элемент, принадлежащий главной диагонали, отрицателен, то элемент аi равен сумме положительных элементов i-й строки, в противном случае аi равен произведению отрицательных элементов i-й строки.

Решение
Привести в божеский вид (оптимизировать)
Код:
const n=2;
type matr=array [1..n,1..n] of real;
     mas= array [1..n] of real;
var i: integer;
    a: mas;    //искомая последовательность
    x: matr;  //матрица
procedure readmatr (var x:matr);  //процедура ввода матрицы
  var i,j:integer;
    begin
      writeln ('Введите матрицу положит и отриц чисел');
      for i:=1 to n do
        for j:=1 to n do
          read(x[i,j]);
      readln;
    end;

procedure build (x:matr;var a:mas); //процедура построения последовательноста
  var i,j,k:integer;
  begin
    for i:=1 to n do
      begin
        for j:=1 to n do
          begin
            if (i=j) and (x[i, j]<0) then  //для отриц чисел
              begin
                a:=0;
                for k:=1 to n do
                  if x[i, k]>0 then
                    a:=a+x[i, k];
              end;
            if (i=j) and (x[i,j]>0) then   //для положит чисел
              begin
                a:=1;
                for k:=1 to n do
                  if x[i, k]<0 then
                    a:=a*x[i, k];
              end;
          end;
      end;
  end;

begin {main}
  {обращение к русскому языку}
  setconsoleCp(1251);
  setconsoleOutputCp(1251);
  {ввод}
  readmatr(x);
  {обработка}
  build(x,a);
  {вывод}
  writeln;
  writeln ('Ответ:');
  for i:=1 to n do
    begin
      write('a[',i,']=');
      writeln (a:4:2);
    end;
  readln;
end.


Задача 3
Дан фрагмент:
 
Код:
type
 число = 1..31;
 месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);
 день_недели = (вс, пн, вт, ср, чт, пт, сб);
var
 d:число;
 m:мечяц;
 wd1, wd:день_недели;
 k:0..12;

Считая, что год високосный и его 1 января приходится на день недели wd1, определите:
wd - день недели, на который приходиться день с датой d, m.

Тут не совсем втыкнул, как сделать, если не трудно напишите.
Заранее благодарен!

___________________________________________________
Я академиев не кончал, но высшее образование вам даду!
622
17 апреля 2007 года
nilbog
507 / / 19.12.2006
зачем лишний цикл во второй задаче?
Код:
procedure build (var x:matr;var a:mas); //процедура построения последовательноста
  var i,j,k:integer;
  begin
    for i:=1 to n do
      begin
       if x[i,i]<0 then
       for k:=1 to n do
         if x[i, k]>0 then
                    a:=a+x[i, k]
                    else
            //для положит чисел
              begin
                a:=1;
                for k:=1 to n do
                  if x[i, k]<0 then
                    a:=a*x[i, k];
              end
      end
  end;

ps если что пардон - begin endы я не считал ))
28K
18 апреля 2007 года
malevi4
1 / / 18.04.2007
По первой задаче:
Ошибка в исходных данных. Процедура inputK возвращает в
параметре k неверное число. При вводе 3 она вернет код символа '3', т.е. 51. Лучше переписать ее так:

procedure inputK (var k:integer);
begin
writeln ('Введите номер литеры'); readln(k);
end;

Вывод результата:
procedure outputmas(var mas:arstr;n,k:integer);
var i:integer;
begin
writeln('Результат:') ;
for i:=1 to n do
writeln(mas);
writeln('Press enter to continue...');
readln;
end;
13K
18 апреля 2007 года
*alt
36 / / 12.04.2007
NilBog, Спасибо за цикл, но Думаю так будет лучше (пару бегинов забыл):
Код:
procedure build (var x:matr;var a:mas); //процедура построения последовательноста
  var i,j,k:integer;
  begin
    for i:=1 to n do
      begin
       if x[i,i]<0 then
        begin
          for k:=1 to n do
            if x[i, k]>0 then
              begin
                a:=0;
                a:=a+x[i, k]
              end;
        end
       else
        begin
          a:=1;
          for k:=1 to n do
            if x[i, k]<0 then
              a:=a*x[i, k];
        end
      end
  end;
13K
22 апреля 2007 года
*alt
36 / / 12.04.2007
Народ! как насчёт этой-то задачки? Хотябы наставьте на путь истинный))
Задача 3
Дан фрагмент:
 
Код:
type
 число = 1..31;
 месяц = (янв, фев, мар, апр, май, июн, июл, авг, сен, окт, ноя, дек);
 день_недели = (вс, пн, вт, ср, чт, пт, сб);
var
 d:число;
 m:мечяц;
 wd1, wd:день_недели;
 k:0..12;

Считая, что год високосный и его 1 января приходится на день недели wd1, определите:
wd - день недели, на который приходиться день с датой d, m.

______
В голове должны быть мышцы.
622
22 апреля 2007 года
nilbog
507 / / 19.12.2006
ну я бы попробовал что-то в таком ключе
считаем число дней сколько прошло с начала года (дату и сколько дней в каждом месяце мы знаем)
ну а потом можно взять это число по модулю 7 и сдвинуть на начальную дату (тоже mod 7)
это не алгоритм а набросок )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог