Отправляет email-рассылки с помощью сервиса Sendsay

Pascal с нуля by [CPM]

  Все выпуски  

Pascal с нуля by [CPM] Выпуск №10


Информационный Канал Subscribe.Ru

Рассылка "Pascal с нуля" by [CPM]. Выпуск №10


.:.::BEGIN::.:...

Автор: v()v@#[CPM] mailto: vovanc@bigmir.net

Автор: MedL[CPM] mailto: medlmail@bigmir.net

Доброе время суток, уважаемые подписчики!!


Домашняя работа:
Единственная задача, которую я напечатаю - №2, все остальные делайте сами, а если не получится - пишите.
Моего внимания заслужила задача by Agel Nash


uses Crt;
Var
t,b: byte;
BEGIN
clrScr;
b:=1;
for t:=0 to 255 do
  begin
  Write(t,' - "',chr(t),'"');
  WriteLn;
  if t=23*b then
    begin
    readkey;
    b:=b+1;
    clrScr;
  end;
    end;
END.



Ustas[CPM] >>>

Далее следует диалог между MedL[CPM]ом(М:) & v()v@#[CPM]ом(V:)

М: Сегодня речь пойдет о такой замечательной вещи, как массив, или, синоним, матрица. Вообще, не понятно в честь чего назван фильм "Матрица", ведь, как ни крути, почти ничего общего он с массивом не имеет.

V: Ведь НЕО был программером, а он уж точно знал, что такое матрица. Из курса математики или информатики?
s
М: 8). Впрочем, это не так уж важно. Давайте попробуем представить, что ЭТО такое(никаких параллелей с Морфеусом!!).

V: Да, действительно, мы тут рассылку делать собираемся или просто посидеть про Матрицу побазарить собрались????

М: Вообще, запоминаем 8) : массив - это сборище значений, каждому из которых присвоено своё имя. Имя обычно означает номер с начала массива.

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

М: Чтобы проще понять понятие "массив" - представьте себе паровоз (электричку и пр.), и в каждом вагоне сидит разное количество людей. Каждый вагон - одна переменная массива, а количество людей в нем - значение этой переменной.

V: Да, вот вы представили себе паровоз (електричку и пр.(обязательно с вагонами)). Но как мы узнаем, сколько людей сидит в каждом из вагонов? Всё.. запутался я со всеми этими вагонами, поездами, людьми. Буду переходить непосредственно к массивам. Массив должен быть определён в разделе объявления переменных, содержать переменные одного типа. Объявление массива:


var
[имя массива]: array[x..y] of [тип переменных];
 ........

Тут х - номер первого элемента массива, у - номер последнего.

Примеры пусть пишет MedL, сам напросился. Кричит тут: "Примеры им давай, они тебя не понимают!!!"

М: *******-приколист... Примеры:


var
A: array[1..5] of byte;
matrix: array[1..1000] of integer;
nichegonepoluchaitsya: array[7..7] of extended;


Первый массив - массив из 5 членов, причем все они одного типа byte. Аналогично второй. А третий...

V: Третий просто врядли будет работать, хоть это не проверялось. И вообще человек - это такое ленивое существо, которое делает всё только если очень захочется, или знает волшебное слово НАДО. Насчёт памяти, которую занимает каждый из массива. Я тут прикинул: под первый пойдёт 5 байт, под второй - 2000, под третий - не проверял. Также можно определять "безразмерный" массив. Просто не пишите квадратных скобок. Допустим, что вы создали массив, но как его юзать (использовать)? Первое действие - присвоить значение какому-то элементу. Присвоение значения:

[имя массива]:=[значение];
Я вам ещё и попробую это проиллюстрировать.
a:array of integer;
123456789...
5232-58111234432555-9996543...

Если мы напишем Write(a[3]);, на экран выведется -58. Если напишем a[4]:=1;, массив будет изменён:
123456789...
5232-581234432555-9996543...


М: действительно ленивое 8). Даже больше чем существо. Теперь представьте себе, что у Вас 100 элементов в массиве, и каждый элемент нужно заполнить. Неприятное занятие, но в этом деле есть маленькая хитрость.

V: Имя этой хитрости - цикл. И не простой цикл, а цикл с заданным кол-ом повторений. Мы любители поиздеваться и напишем так:


uses crt;
const n=100;
var
a:array[1..n] of word;
i:byte;
begin
clrscr;
for i:=1 to n do
begin
  write('Введите ',i,' элемент массива: ');
  readln(a[i]);
end;
WriteLn('Вы первый, кто ввёл столько элементов вручную.');
readkey;
end.


М: как видите, осталось только ввести 100 элементов, и золотой ключик у нас в кармане. Кстати, если вы введете число, которое не удовлетворяет тип word - вылетите. Не проверялось 8). Работает это так:
1) определяем константу n, которая отвечает за количество элементов в массиве, что нужно в нашей проге чисто для удобства. Например, нам казали: "А сделайте, ребята, массив поменьше". Без этой константы мы лазили бы по проге в поисках мест, где упоминается кол-во элементов, а так мы просто изменяем значение константы.
2) определяем массив с n кол-ом элементов и переменную-счётчик.
3) начинаем выводить на экран n раз слова "Введите № элемента массива: " и полностью вводим массив
4) появляется веселая надпись "Вы первый, кто ввёл столько элементов вручную."
А как же все-таки сделать так, чтоб комп сам вводил эти значения??

V: Все, что нам надо переделать код, используя такую связку, как randomize; - random(x);, о которой говорилось в прошлых выпусках. Переделаем же код:


uses crt;
const n=100;
var
a:array[1..n] of word;
i:byte;
begin
clrscr;
randomize;
for i:=1 to n do
  a[i]:=random(65000);
WriteLn('Массив создан и заполнен случайными числами.');
readkey;
end.

Как вывести этот массив на экран? После заполнения вставить строку:
for i:=1 to n do write(a[i],' ');
Для разминки сейчас напишем прогу.

М:


uses crt;
const n=10;
var
a:array[1..n] of integer;
i:integer;
s:integer;
begin
clrscr;
randomize;
for i:=1 to n do
  a[i]:=random(2000)-1000;
for i:=1 to n do
  write(A[i]:6);
s:=0;
for i:=1 to n do
  s:=s+a[i];
write('Сумма всех елементов в массиве равна ', s);
readkey;
end.

V: Здесь всё аналогично. Отличия от предыдущих примероV: генерируются числа от -1000 до 1000, другой вывод на экран, всего 10 элементов массива (жалеем машину). Очень распространённые задачи на уроках программирования:
1) заполнить массив случайными переменными, все элементы, которые содержат чётное число, заменить на меньшие (большие) в 2 (х) раза, а которые - нечётные заменить на сумму членов массива. Если подумать, всё это достигается очень просто. У нас уже большая часть задания есть.


uses crt;
const n=10;
var
a:array[1..n] of integer;
i:integer;
s:integer;
begin
clrscr;
randomize;
for i:=1 to n do
  a[i]:=random(2000)-1000;
writeln('Do:');
for i:=1 to n do
  write(A[i]:6);
s:=0;
for i:=1 to n do
  s:=s+a[i];
for i:=1 to n do
  if a[i] mod 2 = 0 then a[i]:=a[i] div 2 else a[i]:=s;
writeln;
Writeln('Posle:');
for i:=1 to n do
  write(A[i]:6);
writeln;
readkey;
end.

2) Поиск минимального и максимального элемента массива, вывод на экран номера этого элемента.


uses crt;
const n=10;
var
i:byte;
a:array[1..n] of byte;
max,min:byte;
begin
clrscr;
randomize;
for i:=1 to n do a[i]:=random(255);
for i:=1 to n do write(a[i], ' ');
max:=1;
min:=1;
for i:=1 to n do begin
  if a[i]>a[max] then max:=i;
  if a[i]<a[min] then min:=i;
end;
a[min]:=a[min]+a[max];
a[max]:=a[min]-a[max];
a[min]:=a[min]-a[max];

writeln;
for i:=1 to n do write(a[i], ' ');
writeln;
writeln('min-',min,', max-',max);
readln;
end.

Заполняем масив, выводим его. Ищем номер самого маленького и самого большого элемента массива. Меняем их местами. Выводим изменённый массив, номер минимального и максимального элемента. Как работает перестановка - спросите у учителя математики, информатики.

М:
3) поиск числа в массиве


uses crt;
const N=10;
var
A:array [1..N] of integer;
i:integer;
b:integer;
flag : integer;
begin
clrscr;
randomize;
flag :=0;
      for i:=1 to N do
      begin
  A[i]:=Random(10)
      end;
      for i:=1 to n do write(a[i], ' ');
          textcolor(3);
          writeln;
          Writeln('input number');
          readln(b);
                    for i:=1 to N do
                    begin
  textcolor(6);
  if A[i]=b then
  begin
    flag:=1;
    textcolor(4);
    write(a[i]:4);
  end
  else
    write(A[i]:4);
  end;
  if flag=0
  then begin
    writeln;
    write('There is no element in array');
      end;
      readkey;
end.


Задание:
Написать прогу, которая создаёт массив (10 эл-ов). Спрашивает у пользователя о том, каким образом он хочет заполнить массив: вручную или средствами комп. Если средствами компа, то спросить максимальное и минимальное генерируемое число и сгенерировать в соответствии с введёнными числами. Если элемент отрицательный, то мы заменяем его на то же самое, только со знаком +, если положительное, то проверяем его на четность. Если оно чётное, то уменьшаем в 2 раза, если нечётное - делаем со знаком -. Считаем кол-во чётных и нечетных, отрицательных и положительных значений до изменения. Выводим их на экран. Выводим на экран массив: положительные эл-ты - одним цветом, отрицательные - другим. Не забыть вывести массив до и после изменений.

На этом всё. Ответы шлите на ящик. Вопросы тоже туда.
Или на форум http://studcity.ru/forum/viewforum.php?f=10 .

.:.::END::.:...


Дизайнерское слово Ustasа

Автор: Ustas[CPM] mailto: Ustas1715@yandex.ru

Приветствую Вас!

Как видите, мы не стоим на месте во всех отношениях. Особенно радует рост числа подписчиков.

Но теперь о плохом. Мной и нашими читателями была замечена очень неприятная особенность некоторых почтовых серверов(точнее их web-интерфейсов для работы с почтой)- номера нашей рассылки не корректно отображаются(точнее все "черное на черном"). Скорее всего, это связано с проблемеми с CSS - главным инструментом, использующимся мной для оформления. В связи с этим призываю всех пользоваться почтовыми клиентами типа The Bat и др.


Наша команда [CPM]:

Дизайн,верстка и юзабилити >>> Ustas[CPM]

Пишет >>> v()v@#[CPM] ICQ:88880172

Тоже Пишет >>> MedL[CPM]ICQ:88883515 

 

 



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу


В избранное