Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Алгоритм] Помогите пожалуйсто с заданиями по инфе


Автор: TruePozer 17.10.2008, 07:59
В общем училка дала задачки на программирование, я конечно хоть чуток программировать умею, но блин они сложны для моего низкого уровня(( Так что если не тяжело помогите плиз...

Примечание: Предпологается, что ввод данных в программы осуществляется из файла in.txt, а вывод в фаил out.txt. (Если сделать ввод с клавиатуры, а вывод на экран, училка бошку оторвёт, они типа хочет чтобы всё было как на олимпиаде).

Цитата
1) Напишите программу, которая по введёному целому числу, выводить разность между суммой его чётных цифр и суммой его нечётныз цифр.

2) Напишите программу, упорядочивыющую последовательность целых чисел в лексикографическом порядке по возрастанию. Лексикографическое упорядочивание состоит в том, что сначала числа упорядочиваются по самой старшей цифре, затем, если старшая цифра одинаковая, то по второй слева и т.д. Отсутствие цифры меньше любой цифры. На входе алгоритма первым указывается длинна последовательности, а затем сама последовательность. На выходе только упорядоченная последовательность. 

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

4)Напишите программу, определяющую для произвольного целого десятичного числа минимальное основание системы счисления, в котором данное число является двузначным.

5) Напишите программу, которая получает на входе две последовательности x[1]..x[n] и y[1]..y[k] целых чисел и выесняет, является ли вторая последовательность подпоследовательностью первой, т.е. можно ли из первой вычеркнуть некоторые числа члены так, что бы осталась вторая. На выходе должен быть ответ TRUE иди FALSE. 


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

Автор: Avaj 17.10.2008, 08:25
http://forum.vingrad.ru/forum/Vingrad-help-center.html

Автор: TruePozer 17.10.2008, 11:22
Ёмаё, я конечно извеняюсь если не туда написал, но блин очень нада решить задачи...

Автор: mr.Anderson 17.10.2008, 15:49
Язык не указан, форум - "Алгоритмы", так что пишу алгоритмы.

Задача первая.

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

Добавлено через 6 минут и 14 секунд
Задача третья.

Поскольку задан фиксированный размер матрицы (3х3), то достаточно просто проверить конкретные элементы на равенство. Элементы, которые нужно проверить, помечены буквами (одинаковые буквы - симметричные элементы):
Цитата

(0 x y)
(x 0 z)
(y z 0)

Симметрия получается для элементов x-x, y-y, z-z. То есть, если есть массив Matrix[3][3] (нумерация с нуля), то тебе нужно проверить следующие три условия:
Код

if (Matrix[1][0] == Matrix[0][1])
{
  ...
}
if (Matrix[2][0] == Matrix[0][2])
{
  ...
}
if (Matrix[2][1] == Matrix[1][2])
{
  ...
}

И вывести, какие из условий выполняются.

Добавлено через 8 минут и 20 секунд
Задача пятая.

Даны две последовательности, вторая из которых потенциально может входить в первую. Тогда делаем следующее. Пробегаемся по первой последовательности до тех пор, пока не встретим первый элемент второй последовательности. Как только встретили - смотрим, а не будет ли следующий элемент первой таким же, как следующий элемент второй. Если нет, снова пытаемся найти первый элемент, ну и так далее.

Автор: TruePozer 18.10.2008, 04:32
mr.Anderson, благодарю, с вашей помощью решить эти задачки не проблема. Ещё раз спасибо.
Эх, по развёрнутей бы((

А язык кстати, любой) Но лучше Делфи, Си, а то там училка та наша Хаскелл и J не знает...
mr.Anderson, я был бы ещё более признателен еси бы вы и с кодом мне помогли, если не сложно...

Автор: mr.Anderson 18.10.2008, 13:16
TruePozer, если не проблема, то попробуй все же сам. smile Я напишу тебе вторую из тех, что привел в алгоритмах.

Си:
Код

#include <stdio.h>

void main()
{
  int Matrix[3][3];
  for (int i = 0; i<3; i++)
    for (int j = 0; i<3; j++)
    {
      printf("Enter Matrix[%d][%d]", i, j);
      scanf("%d", &Matrix[i][j]);
    }

  if (Matrix[1][0] == Matrix[0][1]) 
    printf("Elements [1][0] and [0][1] are equal.");
  if (Matrix[2][0] == Matrix[0][2])
    printf("Elements [2][0] and [0][2] are equal.");
  if (Matrix[2][1] == Matrix[1][2])
    printf("Elements [2][1] and [1][2] are equal.");
}

Кажись, это все. Не проверял, надеюсь, не наврал.

Автор: TruePozer 18.10.2008, 13:33
Спасибо) Блин, 3ю задачу я сам сделал, на паскале:

Код

Var x, y, s : Integer;
      mass : array [1..3, 1..3] of Integer;
      i, o : TextFile;
    
Begin
AssignFile(i, 'In.txt');
Reset(i);

For x := 1 To 10 Do
  For y := 1 To 10 Do
    Read(i, mass[x,y]);

CloseFile(i);

if (mass[1][0] = mass[0][1]) then s:=s+1;

if (mass[2][0] = mass[0][2]) then s:=s+1;

if (mass[2][1] = mass[1][2]) then s:=s+1;


For x := 1 To 10 Do
  Begin
    For y := 1 To 10 Do
      Write(mass[x,y], ' ');
    Writeln;
  End;

AssignFile(o, 'Out.txt');
Reset(o);
writeln(s, 'Out.txt');
CloseFile(o);


Readln;
End.



Вроде правильно.

А вот вторую задачу ваще хз как сделать(((

А первую вроде так:

Код

var k,n,s1,s2:longint;
begin
assign(input,'in.txt');
assign(output,'out.txt');
reset(input);
rewrite(output);
s1:=0;
s2:=0;
readln(n);
while n>0 do begin
k:=n mod 10;
n:=n div 10;
if k mod 2 = 0 then inc(s1) else inc(s2);
end;
write(abs(s1-s2));
close(input);
close(output);
end.

Автор: TruePozer 19.10.2008, 06:02
Помогите пожалуйста с 4 и 5 заданием, а то уже завтра здавать, а я чёт не врюблюсь как их сделать!!! Особенно в 5ом как эти последовательности из файла в 2 массива вбить? 

Автор: mr.Anderson 19.10.2008, 12:03
TruePozer, причем тут файл в пятой задаче? В условии про файлы ничего не сказано. Я попробую сделать, получится - выложу.

Автор: mr.Anderson 19.10.2008, 12:30
Угумсь. Вот пятая задача. Паскаль.
Код

program Project1;

const
  N = 5;
  K = 3;

var
  X: Array [1..N] Of Integer;
  Y: Array [1..K] Of Integer;
  I: Integer;
  J: Integer;
  F: Boolean;

begin
  Write('Enter the first sequence (', N, '): ');
  for I := 1 to N do
    Read(X[I]);
  Write('Enter the second sequence (', K, '): ');
  for I := 1 to K do
    Read(Y[I]);

  for I := 1 to N-1 do //подпоследовательность - min. 2 элемента, поэтому до N не надо идти
  begin
    F := True;

    if (X[I] = Y[1]) then
    begin
      for J := 1 to K do //а вот в этом массиве идем до конца
        if (X[I+J-1] <> Y[J]) then
        begin
          F := False;
          break;
        end;

      if (F) then
      begin
        WriteLn('The first sequence contains the second sequence.');
        break;
      end;
    end;

    F := False;
  end;

  if (not F) then
    WriteLn('The first sequence does not contain the second sequence.');

  ReadLn;
end.

Автор: TruePozer 19.10.2008, 15:37
Код

Var
     b, n : Integer;
     i, o : TextFile;
begin
AssignFile(i, 'In.txt');
Reset(i);
Readln(i,n);

B:=0;
while B*B <= n do inc(B);

AssignFile(o, 'Out.txt');
rewrite(o);
writeln(o, b);
CloseFile(o);
end;


вот сделал 4ю, не знаю тока правильно нет)

Цитата

TruePozer, причем тут файл в пятой задаче? В условии про файлы ничего не сказано. Я попробую сделать, получится - выложу.


Дык вот же:
Цитата

Примечание: Предпологается, что ввод данных в программы осуществляется из файла in.txt, а вывод в фаил out.txt.


Как запонить эти 2 массива из файла? При этом длинна массива не задана, она может быть любой. 

Я все задания сделал, спасибо за помошь, осталось только это задание а как заполнить массивы из файла я не знаю(((

Автор: mr.Anderson 19.10.2008, 15:42
Ааа. Точн. Ну смотри. Допустим, файл такого содержания:
Цитата

5
1 2 3 4 5
3
2 3 4

Формат следующий. В первой строке - количество элементов в первом массиве, во второй - его элементы, в третьей - количество элементов второго массива, в четвертой - его элементы. Последовательно считываешь элементы из файла и все. Массивы для простоты лучше сделать статическими максимум, скажем, на 1000 элементов.

Автор: TruePozer 19.10.2008, 15:50
Цитата

Массивы для простоты лучше сделать статическими максимум, скажем, на 1000 элементов.


Дык раз 1 и 3 строка это длинны массивов на кой нам массив на 1000 элементов?

Иии... канечно спасибо за структуру фала, но как заполнить массивы из этого файла?

Автор: mr.Anderson 19.10.2008, 15:55
TruePozer, ну, если сильно хочется возиться с динамическими массивами, можно и так, конечно... Только вот зачем. Массив из 1000 элементов мы зададим, т.к. мы не знаем, сколько элементов окажется в файле. Поэтому дадим с запасом 1000 символов. Считывание из файла можно построить, например, так:
Код

var
  X: Array [1..1000] Of Integer;
  Y: Array [1..1000] Of Integer;
  F: TextFile;
  A: Integer;
  I: Integer;
begin
  AssignFile(F, 'in.txt');
  Reset(F);
  ReadLn(F, A);
  for I := 1 to A do
    Read(F, X[I]);
  ReadLn(F, A);
  for I := 1 to A do
    Read(F, Y[I]);
end.

Должно работать, я думаю...

ЗЫ Угу. Работает, проверил.

Теперь можно ввести доп.переменные (скажем, те же N и K), в них после строчек
Код

ReadLn(F, A);

Последовательно записать это А сначала в N, потом в K. А потом уже обработку массивов делать от 1 и до N-1 или K соответственно, как в моем вышенаписанном коде.

Понятно?

Автор: TruePozer 19.10.2008, 15:59
Спасссиииибоо! Большое! Хотел тебе плюсик поставить, а он пишет тока со 100 постов( Но ни чо, полюбому тебе +100500!

Автор: mr.Anderson 20.10.2008, 13:55
TruePozer, не за что. smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)