• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль. Задача на массивы

  • Автор темы Автор темы sweeney
  • Дата начала Дата начала
Статус
В этой теме нельзя размещать новые ответы.

sweeney

Новые
Регистрация
10 Дек 2008
Сообщения
13
Реакции
0
Баллы
0
Паскаль. Задача на массивы

Помогите решить пожалууйста)

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

Задание:

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


Условия:

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

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


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

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

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

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

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


Это поможете сделать? Пожалуйста)
 
К задаче #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
 
К задаче #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.
 
у студентов приближается сдача сессии - надо как то делать лабы по информатике )))
 
Всем огромное спасибо))) извините, что долго не благодарил, но все равно)) все спасибо)) ну тоесть спасибо вам, AlexZir ) большое-большое)
Да, приближается сессия, только лабы не по информатике, а по программированию)хаха
 
Привет всем! Помогите мне пожалуйста с массивами в паскале. Я просто ниразу не делал лабы в паскале. Кто сможет помогите плиз.
Лабораторная работа « Одномерные массивы».



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

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

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

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

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

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

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

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

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

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

10)Составить и вывести на экран два массива: массив повторяющихся элементов исходного массива и массив их частот.
 
Вот еще одна. помогите плиз.
Лабораторная работа «Двумерные массивы».



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

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

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

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

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

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

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

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

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

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

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

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

10) количество простых чисел в i-ой строке.
 
и в конце нужны отчеты
Может за вас еще экзамены сдать? За отдельную плату!

Судя по сложности заданий, поставивших вас в тупик - в школе вы вообще информатику не учили!
 
Судя по сложности заданий, поставивших вас в тупик - в школе вы вообще информатику не учили!

И хорошо. Пока ВУЗы выпускают таких "специалистов", у нормальных проггеров всегда будет работа :)
 
помогите пожалуйста сделать лабу по массивам.
1)Найти в каждом столбце количество отрицательных элементов. Поменять местами четные строки исходной матрицы.
-0,2 0,2 4
3,8 0,3 -2,1
2,5 7 1
4,1 2,5 3,2
2)дан целочисленный массив а(n,n), n=6 разработать процедуру определения максимального элемента среди элементов 1-го и последнего столбца массива , скалярного произведения элементов этих столбцов ввиде функции
 
Tolyann, все написанное в предыдущих постах IMHO и к Вам относится в полной мере. Ждите, может кто добрый и найдется, меня же от поиска максимальных значений в массивах уже не то, что тошнит - блевать, извините, тянет. И вообще мы всегда готовы помочь, если что-то непонятно и не получается, но тупо выполнять за нерадивых студентов рутинные лабы и задания - знаете, с какой стати? Учитесь, осваивайте азы программирования именно на таких элементарных упражнениях - в конце концов, Вам это надо в первую очередь. А если Вы целый семестр профилонили и спохватились в конце декабря - это Ваши проблемы.

Извините за тон, накипело.
 
Vladimir_S я конечно вас понимаю что к вам на сайт приходят с вопросами по "100" раз на дню...но войдите в мою ситуацию мнне надо было сделать 5 примеров и я смог собственными силами сделать только 3 из тех что мне задавали..а вот эти 2 я никак немогу сделать... программа не компилируется к 1)...
 
Охо-хо, гореть мне в аду за ментальное растление лоботрясов... Ну что с Вами сделаешь?
Код:
CONST
 A:ARRAY[1..4,1..3] of REAL=((-0.2, 0.2, 4),(3.8, 0.3, -2.1),
                                          (2.5, 7, 1),(4.1, 2.5, 3.2));
VAR 
 Number_of_Negative_Elements:ARRAY[1..3] of BYTE;
 R:REAL;
 i,j:INTEGER;
BEGIN
  FOR i:=1 TO 4 DO
   BEGIN
     FOR j:=1 TO 3 DO
       Write(A[i,j]:6:1);
     WriteLn;
   END;
 WriteLn;
 FOR j:=1 TO 3 DO
  BEGIN
   Number_of_Negative_Elements[j]:=0;
   FOR i:=1 TO 4 DO
     IF A[i,j]<0 THEN INC(Number_of_Negative_Elements[j]);
   WriteLn('Number of negative elements in column ',j,' is ',  
                    Number_of_Negative_Elements[j]);
  END;
 WriteLn;
 FOR j:=1 TO 3 DO
  BEGIN
   R:=A[4,j];
   A[4,j]:=A[2,j];
   A[2,j]:=R;
  END;
  FOR i:=1 TO 4 DO
   BEGIN
     FOR j:=1 TO 3 DO
       Write(A[i,j]:6:1);
     WriteLn;
   END;
 ReadLn;
END.
Сейчас вторую посмотрю.
 
Код:
CONST
 A:ARRAY[1..6,1..6] of INTEGER ={дальше сами}
TYPE
 AR=ARRAY[1..6] of INTEGER;
VAR
 R1,R2:AR;
 i:INTEGER;

FUNCTION Find_Max(Rfm:AR;Nfm:INTEGER):INTEGER;
 VAR i:INTEGER;
BEGIN
 Find_Max:=Rfm[1];
 FOR i:=2 TO Nfm DO
  IF Rfm>Find_Max THEN Find_Max:=Rfm[i];
END;

FUNCTION Scalar_Product(Rsp1,Rsp2:AR;Nfm:INTEGER):INTEGER;
 VAR i:INTEGER;
BEGIN
 Scalar_Product:=0;
 FOR i:=1 TO Nfm DO
  Scalar_Product:=Scalar_Product+Rsp1[i]*Rsp2[i];
END;

BEGIN
 FOR i:=1 TO 6 DO
  BEGIN
   R1[i]:=A[i,1];
   R2[i]:=A[i,6];
  END;
 Writeln('Maximum element in column 1 is ',Find_Max(R1,6));
 Writeln('Maximum element in column 6 is ',Find_Max(R2,6));
 Writeln('Scalar product of columns 1 and 6 is ',Scalar_Product(R1,R2,6));
 ReadLn;
END.
 
Vladimir_S спасибо вам что откликнулись на мою просьбу о помощи побольше бы таких понимающих специалистов..но я не совсем понял что там должно быть после a:array[1..6,1..6] of integer= просто мы в универе делали через процедуры и ввод и вывод массива..в файл результата..
 
Vladimir_S спасибо вам что откликнулись на мою просьбу о помощи побольше бы таких понимающих специалистов..но я не совсем понял что там должно быть после a:array[1..6,1..6] of integer= просто мы в универе делали через процедуры и ввод и вывод массива..в файл результата..

Ну так организуйте ввод массива, как Вам удобно. Это просто заготовка для определения массива, как константы, как это сделано в предыдущей задаче. А так - хоть из файла, хоть с консоли. Только не забудьте прописать двумерный массив, как переменную.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху