|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.04.2014, 14:33 | #1 |
Новичок
Джуниор
Регистрация: 10.04.2014
Сообщений: 7
|
Написать программу, в которой два потока заполняют таблицу умножения
Написать программу, в которой два потока заполняют таблицу умножения (для чисел от 1 до 9). При вычислении использовать только операции сложения. Сумму накапливать в самом массиве. Первый поток заполняет все нечетные строки, второй – все четные. Использовать глобальную переменную для хранения текущего индекса в строке. Использовать семафоры.
|
10.04.2014, 14:44 | #2 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
или мьютексы, или критические секции, или какие нибудь свои объекты синхронизации. Какие наработки?
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
10.04.2014, 14:47 | #3 |
Новичок
Джуниор
Регистрация: 10.04.2014
Сообщений: 7
|
[CODE]unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, TeEngine, Series, TeeProcs, Chart, Buttons; type TForm1 = class(TForm) RadioGroup1: TRadioGroup; RadioGroup2: TRadioGroup; btn1: TButton; procedure btn1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Matrix : array [1..9, 1.. 9] of integer; Handles : array [0..1] of THandle; ThreadID1, ThreadID2 : Cardinal; i : integer; hSemaphore : THandle = 0; implementation {$R *.dfm} procedure FirstHandle; var j, k, Sum : integer; WaitReturn : DWORD; begin for i := 1 to 9 do begin WaitReturn := WaitForSingleObject(hSemaphore, INFINITE); if WaitReturn = WAIT_OBJECT_0 then begin if i mod 2 <> 0 then for j := 1 to 9 do begin Sum := 0; for k := 1 to j do begin Sum := Sum + i; Sleep(1); Matrix[i, j] := Sum; end; write(Matrix[i,j] : 3); end; writeln; end; ReleaseSemaphore(hSemaphore, 1, nil); end; end; procedure SecondHandle; var j, k, Sum : integer; WaitReturn : DWORD; begin for i := 1 to 9 do begin WaitReturn := WaitForSingleObject(hSemaphore, INFINITE); if WaitReturn = WAIT_OBJECT_0 then begin if i mod 2 = 0 then for j := 1 to 9 do begin Sum := 0; for k := 1 to j do begin Sum := Sum + i; Sleep(1); Matrix[i, j] := Sum; end; write(Matrix[i,j] : 3); end; writeln; end; ReleaseSemaphore(hSemaphore, 1, nil); end; end; procedure TForm1.btn1Click(Sender: TObject); var i, j : integer; Reason : DWORD; begin hSemaphore := CreateSemaphore(nil, 1, 1, nil); Handles[0] := CreateThread(nil, 0, @FirstHandle, nil, CREATE_SUSPENDED, ThreadID1); Handles[1] := CreateThread(nil, 0, @SecondHandle, nil, CREATE_SUSPENDED, ThreadID2); case RadioGroup1.ItemIndex of 0 : SetThreadPriority(Handles[0], Thread_Priority_Time_Critical); 1 : SetThreadPriority(Handles[0], Thread_Priority_Highest); 2 : SetThreadPriority(Handles[0], Thread_Priority_Above_Normal); 3 : SetThreadPriority(Handles[0], Thread_Priority_Normal); 4 : SetThreadPriority(Handles[0], Thread_Priority_Below_Normal); 5 : SetThreadPriority(Handles[0], Thread_Priority_Idle); end; case RadioGroup2.ItemIndex of 0 : SetThreadPriority(Handles[1], Thread_Priority_Time_Critical); 1 : SetThreadPriority(Handles[1], Thread_Priority_Highest); 2 : SetThreadPriority(Handles[1], Thread_Priority_Above_Normal); 3 : SetThreadPriority(Handles[1]%2 Последний раз редактировалось Stilet; 11.04.2014 в 20:57. |
10.04.2014, 14:51 | #4 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Почему не работает? Где компилятор или отладчик показывает ошибку?
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
10.04.2014, 14:53 | #5 |
Новичок
Джуниор
Регистрация: 10.04.2014
Сообщений: 7
|
в процедуре procedure FirstHandle;
строка write(Matrix[i,j] : 3); |
10.04.2014, 15:14 | #6 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Что такое процедуры write и writeln?
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
10.04.2014, 15:18 | #7 | |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Конечно не работает.
http://www.programmersforum.ru/showthread.php?t=181606 Цитата:
Код:
|
|
10.04.2014, 15:53 | #8 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Видимо у ТС пропал интерес к теме, все так сложно и не работает. Не работает из за
write ,writeln и глобальной переменной i.
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
11.04.2014, 19:25 | #9 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Помогайте, друзья
Вариант 1 Код:
|
11.04.2014, 19:26 | #10 |
Тот ещё
Старожил
Регистрация: 14.11.2007
Сообщений: 2,242
|
Вариант 2
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Написать программу для Паскаль 9 класс: составить программу которая печатает таблицу умножения и сложения натуральных чисел | goodula | Помощь студентам | 0 | 23.01.2014 17:39 |
Написать программу,которая выводит таблицу умножения например на 7. | _Алексей_ | Помощь студентам | 1 | 13.06.2012 16:16 |
Написать программу, в ходе выполнения которой... | AzaroffV | Фриланс | 7 | 21.01.2011 15:02 |
17 Составить программу, которая печатает таблицу умножения и сложения натуральных чисел в шестнадцатеричн | OTLi4HO | Общие вопросы C/C++ | 1 | 16.01.2009 13:59 |
В среде Delphi составить программу (процесс), который паралельно запускает два потока (нити) | metamfetamin | Помощь студентам | 9 | 06.11.2007 15:26 |