Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача с матрицами, Паскаль 
:(
    Опции темы
Eminio
Дата 7.3.2006, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.3.2006

Репутация: нет
Всего: нет



Люди!
Дело в том, что надо сдать зачет по информатике за 1ый курс, иначе айлюлю. Сама я перевелась и времени на академ разницу мало.
А 2 задачки самые что ни на есть элементарные. Паскаль никогда не изучала. :/

pascal, windows.

1.Дана матрица A (M,N)
Составить вектор из номеров строк, где все элементы простые числа.

2.Дан одномерный массив A(N).
Составить программу:
а) Вычислить S=A(1)+A(2)*A(3)+A(4)*A(5)*A(6)+A(7)*A(8)*A(9)*A(10)...+...+A(N)


Буду ОЧЕНЬ признательна за решение. Огромное спасибо заранее.

PM MAIL   Вверх
darkart
Дата 9.3.2006, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Первая...
Код

program Eminio1;
const
  m=3;{кол-во строк}
  n=4;{кол-во столбцов}
type
  TString=array[1..n] of integer;{описание типа строки}
  TMatrix=array[1..m] of TString;{описание типа матрицы}
  TVector=array[1..m] of boolean;{описание типа вектора}
procedure CreateRandomMatrix(var Matrix:TMatrix);
{процедура заполняет случайными значениями матрицу Matrix}
const
  ToRnd=10;{верхний диапазон значения матрицы, т.е. случайное число будет от 0 до ToRnd-1}
var
  i,j:integer;{i,j - счетчики}
begin
  for i:=1 to m do
    for j:=1 to n do
      Matrix[i,j]:=random(ToRnd);{заполнение ячейки (i,j) матрицы случайным числом}
end;
procedure InputMatrix(var Matrix:TMatrix);
{процедура ввода значений матрицы}
var
  i,j:integer;{i,j - счетчики}
begin
  for i:=1 to m do
  begin
    for j:=1 to n-1 do
      read(Matrix[i,j]);{чтение элемента}
    readln(Matrix[i,n]);{чтение элемента матрицы с переводом строки}
  end;
end;
procedure PrintMatrix(var Matrix:TMatrix);
{процедура печати матрицы}
var
  i,j:integer;{i,j - счетчики}
begin
  for i:=1 to m do
  begin
    for j:=1 to n-1 do
      write(Matrix[i,j],' ');{печать первых n-1 элементов строки через пробел}
    writeln(Matrix[i,n]);{печать последнего элемента строки с переходом на след. строку}
  end;
end;
function IsSimple(num:integer):boolean;
{функция проверяет является ли число num простым}
var
  bolTemp:boolean;
  i,tmp:integer;{i - счетчик, tmp - вспомогательная переменная}
begin
  bolTemp:=(num>2) and (num mod 2<>0);{число простое, если оно > 1 и нечетно}
  if bolTemp then {если удовлетворяет первым 2 условиям}
  begin
    i:=2;{i - делитель}
    tmp:=num div 2;{будем просматривать остаток от деления до tmp}
    repeat
      bolTemp:=num mod i<>0;{число не делится на i}
      inc(i);{увеличение i}
    until (i>tmp) or (not bolTemp);{выход из цикла, если просмотрели все делители или число не простое}
  end;
  IsSimple:=bolTemp or (num=2);{число простое}
end;
procedure CreateVector(var Matrix:TMatrix;var Vector:TVector);
{процедура формирует вектор Vector, для которого на I-ом месте стоит true если i-ая строка состоит только из простых чисел и false иначе}
var
  i,j:integer;{i,j - счетчики}
begin
  for i:=1 to m do
  begin
    j:=1;
    repeat
      Vector[i]:=IsSimple(Matrix[i,j]);{проверка очередного элемента i-ой строки }
      inc(j);{увеличение j}
    until (j>n) or (not Vector[i]){выход из цикла: если проверили все числа, или нашли хотя бы одно - не простое}
  end;
end;
procedure PrintVector(var Vector:TVector);
{процедура печати вектора}
var
  i:integer;{i - счетчик}
begin
  for i:=1 to m do
    if Vector[i] then writeln(i);{если i-ый элемент вектора истина, то печатаем номер i}
end;
var
  Vector:TVector;
  Matrix:TMatrix;
begin
  randomize;
  {writeln('Creating random matrix...');
  CreateRandomMatrix(Matrix);{создание случайной матрицы}
  writeln('Please enter matrix(',m,'x',n,'):');
  InputMatrix(Matrix);{ввод матрицы}
  writeln('Source matrix:');
  PrintMatrix(Matrix);{печать матрицы}
  writeln('Createing vector...');
  CreateVector(Matrix,Vector);{заполнение вектора}
  writeln('Numbers of Simple strings is:');
  PrintVector(Vector);{печать номеров строк с простыми числами}
  readln;
end.


PM MAIL WWW ICQ Skype GTalk   Вверх
sergejzr
Дата 9.3.2006, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 11
Всего: 360



Модератор: Пожалуйста, один топик - один вопрос.
Модератор: Название темы должно отражать ее суть!


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
darkart
Дата 9.3.2006, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 379
Регистрация: 9.11.2005

Репутация: 26
Всего: 31



Вопрос по второй задаче, например, для N=3 нужно:
1)S=A(1)+A(2)*A(3)
или
2)S=A(1)+A(2) +A(3)
или
3)что-то другое
? smile ?
PM MAIL WWW ICQ Skype GTalk   Вверх
Eminio
Дата 13.3.2006, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 7.3.2006

Репутация: нет
Всего: нет



для второй задачи нужен
1)S=A(1)+A(2)*A(3)

PM MAIL   Вверх
Dov
Дата 14.3.2006, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



Написал на С++. Вот робкая попытка перевести на ПАСКАЛЬ
Код

program Eminio2;
const
  n = 18;    
var
  ar[1..n] : array of integer; {1+2*3+4*5*6+7*8*9*10+11*12*13*14*15+16*17*18 = 370423}
  sum, count, value, i, j, k : integer;          
begin
  sum   := ar[1];
  count := 1;
  for i := 2 to n do
  begin
    k     := i;
    value := 1;
    j     := 0;
    while (j <= count) and (k <= n) do
    begin                      
      value := value * ar[k];
      k     := k + 1;
      j     := j + 1;
    end;
    sum   := sum + value;
    count := count + 1;
    i     := i + count;
  end;
  writeln(sum);    {красоту наводить - это домашнее задание}
  readln;    
end.

Проверить, правда, не начем, так шо ежели шо не так, заранее извиняюсь.
На всякий случай выкладываю код на С++. Может кто-нибудь захочет перевести тоже.
Код
#include <iostream.h>

const int n = 18;

void main()
{                  //1+2*3+4*5*6+7*8*9*10+11*12*13*14*15+16*17*18 = 370423
        int ar[n] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18};
        int sum   = ar[0];

        for(int i = 1, count = 1; i < n; count++, i += count)
        {
                int k     = i;
                int value = 1;
                
                for(int j = 0; j <= count && k < n; j++)
                    value *= ar[k++];

                sum += value;
        }

        cout << sum << endl;
}




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0479 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.