Программирование циклов в Паскале

Типовые задачи на отработку техники программирования циклов

Задача №3.Задан массив длины N<=50.Палиндром ли он?

  1. Program A3;
  2. const n=50;
  3. var a:array[1..n] of integer;
  4.      i:integer;
  5.      f:byte;
  6. Begin
  7.      for i:=1 to n do read(a[i]);
  8.      f:=0;
  9.      for i:=1 to (n div 2) do
  10.      if a[i]<>a[n-i+1] then begin
  11.      writeln('Не палиндром');
  12.      f:=1;
  13.      end;
  14.      if f=0 then
  15.      writeln('Палиндром');
  16. end;

2 решения Татьяны

Программы верны, но оценка не высока - не использован режим вставки кода, текст неструктурирован и не документирован.

задача 1 из домашней работы

задача 1 из домашней работы найти sin x

  1. var
  2. i,j,q,e:integer;
  3. x,f,kv,n,eps,si:real;
  4. begin
  5. readln(x,eps);
  6. si:=x; q:=-1;e:=3;
  7. n:=x;
  8. while eps<abs(n) do begin
  9.   f:=1;
  10.   kv:=1;
  11.  
  12.   for j:=1 to e do begin
  13.    f:=f*j;
  14.    kv:=kv*x;
  15.   end;
  16.   e:=e+2;
  17.   n:=(kv/f)*q;
  18.   q:=q*(-1);
  19.   si:=si+n;
  20. end;
  21. write(si);
  22. end.

Душистов Д.

Задача 5 - решение повторяет Нозадзе Р.(Втр, 25/10/2011 - 23:02 — Нозадзе Роман). Задача 6 принимается с уже сделанными ранее замечаниями по документации.

На мой взглят масив тут не

На мой взглят масив тут не нужен, сразу при вводе нужно и вычислять!!!

Валерий Шахамболетович

Я Вам там днём всё домашнее задание на почту отправлял, может Вы посмотрите?)

Нурали ...

По первой задаче:
1)Непонятен выбор нижней границы параметра цикла
2)Использование while-оператора избавило бы от break
В целом, логика верна.

По второй задаче:
Несколько странное(например, по использованию sim), но в целом верное решение. В роли флажка (двоичного признака) обычно используется булева переменная (см. например, решение Студенцова Д.)

Оба решения плохо оформлены (см. комменты к решениям Тани Рызенко)

Смольняков А.

Пнд, 31/10/2011 - 21:32 — Смольняков Александр - О ЧЁМ ВЫ, АЛЕКСАНДР? ДЕЛАЙТЕ ТОЧНЫЕ ССЫЛКИ!

Дом. Задача4- Дима

Логика понятна, но прокол на последовательности одинаковых цифр - она должна отвергаться!

Ислам ...

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

Дом.№1 Саша С.

Верно, Саша, но можно эффективней (ведь при вычислении экспоненты мы не считали степени и факториалы "в лоб"!). Вывод требует форматирования.

К комментам по Татьяне...

Правы и Ислам (см.условие задачи) и Александр (действительно, по сути массив не нужен). Я посчитал, что задача решена, хотя и с некоторым отклонением от условия.

Taтьяна - 0 ...

Taтьяна - 0, плюс потеря кредита доверия ...

Валерий Шахамболетович...

Хорошо я ещё подумаю над палиндромом=)

Немного не по теме, но...

Немного не по теме, но... Господа позвольте поздравить вас с праздником, сегодня предпоследний двоичный день в этом столетии 01.11.11 ;)
11.11.11 будет последний=)

Задача №5.Домашнее задание.

Задан массив,n<=50.Найти среднее значение всех элементов массива и максимальное отклонение от среднего.

  1. Program A5;
  2. const n=50;
  3. var a:array[1..n] of integer;
  4.     sum,sr,maxotkl:real;
  5.     i:integer;
  6. Begin
  7.     for i:=1 to n do read(a[i]);
  8.     sum:=0;
  9.     for i:=1 to n do begin
  10.     sum:=sum+a[i];
  11.     sr:=sum/n;
  12.     end;
  13.     maxotkl:=abs(sr-a[1]);
  14.     for i:=2 to n do
  15.     if maxotkl<abs(sr-a[i]) then
  16.     maxotkl:=abs(sr-a[i]);
  17.     writeln('Максимальное отклонение от среднего:', maxotkl);
  18. end.

Ислам, Оксана ...

Ислам.
Оператор в строке 11 не должен быть в цикле. Решение верное.

Оксана.
Задача 2 - очередной повтор уже приведённого выше решения. Решения остальных задач удалены, т.к. не поддаются критике - грубейшие ошибки уже на уровне синтаксиса. Я уже Вам писал, Оксана (Ср, 26/10/2011 - 22:40 — VTlyusten):

Мне жаль, Оксана, но совсем не то ...
Ошибки уже на уровне синтаксиса. Я бы очень советовал перед публикацией проверять свой код на компьютере. Удачи!

Увы, наверное слишком деликатно писал, ибо Вы не вняли. Настойчиво повторяю:
НЕ ПУБЛИКУЙТЕ НЕ ПРОВЕРЕННЫХ НА КОМПЬЮТЕРЕ РЕШЕНИЙ!!!

Валерий Шахамбулетович,я

Валерий Шахамбулетович,я проверяла,ошибок не выдавал.

Форумчане... мне вот на глаза

Форумчане... мне вот на глаза попалась интересная задачка с массивом, завис с ее решением.
Составить программу нахождения чаще всего встречающегося элемента в массиве С(М,М);
Буду благодарен тем, кто поможет ;)

Ну вот

Простенький пример, он конечно не идеален, ну что б и ты мог подумать и дополнить.

  1. var
  2. mas:array [1..100] of integer;
  3. n,prov,prov1,i,j,s:integer;
  4. begin
  5. readln(n);
  6. for i:=1 to n do read(mas[i]);
  7. prov:=1;
  8. prov1:=0;
  9. for i:=1 to n-1 do begin
  10.  
  11.  for j:=i+1 to n do begin
  12.    if mas[i]=mas[j] then  inc(prov);
  13.    if prov> prov1 then begin
  14.      prov1:=prov;
  15.      s:=mas[i];
  16.    end;
  17.  end;
  18.  prov:=1;
  19. end;
  20. write(s,'  ',prov1);
  21. end.  

Если есть вопросы пиши в ICQ 421935199

Домашнее задание от 31.10.2011

Так как домашнее задание от 31.10.2011 уже закрыто, я решил разместить в теме свои решения. На этот раз я попытался исправить свою ошибку, связанную с недокументированностью, поэтому снабдил код достаточным количеством комментариев.
Задача №1. Вычислить sin(x) с точностью eps по формуле sin(x) = x - x^3/3! + x^5/5! - ...

  1. program SinX;
  2.  
  3. var
  4.   x, y, a, eps: real;
  5.   i: word;
  6.   z: shortint;
  7.  
  8. begin
  9.   read(x, eps); // считываем значение x в радианах и требуемую погрешность eps
  10.   y := 0;
  11.   a := x; // первый член обрабатываем отдельно
  12.   z := -1; // определяем знак второго члена
  13.   i := 2; // и факториал в его знаменате
  14.   repeat
  15.     y := y + a; // прибавляем предыдущий член к сумме
  16.     a := a * z * x * x / (i * (i + 1));  // данный получаем, домножая числитель предыдущего на x*x и знаменатель на i*(i+1)
  17.     z := z * -1; // меняем знак следующего члена
  18.     inc(i, 2) // увеличиваем значение i для домножения факториала в знаменателе следующего члена
  19.   until(abs (a) < eps); // условие выхода из цикла: модуль очередного члена меньше eps
  20.   writeln(y:4:2) // форматированный вывод
  21. end.

Задача №2. Найти НОК(m,n)
  1. program LCM;
  2.  
  3. var
  4.   r, m, n: word;
  5.  
  6. begin
  7.   read(m, n);
  8.   r := m * n; // произведение чисел m и n
  9.   while m <> n do begin // ищем НОД(m,n)
  10.     if m > n then m := m - n
  11.     else n := n - m
  12.   end;
  13.   writeln(r div m) // НОК(m,n) = m * n / НОД(m,n)
  14. end.

Задача №3. Задан массив знаков длины N <= 50. Проверить, является ли он палиндромом
  1. program CharPalindrome;
  2.  
  3. var
  4.   A: array[1..50] of char;
  5.   z, n, i: byte;
  6.   flag: boolean;
  7.  
  8. begin
  9.   readln(n); // считываем длину массива
  10.   z := n; // запоминаем правую границу массива для движения справа налево
  11.   flag := true; // считаем, что массив - палиндром
  12.   for i := 1 to n do read(A[i]); // считываем элементы массива
  13.   for i := 1 to n div 2 do begin // выполняем n div 2 операций сравнения
  14.     if A[i] <> A[z] then begin // если i-тый слева элемент меньше i-того справа
  15.       flag := false; // массив - не палиндром
  16.       break // выходим из цикла, так как дальше сравнивать бессмысленно
  17.     end;
  18.     dec(z) // двигаемся справа налево
  19.   end;
  20.   if flag = true then writeln('YES') else writeln('NO') // если условие в цикле ни разу не выполнилось, массив - палиндром
  21. end.

Задача №4. Задан массив вещественных значений длины N <= 50. Найти его среднее значение и максимальное отклонение от среднего
  1. program MedianAndMaxDev;
  2.  
  3. var
  4.   A: array[1..50] of integer;
  5.   absmax, sum: real;
  6.   i, n: byte;
  7.  
  8. begin
  9.   read(n);
  10.   absmax := 0; // считаем, что самый большой модуль массива равен 0
  11.   sum := 0; // и сумма членов равна 0
  12.   for i := 1 to n do read(A[i]);
  13.   for i := 1 to n do begin
  14.     sum := sum + A[i]; // прибавляем к сумме очередной элемент
  15.     if abs(A[i]) > absmax then absmax := abs(A[i]) // если он больше записанного максимума - запоминаем его модуль
  16.   end;
  17.   sum := sum / n; // вычисляем среднее значение в массиве
  18.   writeln(sum:4:2, ' ', (absmax - abs(sum)):4:2) // выводим сумму и максимальное отклонение
  19. end.

Задача №5. Задан массив. Найти его минимальный и максимальный элемент
  1. program MinAndMax;
  2.  
  3. var
  4.   A: array[1..50] of integer;
  5.   min, max: integer;
  6.   i, n: byte;
  7.  
  8. begin
  9.   read(n);
  10.   for i := 1 to n do read(A[i]);
  11.   min := A[1]; // считаем первый элемент минимальным
  12.   max := A[1]; // и максимальным одновременно
  13.   for i := 1 to n do begin
  14.     if A[i] > max then max := A[i] // если очередной элемент больше записанного максимума, запоминаем его
  15.     else if A[i] < min then min := A[i] // если нет, и если он меньше минимального (отсекаем равенство), запоминаем его
  16.   end;
  17.   writeln(min, ' ', max) // вывод найденных значений
  18. end.

Решения Данила

Задача1.
Знакочередование проще обеспечить так: a:=-a*sqr(x)/(i*(i+1)).
Кстати, ещё эффективней вычислить неизменный квадрат только раз, до цикла: sqrX:= sqr(x); А в цикле: a:=-a*sqrX/(i*(i+1)).

Задача3.
1. z и, соответственно, Dec(z) лишние. Можно так: A[i] <> A[n-i+1]
2. If flag=true then ... эквивалентно более простому if flag then ...

Задача4.
Неверно. Сначала ищем среднее, а затем оцениваем отклонение каждого элемента от этого среднего.

Валерий Шахамболетович!

Валерий Шахамболетович! Спасибо Вам за комментарии к моим решениям и всевозможную помощь в улучшении этих решений! Благодаря Вашему вниманию и Вашим усилиям я могу намного быстрее совершенствовать свои знания, чем при самостоятельной работе. Я понял все свои ошибки и недочеты и постараюсь избавиться от них в дальнейшей практике.

Домашнее задание от 24.10.2011 и 3.11.2011

Сейчас мне хотелось бы выборочно рассмотреть несколько задач из домашних заданий от 24.10.2011 и 3.11.2011. Так как часть задач из этих д/з были достаточно простыми и не вызвали у меня вопросов, то я остановлюсь преимущественно на трех задачах, в решении которых у меня есть сомнения с точки зрения поиска наиболее эффективного и оптимизированного решения. Точнее:

Домашнее задание от 24.10.2011
Задача №3. Дана входная последовательность натуральных чисел, завершающаяся нулем. Определить, начинается ли каждый из ее членов (начиная со 2-го) с десятичной цифры, которой завершается предыдущий.

  1. program LastAndFirst;
  2.  
  3. var
  4.   x, old, new: word;
  5.   flag: boolean;
  6.  
  7. begin
  8.   read(new);
  9.   flag := true; // по умолчанию считаем, что вводимая последовательность будет искомой
  10.   while flag and (new <> 0) do begin // основной цикл продолжается до ввода 0 и пока проверяемое условие не будет нарушено
  11.     old := new; // сдвиг вводимой последовательности влево
  12.     read(new); // считываем очередной член
  13.     x := new; // и копируем его во временную переменную
  14.     while x > 9 do x := x div 10; // получаем первую цифру слева члена new
  15.     if (new <> 0) and (old mod 10 <> x) then flag := false // если последняя цифра предыдущего члена не равна первой цифре следующего, то условие нарушено (при этом в дополнительном условии мы отсекаем последний 0)
  16.   end;
  17.   if flag then write('YES') else write('NO') // вывод положительного ответа, если условие выполнилось для всех членов последовательности
  18. end.

Задача №4. Начальное условие то же. Определить, образует ли последовательность "пилу" ("больше", "меньше", "больше", ..., и т. д. или "меньше", "больше", "меньше", ..., и т. д.)
  1. program Saw;
  2.  
  3. var
  4.   old, new: integer;
  5.   i: word;
  6.   flag: boolean;
  7.  
  8. begin
  9.   i := 0;
  10.   flag := true; // сначала считаем, что последовательность - пила
  11.   read(old, new); // ввод первых двух членов последовательности
  12.   if old > new then begin // меняем знаки членов, чтобы потом использовать один и тот же оператор сравнения
  13.     old := -old;
  14.     new := -new;
  15.     inc(i) // счетчик сравнений увеличивается на единицу
  16.   end;
  17.   while flag and (new <> 0) do begin // пока условие не нарушено и не введен 0
  18.     if old >= new then flag := false; // если предыдущий член больше или равен следующему - условие нарушено
  19.     old := -new; // сдвиг последовательности влево с переменой знака
  20.     read(new); // считываем очередной член
  21.     if (i mod 2) = 0 then new := -new; // если сравнение четно, меняем знак введенного члена
  22.     inc(i) // увеличиваем счетчик сравнений
  23.   end;
  24.   if flag then write('YES') else write('NO') // вывод положительного ответа, если условие выполнено для всех членов
  25. end.

Домашнее задание от 03.11.2011
Задача №2. Дан массив из N элементов. Вывести те из них, которые меньше суммы соседних элементов.

  1. program LessThanNeighbors;
  2.  
  3. const
  4.   Lim = 100;
  5.  
  6. var
  7.   A: array[1..Lim] of integer;
  8.   i, n: word;
  9.  
  10. begin
  11.   read(n); // считываем длину массива
  12.   for i := 1 to n do read(A[i]); // считываем элементы массива
  13.   if A[1] < A[2] then write(A[1], ' '); // первый элемент рассматриваем отдельно
  14.   for i := 2 to n - 1 do // в цикле рассматриваем элементы со второго до предпоследнего
  15.     if (A[i - 1] + A[i + 1]) > A[i] then write(A[i], ' '); // если элемент меньше суммы соседних элементов, выводим его
  16.   if A[n] < A[n - 1] then write(A[n]) // последний элемент также рассматриваем отдельно
  17. end.

Вы на правильном пути

Вы на правильном пути, Данил. Я считаю, что выжать из нескольких типовых задач максимум (или дожать эти задачи) важнее, чем просто бессистемно расширять список решаемых задач (хотя и это полезно - нарабатывается опыт).
Теперь по существу. Решения верны. Третья задача проста и не требует обсуждения. Решение первой можно бы чуть упростить, но я не буду этого делать. А по решению второй я бы предложил более понятный, на мой взгляд, и более простой вариант:

  1. ...
  2. begin
  3.   flag:=true;
  4.   Read(M,R); //первые два элемента
  5.   repeat
  6.       L:=M;
  7.       M:=R;
  8.       Read(R); //имеем тройку < L,M,R >
  9.       If R<>0 Then Begin // если не конец последовательности ...
  10.           flag:= ((L-M)*(R-M))>0; // то эта тройка образует "зуб"
  11.       End;
  12.   until not flag or (R=0);
  13.   Writeln(flag)
  14. end.

В этом решении M - остриё зуба, L, R, соответственно, его левый и правый край. И обратите внимание на вариант вывода результата!

И ещё. На лабораторке мы уже решали задачу проверки того, что цифры числа образуют строго монотонную последовательность. Для всех желающих, предлагаю следующий вариант условия этой задачи.

Задача о монотонной последовательности. Дана входная последовательность натуральных чисел, завершающаяся нулём. Проверить является ли она строго монотонной (т.е. строго возрастающей или строго убывающей).
Кстати, подумайте, почему я разместил условие этой задачи именно здесь?

Здравствуйте, вот моё решение

Здравствуйте, вот моё решение на нахждение суммы первых ,,n" членов по Пф

program blu1;
var a,b,c,d,n,f:Integer;
begin
Read(n);
d:=2;
a:=1;
b:=1;
f:=2;
while f<>n do begin
Inc(f);
c:=a+b;
a:=b;
b:=c;
d:=d+c;
end;
write(d);
end.

Верно, но...

1. Не работает при n=1;
2. Программа не структурирована;
3. Текст не оформлен на сайте как программный код.

Д/з. сортировка массива(заков) по возрастанию.

  1. const L=50;
  2. var i,j,k:integer; a:array [1..L] of char; c,x:char; n:integer;
  3. begin
  4.    read(n);
  5.    for i:=1 to n do
  6.    readln(a[i]);
  7.    for i:=n downto 1 do
  8.      for j:=1to i do begin
  9.        if a[j]>=a[i] then begin x:=a[j]; k:=j;
  10.        a[k]:=a[i];
  11.        a[i]:=x;
  12.      end;
  13.    end;
  14.    for i:=1 to n do
  15.    write(a[i],' ');
  16. readln;
  17. end.

Не ясно, зачем в строке 9

Не ясно, зачем в строке 9 оператор k:=j;
. Кроме того, Вы Роман не следуете описанному алгоритму, что может вызывать ненужные обмены.

можно по подробней в чем

можно по подробней в чем именно не следую.

Воспроизведите здесь

Воспроизведите здесь описанный мною алгоритм и мы перечитаем его внимательней вместе.

Операции над двумя матрицами

Ничего нового тут нет, я всего лишь по заданию Валерия Шахамболетовича оформил действия над матрицами в виде функций (подпрограмм)

  1. Program OperationsOnTwoMatrixes;
  2.  
  3. const lim = 50; //Максимальное число строк/столбцов
  4. type MySmallInt = 1..lim; //Вводим свой тип целых, экономим память
  5. type Matrix = array[MySmallInt, MySmallInt] of real; //Тип матриц
  6.  
  7. //Функция сложения двух матриц
  8. //Параметры - обе матрицы и их размерность m x n, которая одинакова у обоих
  9. //m - количество строк, n - столбцов
  10. function addTwoMatrixes(var matr1, matr2: Matrix; m, n: MySmallInt): Matrix;
  11.  
  12. var i, j: MySmallInt; //Вспомогательные переменные для цикла for
  13. res: Matrix; //Результат
  14.  
  15. begin
  16.   for i := 1 to m do
  17.     for j := 1 to n do
  18.       res[i, j] := matr1[i, j] + matr2[i, j];
  19.  
  20.   addTwoMatrixes := res; //Возвращаем результат
  21. end;
  22.  
  23. //Функция вычитания двух матриц
  24. //Все параметры аналогичны параметрам функции сложения
  25. function subTwoMatrixes(var matr1, matr2: Matrix; m, n: MySmallInt): Matrix;
  26.  
  27. var i, j: MySmallInt;
  28. res: Matrix;
  29.  
  30. begin
  31.   for i := 1 to m do
  32.     for j := 1 to n do
  33.       res[i, j] := matr1[i, j] - matr2[i, j];
  34.  
  35.   subTwoMatrixes := res;
  36. end;
  37.  
  38. //Функция умнножения двух матриц
  39. //Параметры - обе матрицы и их размерность, у первой - m x n, у второй - n x p
  40. function multTwoMatrixes(var matr1, matr2: Matrix; m, n, p: MySmallInt): Matrix;
  41.  
  42. var i, j, k: MySmallInt; //Вспомогательные переменные для цикла for
  43. res: Matrix; //Результат
  44.  
  45. begin
  46.   for i := 1 to m do begin
  47.     for k := 1 to p do begin
  48.       res[i, k] := 0;
  49.       for j := 1 to n do
  50.         res[i, k] := res[i, k] + matr1[i, j] * matr2[j, k];
  51.     end;
  52.   end;
  53.  
  54.   multTwoMatrixes := res;
  55. end;
  56.  
  57. //Далее - простые примеры использования
  58. var a, b, c, d: Matrix;
  59. m, n, i, j: MySmallInt;
  60. begin
  61.   write('m=');
  62.   readln(m);
  63.   write('n=');
  64.   readln(n);
  65.  
  66.   //Считывание матриц
  67.   writeln('Матрица 1:');
  68.   for i := 1 to m do
  69.     for j := 1 to n do
  70.       read(a[i, j]);
  71.  
  72.   writeln;
  73.  
  74.   writeln('Матрица 2:');
  75.   for i := 1 to m do
  76.     for j := 1 to n do
  77.       read(b[i, j]);
  78.  
  79.   c := addTwoMatrixes(a, b, m, n); //c - сумма матриц
  80.  
  81.   writeln('Сумма этих матриц:');
  82.   for i := 1 to m do begin
  83.     for j := 1 to n do
  84.       write(c[i, j] : 6 : 2);
  85.     writeln;
  86.   end;
  87.  
  88.   d := subTwoMatrixes(a, b, m, n); //d - разность матриц
  89.  
  90.   writeln('Разность этих матриц:');
  91.   for i := 1 to m do begin
  92.     for j := 1 to n do
  93.       write(d[i, j] : 6 : 2);
  94.     writeln;
  95.   end;
  96.  
  97.   readln;
  98.  
  99. end.

Транспонирование и умножение на число

  1. Program OperationsOnMatrix;
  2.  
  3. const lim = 50;
  4. type MySmallInt = 1..lim;
  5. type Matrix = array[MySmallInt, MySmallInt] of real;
  6.  
  7. //Функция умножения матрицы на число
  8. //Параметры - матрица, множитель k, размерность m x n
  9. function multMatrixByNumber(var matr: Matrix; k: real; m, n: MySmallInt): Matrix;
  10.  
  11. var i, j: MySmallInt;
  12.  
  13. begin
  14.   for i := 1 to m do
  15.     for j := 1 to n do
  16.       matr[i, j] := matr[i, j] * k;
  17.  
  18.   multMatrixByNumber := matr;
  19. end;
  20.  
  21. //Функция транспонирования
  22. //Параметры - матрица и количество её строк (равно количеству столбцов)
  23. function transposeMatrix(var matr: Matrix; n: MySmallInt): Matrix;
  24.  
  25. var i, j: MySmallInt;
  26. t: real;
  27.  
  28. begin
  29.   for i := 1 to n do
  30.     for j := 1 to i do begin
  31.       t := matr[i, j];
  32.       matr[i, j] := matr[j, i];
  33.       matr[j, i] := t;
  34.     end;
  35.  
  36.   transposeMatrix := matr;
  37. end;
  38.  
  39. //Пример использования
  40. var a, b: Matrix;
  41. i, j, n: MySmallInt;
  42. begin
  43.   write('Введите порядок матрицы: ');
  44.   readln(n);
  45.  
  46.   writeln('Введите матрицу:');
  47.   for i := 1 to n do
  48.     for j := 1 to n do
  49.       read(a[i, j]);
  50.  
  51.   b := transposeMatrix(a, n); //b - транспонированная матрица
  52.  
  53.   writeln('Транспонированная матрица:');
  54.   for i := 1 to n do begin
  55.     for j := 1 to n do
  56.       write(b[i, j] : 6 : 2);
  57.     writeln;
  58.   end;
  59.  
  60.   readln;
  61.  
  62. end.

Дмитрий, ОК!

Дмитрий, ОК!

Здравствуйте, ИС3!

Здравствуйте, ИС3!
Войдите в свою группу. Там вы найдёте несколько задач. Хотелось бы отследить ваши индивидуальные траектории работы над этими задачами. Оценивать буду как результаты, так и активность. Удачи!

P.s. Хочу услышать "голос" каждого! Кстати, не вижу Кати и Виталия.

ПМ!

Конкретно, Дима Барышников, Ислам, Данил, подтвердите что живы!

Подтверждаю. Жив, Здоров,

Подтверждаю. Жив, Здоров, Бодрствую.

Я здесь. Валерий

Я здесь. Валерий Шахамболетович, прочтите, пожалуйста, письмо, которое я отправил Вам на E-mail.

Да...жив:)

Да...жив:)