Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Паскаль. Задача на массивы (http://www.tehnari.ru/f43/t18212/)

sweeney 10.12.2008 02:58

Паскаль. Задача на массивы
 
Помогите решить пожалууйста)

Нужно написать программу на языке Паскаль, которая осуществляет обработку двумерного массива.

Задание:

Дана прямоугольная матрица.
Определить количество столбцов, произведение элементов которых меньше 5.


Условия:

Элементы массива вещественного типа.
Массив объявляется размером 10 на 10 .
Размеpность рабочего массива задается пользователем, но не более 10 строк и не более 10 столбцов (при вводе пользователем большего значения чем 10 программа должна предложить повторно ввести неверно заданный параметр).
Ввод значений массива осуществляется с консоли или из файла (по выбору пользователя).

Результат pаботы пpогpаммы (исходный массив в виде матрицы и искомый параметр с соответствующими пояснениями) выводится на экpан и в файл.


Помогиите)))

bubuka 10.12.2008 19:02

если никто не обгонит завтра к 12 дня будет выложен текст программы
а сейчас пора с работы домой)))

sweeney 10.12.2008 20:00

Буду очень благодарен)

sweeney 10.12.2008 20:36

Цитата:

Сообщение от bubuka (Сообщение 153308)
если никто не обгонит завтра к 12 дня будет выложен текст программы
а сейчас пора с работы домой)))

Так, уже не нужно, друг помог сделать)) Но есть новая задача:

В одномерном массиве, состоящем из n вещественных элементов, вычислить:

1. максимальный по модулю элемент массива;
2. сумму элементов массива, расположенных между первым и
вторым положительными элементами.

Преобразовать массив таким образом, чтобы элементы, равные
нулю, располагались после всех остальных.


Это поможете сделать? Пожалуйста)

AlexZir 15.12.2008 13:03

К задаче #1 (на всякий случай, чтобы не было вопросов)
Код:

program massiv1;
uses crt;
label inp1, inp2; {объявление меток для возврата при неправильном вводе параметров}
var n,k,i,j: integer;
    p: real;
    a: array[1..10,1..10] of real;
    f: text;
begin
{инициализация генератора псевдослучайных чисел}
randomize;
{очистка текстового экрана}
clrscr;
{ввод размерности массива}
inp1: writeln('Введите размерность массива в диапазоне [1:10]');
readln(n);
if (n<1) or (n>10) then goto inp1;
{выбор источника значений массива}
inp2: writeln('Выберите способ заполнения массива (1 - из файла, 2 - вручную, 3 - псеводслучайные значения)');
readln(k);
case k of
{заполнение из текстового файла}
1:begin
  writeln('Идет заполнение массива значениями из файла c:\in.txt');
  {работа с указанным файлом}
  assign(f,'c:\in.txt');
  reset(f);
  i:=1;
  while not eof(f) do {проверка конца файла}
  begin
    j:=1;
    while j<=n do {заполнение по столбцам}
    begin
      read(f,a[i,j]);
      j:=j+1;
    end;
    i:=i+1;
  end;
  close(f);
  end;  {1}
{заполнение массива вручную}
2: begin
  for i:=1 to n do
  for j:=1 to n do
  begin
  writeln('Введите [',i,':',j,'] элемент массива');
  read(a[i,j]);
  end;
  end; {2}
{заполнение массива псевдослучайными значениями из диапазона [0;10]}
3: begin
  for i:=1 to n do
  for j:=1 to n do
  begin
  a[i,j]:=random*10;
  end;
  end; {3}
else goto inp2;
end; {case}
writeln('Массив заполнен значениями.');
{вывод массива на экран}
writeln;
for i:=1 to n do begin
for j:=1 to n do
begin
write(a[i,j],'  ');
end; writeln; end;
{вычисление количества столбцов, произведение элементов в которых меньше 5}
k:=0;
for i:=1 to n do
begin
p:=1;
for j:=1 to n do
begin
p:=p*a[i,j];
end;
if p<5 then k:=k+1;
end;
{вывод результатов на экран и в файл out.txt}
writeln('В массиве количество столбцов, произведение элементов которых меньше 5, равно ',k);
writeln('Результат работы программы сохранен в файл c:\out.txt');
assign(f,'c:\out.txt');
rewrite(f);
for i:=1 to n do
begin
 for j:=1 to n do write(f,a[i,j]:4:6,' ');
 writeln(f,'');
end; {i}
writeln(f,'В массиве количество столбцов, произведение элементов которых меньше 5, равно ',k);
close(f);
readln(i);
end.

Содержимое файла in.txt:
Код:

10.1
2.11
3.12
2.1
2.3
1.1
3.2
2.1
0.2

Содержимое файла out.txt:
Код:

10.100000 2.110000 3.120000
2.100000 2.300000 1.100000
3.200000 2.100000 0.200000
В массиве количество столбцов, произведение элементов которых меньше 5, равно 1


AlexZir 15.12.2008 13:04

К задаче #2 (без работы с файлами, если нужно - скопируйте из предыдущего поста)
Код:

program massiv2;
uses crt;
label inp1;
var n,k,i,j: integer;
    max, sum, b: real;
    a: array[1..1000] of real;
begin
randomize;
clrscr;
{ввод размерности массива}
writeln('Введите размерность массива:');
readln(n);
{выбор источника значений массива}
inp1: writeln('Выберите способ заполнения массива (1 - вручную, 2 - псевдослучайные значения)');
readln(k);
case k of
{заполнение массива вручную}
1: begin
  for i:=1 to n do
  begin
  writeln('Введите [',i,'] элемент массива');
  read(a[i]);
  end;
  end; {1}
{заполнение массива псевдослучайными значениями}
2: begin
  for i:=1 to n do
  begin
  a[i]:=random*10; {генерация значений элементов массива}
  if trunc(random*2)=1 then a[i]:=a[i]*(-1); {генерация отрицательных значений}
  end;
  end; {2}
else goto inp1;
end; {case}
writeln('Массив заполнен значениями:');
{вывод массива на экран}
writeln;
for i:=1 to n do
begin
writeln(a[i]);
end;
writeln;
{поиск максимального по модулю элемента массива}
max:=a[1];
j:=1; {j - порядковый номер мах по модулю элемента}
for i:=2 to n do
begin
if abs(a[i])>=abs(max) then begin max:=a[i]; j:=i; end;
end;
writeln('Максимальный по модулю элемент с порядковым номером ',j,' равен ',max);
{вычисление суммы элементов между первым и вторым положительными элементами массива}
sum:=0;
j:=1;
for i:=1 to n do
begin
if (a[i]>0) and (j=1) then
          begin
          while a[i+1]<=0 do begin
          i:=i+1;
          sum:=sum+a[i]; end;
          j:=j+1;
          end;
end;
writeln('Сумма элементов между первым и вторым положительным элементом равна ',sum);
{перемещение всех 0 в конец массива}
writeln('Отсортированный массив: ');
for i:=1 to n do
begin
if a[i]=0 then
          begin
          j:=i;
          while j<=n do begin
          b:=a[j+1];
          a[j+1]:=0;
          a[j]:=b;
          j:=j+1;
          end; {while}
          end; {if}
end;
{вывод на экран полученного массива}
for i:=1 to n do writeln(a[i]);
readln(i);
end.


bubuka 15.12.2008 20:49

у студентов приближается сдача сессии - надо как то делать лабы по информатике )))

sweeney 15.12.2008 21:42

Всем огромное спасибо))) извините, что долго не благодарил, но все равно)) все спасибо)) ну тоесть спасибо вам, AlexZir ) большое-большое)
Да, приближается сессия, только лабы не по информатике, а по программированию)хаха

Давуд 16.12.2008 12:57

Привет всем! Помогите мне пожалуйста с массивами в паскале. Я просто ниразу не делал лабы в паскале. Кто сможет помогите плиз.
Лабораторная работа « Одномерные массивы».



Вводится длина одномерного массива (вектора) и значения его элементов.

1) Составить и вывести на экран новый массив с номерами элементов исходного массива, которые равны заданному значению. Заданное значение вводится с клавиатуры.

2) Поменять местами максимальный и минимальный элементы массива. Вывести измененный массив на экран.

3) Все элементы массива, меньшие заданного значения, и их номера записать в новые массива. Вывести новые массивы на экран. Заданное значение вводится с клавиатуры.

4) Вводится дополнительный массив разрешенных значений. Определить и вывести на экран, сколько элементов исходного массива имеют разрешенные значения.

5) Вводится дополнительный массив разрешенных значений. Составить массив из элементов исходного массива, имеющих неразрешенные значения. Вывести результативный массив на экран.

6) Составить и вывести на экран массив с М максимальными значениями исходного массива. М вводится дополнительно.

7) Переписать элементы массива в обратном порядке на том же месте. Вывести измененный массив на экран.

8) Составить и вывести на экран массив из различных элементов исходного массива.

9) Cоставить и вывести на экран массив номеров элементов исходного вектора, встречающихся один раз.

10)Составить и вывести на экран два массива: массив повторяющихся элементов исходного массива и массив их частот.

Давуд 16.12.2008 12:58

Вот еще одна. помогите плиз.
Лабораторная работа «Двумерные массивы».



Ввести размер прямоугольной матрицы и значения ее элементов.

Построить вектор В, где В(i) -

1) число неотрицательных элементов в i-ой строке.

2) среднее арифметическое положительных элементов в i-ом столбце.

3) минимальное значение в i-ой строке.

4) максимальное значение в i-ом столбце.

5) номер максимального значения в i-ой строке.

6) номер минимального значения в i-ом столбце.

7) число элементов i-ой строки, значения которых меньше заданного значения.

8) значение элемента матрицы, не равное заданному значению.

9) равно 1, если значения элементов i-ой строки упорядочены по возрастанию,

и 0, в противном случае.

10) количество простых чисел в i-ой строке.


Часовой пояс GMT +4, время: 16:46.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.