паскаль -> процедуры и функции

C++, Assembler, PHP и т.д. и т.п...

Модератор: Tiger

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

паскаль -> процедуры и функции

Сообщение SERGant » Вт 21 фев, 2006 21:57

Народ помогите разобраться с одной проблемой:
Есть файл БД, в котором содержиться 2 строчки, состоящие из целых чисел. Надо с помощью процедуры (только так) прочитать этот файл и возвратить 2 массива из этих чисел (то есть в 1 массиве - элементы 1 строчки, во 2 элементы 2 строчки).
В параметрах процедуры должно передаваться имя файла. Основной вопрос как возвратить 2 массива (ну или как в процедуре сделать их глобальными).


ПыСы Ещё маааленький вопрос: Раньше все нормально можно было писать в паскале на русском, сейчас когда я нажимаю контрол шифт ничего не меняется, как это исправить?

ЗАРАНЕЕ ОГРОМНОЕ СПАСИБО!

kamikadzze
Сообщения: 294
Зарегистрирован: Пт 01 окт, 2004 19:13
Откуда: Нелидовская 23
Контактная информация:

Сообщение kamikadzze » Вт 21 фев, 2006 22:48

Смотря как записываеш.
В дц на доступе стоят лекции по паскалю (Literatura\Computer\Programming\Pascal\Лекции по Pascal)
ПС На сколько помню правый контрол+шифт меняет на русский, левый на английский или наоборот.

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Вт 21 фев, 2006 22:59

2Ками: почему то не переводиться, раньше переводилось, ща перестало, хз как исправить. 2. Лекции + самоучители у меня есть но все арвно не дают ответ на мой вопрос, как с помощью 1 процедуры вернуть 2 масиива данных.

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Ср 22 фев, 2006 0:29

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

Аватара пользователя
Tiger
Модератор
Сообщения: 2781
Зарегистрирован: Чт 24 июл, 2003 14:13
Откуда: Tiger@jabber.tushino.com. Погода,TV-прогр, фильмы и мн. др.: ftp:// http://10.80.192.167
Контактная информация:

Сообщение Tiger » Ср 22 фев, 2006 0:55

Есть фича в WinXP (да и во многих Win'ах), что в DOS программах можно использовать только английский язык или язык по умолчанию, теоретически можно избавится от этой фичи (бага) и использовать любой, это как-то прописывается в реестре, но я не помню..

Программа:

Код: Выделить всё

program readfile;{Эта программа не соответствует
стандарту языка pascal, но будет свободно компилироваться
кмпиляторами bp, fpc, tp, delphi, gpc, и многими другими...}

const MaxArray = 1000;
      ArrCount = 2;   
var Arr: array [1..ArrCount, 0..MaxArray]of integer;

procedure ReadF(s:string);
var f:text;
    i:intger;
begin
Assign(f,s);
reset(f);
for i:=1 to ArrCount do begin
  Arr[i][0]:=0;
  while not eoln(f) do begin
    inc(Arr[i][0]);
    read(f,Arr[i][Arr[i][0]]);
  end;
  readln(f);
end;
close(f);
end; {ReadF}

begin
  ReadF('BiArray.txt');
  {Теперь в массиве Arr у тебя распложены строки файла
   Arr[1] - первая строка, причём Arr[1][0] - число числел в перовй строке,
   для второй также Arr[2], а число чисел Arr[2][0]}
  ...
end.
С уважением Tiger.

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Ср 22 фев, 2006 1:56

Программа:

все канешна зашибись, это то фигня, но ты здесь явно ууказываешь что у меня чисел меньше чем 1к... А мне нужен точный алгоритм.. Я конечно понимаю что можно оптимизировать и посмотреть когда строка перестает заполнять массив, но есть ли более удобный способ?

Аватара пользователя
Tiger
Модератор
Сообщения: 2781
Зарегистрирован: Чт 24 июл, 2003 14:13
Откуда: Tiger@jabber.tushino.com. Погода,TV-прогр, фильмы и мн. др.: ftp:// http://10.80.192.167
Контактная информация:

Сообщение Tiger » Ср 22 фев, 2006 8:43

Ну сделай >1K, там констнта. Ограничение на число чисел должны быть у нас память не бесконечна. Если у нас число чисел как в первом так и вовтором массиве неизвестно, но точно известно, что они влезают в память, то здесь быть может можно будет пременить динамический массив. Ты на каком курсе учишся с такими заданиями?
С уважением Tiger.

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Ср 22 фев, 2006 18:31

Первом... Спасибо Тайгер, буду юзать твою функцию, авсоь прокатит...

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Ср 22 фев, 2006 22:14

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

Аватара пользователя
Tiger
Модератор
Сообщения: 2781
Зарегистрирован: Чт 24 июл, 2003 14:13
Откуда: Tiger@jabber.tushino.com. Погода,TV-прогр, фильмы и мн. др.: ftp:// http://10.80.192.167
Контактная информация:

Сообщение Tiger » Ср 22 фев, 2006 22:53

Рассмотрим матрицу:

Код: Выделить всё

1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
Побочная диаганаль в этой матрице это диаганаль состоящая из пятёрок, как мы видим в первой строчке число элементов кторые надо считать =0, во второй =1, нужно считать от n-1 до n (строчка вторая).

Тем самым нам нужно вычислить:
result=Sum(по i от 1 до n)Sum(по j от n-i+2 до n)a[i,j];

Здесь записан псевдокод, я думаю что записать это ввиде программы состоящей из трёх строчек тебе будет несложно.
С уважением Tiger.

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Чт 23 фев, 2006 0:22

да я в начале запостил, потом догадался... вот всегда так...

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Вт 14 мар, 2006 20:20

такс снова вопрос (блин что-то башка уже не варит от этой каши, ибо изучать 3 языка программирования - напряжно :/)
Пусть у нас есть файл базы данных, в нем 2 строчки слов, причем я не знаю их длину, как записать эти слова в массив? Тип должен быть стринг, тк потом будет сравнене с спец словом.

Извиняюсь за путующиеся мысли, но уже все голова кипит...

Аватара пользователя
Tiger
Модератор
Сообщения: 2781
Зарегистрирован: Чт 24 июл, 2003 14:13
Откуда: Tiger@jabber.tushino.com. Погода,TV-прогр, фильмы и мн. др.: ftp:// http://10.80.192.167
Контактная информация:

Сообщение Tiger » Вт 14 мар, 2006 23:34

Каждое слово в отдельный элемент массива?
А зачем постить две темы?
viewtopic.php?t=28086
С уважением Tiger.

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Ср 15 мар, 2006 0:41

да форум видать настраивали, эта тема куда то пропала... Думал стерли ее по ошибке. Извиняюсь, ту тему можно снести...

Теперь по делу: да каждое слово в отдельный элемент массива

Аватара пользователя
Tiger
Модератор
Сообщения: 2781
Зарегистрирован: Чт 24 июл, 2003 14:13
Откуда: Tiger@jabber.tushino.com. Погода,TV-прогр, фильмы и мн. др.: ftp:// http://10.80.192.167
Контактная информация:

Сообщение Tiger » Ср 15 мар, 2006 0:48

c:=' ';
while not eoln do begin
oldc:=c;
read(c);
if(oldc<>' ')and(c=' ')then begin inc(i);arr[i]:='';
if c<>' ' then arr[i]:=arr[i]+c;
end;
readln;
Это для одной строки для двух так же, oldc и c это char, а arr это массив строк.
С уважением Tiger.

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Ср 15 мар, 2006 20:55

такс отлично. все гут осталось последнее...
Дано слово1, и потом ещё 2 строки слов
Надо выявить строку, в которой заданное слово встречается чаще. Помниться была ткая функция StrPos, но она подходит только для символов типа PChar... Есть ли какой нибудь аналог для string?

Аватара пользователя
Tiger
Модератор
Сообщения: 2781
Зарегистрирован: Чт 24 июл, 2003 14:13
Откуда: Tiger@jabber.tushino.com. Погода,TV-прогр, фильмы и мн. др.: ftp:// http://10.80.192.167
Контактная информация:

Сообщение Tiger » Ср 15 мар, 2006 22:42

А что тебе мешает выделять слова из каждой строки и сравнивать их с первым словом на равенство.
С уважением Tiger.

SERGant
Сообщения: 1003
Зарегистрирован: Вс 26 сен, 2004 22:04
Откуда: с планеты The Мля
Контактная информация:

Сообщение SERGant » Ср 15 мар, 2006 23:38

хз вера наверно, а точнее моя любовь к нестандартным подходам. Я напсиал но получилось коряво, хотел увидеть ещё какие нибудь варианты.

Катенька :)
Сообщения: 2
Зарегистрирован: Вт 20 ноя, 2007 21:16

Сообщение Катенька :) » Вт 20 ноя, 2007 21:25

Помогите мне, пожалуйста. Я абсолютный чайник по Паскалю. Мне очень нужна Ваша помощь. Не могу решить две задачи.
№1
Написать программу формирования двухмерного массива Т и вывода его на экран, используя процедуры ввода и вывода.
№2
Написать функцию, которая из двух целых чисел выбирает наименьшее число.
Заранее огромное спасибо.

Аватара пользователя
Tiger
Модератор
Сообщения: 2781
Зарегистрирован: Чт 24 июл, 2003 14:13
Откуда: Tiger@jabber.tushino.com. Погода,TV-прогр, фильмы и мн. др.: ftp:// http://10.80.192.167
Контактная информация:

Сообщение Tiger » Вт 20 ноя, 2007 22:14

Катенька \":)\" писал(а):Помогите мне, пожалуйста. Я абсолютный чайник по Паскалю. Мне очень нужна Ваша помощь. Не могу решить две задачи.
№1
Написать программу формирования двухмерного массива Т и вывода его на экран, используя процедуры ввода и вывода.
№2
Написать функцию, которая из двух целых чисел выбирает наименьшее число.
Заранее огромное спасибо.
Катенька нужно учится, а не гулать было весь семестр, а так помочь же конечно можно
#2

Код: Выделить всё

function min(x,y:integer):integer;
begin
  if x>y then min:=y else min:=x;
end;

#1

Код: Выделить всё

program massiv(input, output);
const N_MAX=100;M_MAX=100;
var T:array[1..N_MAX, 1..M_MAX] of integer;
    i, j, n, m : integer;
begin
  readln(n,m);
  for i:=1 to n do
    for j:=1 to m do
      read(T[i,j]);
  for i:=1 to n do begin
    for j:=1 to m do
      write(T[i,j]:5);
    writeln;
  end;
end.
С уважением Tiger.

Катенька :)
Сообщения: 2
Зарегистрирован: Вт 20 ноя, 2007 21:16

Сообщение Катенька :) » Ср 21 ноя, 2007 1:42

Спасибо за помощь. Мне, правда, даже неловко. Просто я болею часто и подолгу, иногда я не поспеваю за школьной программой. А информатика такой предмет: мелочь какую-нибудь пропустишь, не поймёшь, и дальше всё пойдёт по нарастающей... Помочь мне некому. Родители в компьютере не понимают, "продвинутых" друзей у меня нет. Так что приходится самой крутиться, без всякой помощи. Пока справлюсь... Я даже умудрилась прошлый год с отличием окончить.


Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость