Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Новички в программировании > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова - "Помогите", "Спасите", "Срочно"
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте >>>правила <<< и заново правильно создайте тему.
 
Опции темы
Старый 24.12.2010, 17:52   #21
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Дописано 24 12 2010
Цитата:
В массивы вводятся элементы двух невозрастаюших последовательностей Ai и Bj целых чисел, которые содержат 6 и 8 элементов соответственно. Необходимо вывести на экран общий список значений элементов этих последовательностей по их возрастанию без создания третьего массива.
Предлагаемое решение:
http://www.programmersforum.ru/showthread.php?t=129806
__________________
I'm learning to live...
Stilet вне форума  
Старый 14.01.2011, 23:10   #22
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Си. Пример сортировки пузырьком
Код:

// qweqwe.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdlib.h>
#include <math.h>
int _tmain(int argc, _TCHAR* argv[])
{
	//Упорядочить элементы массива по Возростанию элементов.
	const int n=5;
	int a[n];
	for(int i=0;i<n;i++){
			a[i]=rand()-rand();
			printf("%d\t",a[i]);
	};printf("\n");
// Сортир пузырьком
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if (a[i]<a[j]){
				int o=a[i];a[i]=a[j];a[j]=o;
			};
 		};
	};
//Вывод
	printf("\n");
	for(int i=0;i<n;i++){
			printf("%d\t",a[i]);
	};printf("\n");

	getchar();
	return 0;
}

__________________
I'm learning to live...
Stilet вне форума  
Старый 14.01.2011, 23:19   #23
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Проход по элементам над и под диагоналями
Код:

// Над и под диагоналями матрицы.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"


int _tmain(int argc, _TCHAR* argv[])
{
	const int n=5,m=5;
	int a[n][m];
	// Вводим матрицу
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			a[i][j]=i+j;printf("%d\t",a[i][j]);
		}printf("\n");
	}printf("\n");

	//Проход под главной диагональю
	for(int i=1;i<n;i++){
		for(int j=0;j<i;j++){
			//a[i][j] указывает на элемент ниже главной диагонали
		};
	};

	//Проход над главной диагональю
	for(int i=0;i<n;i++){
		for(int j=(i+1);j<m;j++){
			//a[i][j] указывает на элемент выше главной диагонали
		};
	};

	//Проход под Побочной диагональю
	for(int i=1;i<n;i++){
		for(int j=m;j>(m-i);j--){
			//a[i][j] указывает на элемент ниже побочной диагонали
		};
	};

	//Проход над Побочной диагональю
	for(int i=0;i<n;i++){
		for(int j=i;j<(m-i);j++){
			//a[i][j] указывает на элемент выше побочной диагонали
		};
	};

	return 0;
}

Собрано в VS2010Beta
__________________
I'm learning to live...
Stilet вне форума  
Старый 16.01.2011, 20:15   #24
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Шринковка массива - Удаление из него элементов, отвечающих некому условию:

Код:

// Уаплить из массива элементы по условию.cpp: определяет точку входа для консольного приложения.
//http://www.programmersforum.ru/showthread.php?p=711868#post711868

#include "stdafx.h"
#include <malloc.h>
#include<stdlib.h>

int *a;
int n=10;

bool Удалить(int i){
	// Например удалить все четные	return !(a[i]%2);
	// Или те которые встречаются более 2 раз
	int c=0;
	for(int k=0;k<n;k++) c+=(a[i]==a[k])?1:0;
	return (c>2);
}

int _tmain(int argc, _TCHAR* argv[])
{
	srand(1000);
	// Задаем массив
	a=(int*)malloc(n*sizeof(int));
	// Вводим массив
	for(int i=0;i<n;i++){
		a[i]=rand()%8;printf("%d\t",a[i]);
	} printf("\n");
	// Шринкуем массив
	int k=0;
	for(int i=0;i<n;i++){
		a[k]=a[i];
		k+=(Удалить(i))?0:1;
	} printf("\n");
	// Выводим шринкованный массив
	for(int i=0;i<k;i++){
		printf("%d\t",a[i]);
	} printf("\n");
	// Освобождаем массив
	free(a);
	getchar();
	return 0;
}

Собрано в VS2010Beta
__________________
I'm learning to live...
Stilet вне форума  
Старый 06.02.2011, 15:00   #25
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Ну матрицы матрицами а народ и списками иногда интересуется. (я чутка поправил оригинал, добавив сортировку и вывод спика с конца)

Пример работы с динамическим списком в С++

в прилагаемом файле с коментариями. Увы весь код сюда в пост не влезает.
Писано для С++. Для классического Си. придется менять cout на printf() и new на malloc();
Вложения
Тип файла: txt Список Динамический двусторонний - 2.txt (6.6 Кб, 62 просмотров)
__________________
I'm learning to live...

Последний раз редактировалось Stilet; 28.12.2013 в 19:10.
Stilet вне форума  
Старый 25.02.2011, 19:43   #26
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию

Метод бинарного поиска

Код:

program Project1;

{$APPTYPE CONSOLE}
         {$o-}
uses
  SysUtils;
var a:array[1..100] of integer;
    i:integer;

 function SelectIndexByBinary(Value:integer):integer;
 var c,b,i,stp:integer;
 begin
  b:=1;c:=100;Result:=-1;stp:=0;
  { Начинаем цикл пока разница между границами не будет равна 2 что
  скажет о том что искать больше нечего, т.е между граничными элементами
  уже ничего нет}
  while (c-b)>2 do begin
  {Это колво шагов для статистики}
    inc(stp);
    {Становимся посередине искомого подмассива}
    i:=b+(c-b) div 2;
    {если найден то выйти вернув номер найденого по порядку}
    if a[i]=Value then begin Result:=i; break;;end;
    {иначе сравним}
    if a[i]>Value then
     {Если искомое меньше центрального то сдвигаем верхнюю границу
     Считая что за центром искомого нет и быть не может}
     c:=i
    else
     {Иначе искомого нет слева от центра, тогда сдвигаем нижнюю границу}
     b:=i;
  end; writeln;writeln('Steps of Maya =',stp);
 end;

begin
{Наполняем или сортируем массив Не важно как}
 a[1]:=1;
 for i:=2 to 100 do begin
  a[i]:=random(10)+a[i-1];write(a[i]:5);
 end;
 writeln;
{Пробуем отискать бинарным поиском}
 write(SelectIndexByBinary(9));readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.

__________________
I'm learning to live...
Stilet вне форума  
Старый 22.05.2011, 19:43   #27
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,968
Репутация: 6787
По умолчанию


Си классический
Вращение, сдвиг, умножение матриц
Код:

#include "stdafx.h"
#include <malloc.h>
#include <stdlib.h>

//Описываем структуру матрицы
struct TMatrix{
	int **Array; //Тело матрицы
	int Rows;  //Кол-во строк
	int Columns; //Колонок
};

//Процедура создания матрицы по ссылке
void CreateMatrix(TMatrix &Matrix, int Rows, int Cols){
	//Выделяем память под строки
	Matrix.Array=(int**)malloc(sizeof(int)*Rows);
	//В цикле
	for(int i=0;i<Rows;i++){
		//Выделяем память под колонки каждой строки
		Matrix.Array[i]=(int*)malloc(sizeof(int)*Cols);
		//И наполняем их
		for(int j=0;j<Cols;j++){
			Matrix.Array[i][j]=i*10+j+1;//rand()/1000;
		}
	}
	//Запомнив размерность
	Matrix.Rows=Rows;
	Matrix.Columns=Cols;
}

//Печать мтарицы на экран
void WriteMatrix(TMatrix Matrix){
	for(int i=0;i<Matrix.Rows;i++){
		for(int j=0;j<Matrix.Columns;j++){
			printf("%5d",Matrix.Array[i][j]);
		} printf("\n");
	}printf("\n");
}

//Перемножение матриц
void MatrixMultiple(TMatrix MatrixA,TMatrix MatrixB,TMatrix &MatrixC){
	int Rows=MatrixA.Rows;
	int Cols=MatrixA.Columns;
	//Создается отдельная матрица, в которую будет сбрасываться результат умножения
	//элементов
	CreateMatrix(MatrixC,Rows,Cols);
	for(int i=0;i<Rows;i++){
		for(int j=0;j<Cols;j++){
			//В цикле элементы умножаются друг на друга
			MatrixC.Array[i][j]=MatrixA.Array[i][j]*MatrixB.Array[i][j];
		}
	}
}

//Освобождение матрицы (Не работает!)
void FreeMatrix(TMatrix &Matrix){
	
	//for(int i=1;i<=Matrix.Rows;i++)	free(Matrix.a[i]);
	free(Matrix.Array);
	Matrix.Columns=0; Matrix.Rows=0;
	
}

//Сдвиг (вращение) матрицы по горизонтали на N колонок
void ShiftHoriz(TMatrix &Matrix, int n){
	//Сдвиг циклический.
	n=(n>Matrix.Columns)?n%Matrix.Columns:n;
	//Создаем временный буффер для данных
	int* buf=(int*)malloc(sizeof(int)*n);
	for(int i=0;i<Matrix.Rows;i++){
			//Части строки меняем местами согласно кличеству сдвигаемых элементов
		   //черех вспомагательный буффер
			memcpy(buf,&Matrix.Array[i][0],sizeof(int)*n);
			memcpy(&Matrix.Array[i][0],&Matrix.Array[i][n],sizeof(int)*(Matrix.Columns-n));
			memcpy(&Matrix.Array[i][Matrix.Columns-n],buf,sizeof(int)*n);
	}
	delete buf;
}

//Сдвиг вертикально (вращение тоже)
void ShiftVert(TMatrix &Matrix, int n){
	n=(n>Matrix.Rows)?n%Matrix.Rows:n;
	int** buf=(int**)malloc(sizeof(int)*n);
	for(int i=0;i<n;i++){
		buf[i]=(int*)malloc(sizeof(int)*Matrix.Columns);
		memcpy(&buf[i],&Matrix.Array[i][0],sizeof(int)*Matrix.Columns);
	}
	for(int i=n,j=0;i<Matrix.Rows;i++,j++)	    memcpy(&Matrix.Array[j][0],&Matrix.Array[i][0],sizeof(int)*Matrix.Columns);
	for(int i=Matrix.Rows-n,j=0;i<Matrix.Rows;i++,j++)	memcpy(&Matrix.Array[i][0],&buf[j],sizeof(int)*Matrix.Columns);
	//for(int i=0;i<n;i++) delete buf[i]; 
	delete buf;
}

// Поворот матрицы
void RotateOn90(TMatrix &MatrixA,TMatrix &MatrixB){
	CreateMatrix(MatrixB,MatrixA.Columns,MatrixA.Rows);
	// и укажем координаты начального элемента
	// поскольку циклами проходиться будем по старой матрице
	int x=0,y=0,i;
	for(int j=0;j<MatrixA.Columns;j++){
		for(i=MatrixA.Rows-1;i>=0;i--){
			MatrixB.Array[y][x++]=MatrixA.Array[i][j];
		}; y++;x=0;
	}
}
int _tmain(int argc, _TCHAR* argv[])
{
	TMatrix a,b,c,d;
	CreateMatrix(a,6,3);WriteMatrix(a);	
	CreateMatrix(b,6,3);WriteMatrix(b);
	MatrixMultiple(a,b,c);WriteMatrix(c);

	ShiftHoriz(a,1); WriteMatrix(a);

	ShiftVert(a,1); WriteMatrix(a);
	RotateOn90(c,d); WriteMatrix(d);
	
	FreeMatrix(a);FreeMatrix(b);FreeMatrix(c);
	getchar();
	return 0;
}

VS2010Beta
__________________
I'm learning to live...

Последний раз редактировалось Stilet; 17.12.2015 в 23:45.
Stilet вне форума  
Старый 25.11.2011, 07:04   #28
Zer0
Участник клуба
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
Репутация: 336
По умолчанию XOR-связный список (для rpy3uH'a)

Основная реализация XOR-списка
Реализовано - добавление в конец списка, получение предыдущей/следующей пары элементов, удаление произвольного элемента, очистка списка, вывод списка

Код:

type
 TListData = integer;

 TXNode = ^TNode;
 TNode = record
  addr:longint;
  data:TListData;
 end;

 TXList = record
  XStart,XEnd:TXNode;
 end;

procedure AddToList( Data:TlistData; var List:TXList);
var t:TXNode;
begin
  if (List.XEnd=nil) then begin
    new(t);
    t^.data:=Data;
    T^.addr:=longint(nil) xor longint(nil);
    List.XStart:=t;
    List.XEnd:=t;
  end else begin
    new(t);
    t^.data:=Data;
    t^.addr:=longint(List.XEnd) xor longint(nil);
    List.XEnd^.addr:=(Longint(List.XEnd^.addr) xor Longint(nil)) xor Longint(t);
    List.XEnd:=t;
  end;
end;

procedure GetNextPair(var n1,n2:TXNode);
var t:TXNode;
begin
   t:=n2;
   n2:=Pointer(n2^.addr xor longint(n1));
   n1:=t;
end;

procedure GetPrevPair(var n1,n2:TXNode);
var t:TXNode;
begin
   t:=n1;
   n1:=Pointer(n1^.addr xor longint(n2));
   n2:=t;
end;

function DeleteFromList(Index:integer; var List:TXList):boolean;
var cn,t1,t2:TXNode; i:integer; a1,a2:longint;
begin
  t1:=nil;
  t2:=List.XStart;
  i:=1;
  while (t2<>nil) and (i<Index) do begin
    inc(i);
    GetNextPair(t1,t2);
  end;
  if t2=nil then DeleteFromList:=false else begin
    DeleteFromList:=true;
    cn:=t2;
    t2:=Pointer(longint(t1) xor cn^.addr);
    if (t1=nil) and (t2=nil) then begin
      List.XStart:=nil;
      List.XEnd:=nil;
    end else
    if (t1=nil) then begin
      List.XStart:=t2;
      t2^.addr:=(Longint(cn) xor t2^.addr) xor Longint(nil);
    end else
    if (t2=nil) then begin
      List.XEnd:=t1;
      t1^.addr:=(Longint(cn) xor t1^.addr) xor Longint(nil);
    end else begin
      a2:=(Longint(cn) xor t2^.addr) xor Longint(t1);
      a1:=(Longint(cn) xor t1^.addr) xor Longint(t2);
      t1^.addr:=a1;      t2^.addr:=a2;
    end;
    dispose(cn);
  end;
end;

procedure ClearList(var List:TXList);
var t2,t:TXNode; t1:longint;
begin
 t1:=longint(nil);
 t2:=List.XStart;
 while t2<>nil do begin
  t:=t2;
  t2:=Pointer(longint(t2^.addr) xor t1);
  t1:=longint(t);
  dispose(t);
 end;
 List.XStart:=nil;
 List.XEnd:=nil;
end;

procedure PrintList(List:TXList);
var t1,t2:TXNode;
begin
  t1:=nil;
  t2:=List.XStart;
  while t2<>nil do begin
    write (t2^.data,' ');
    GetNextPair(t1,t2);
  end;
  writeln;
end;

var L:TXList; i,t:integer;

begin
  randomize();
  writeln ('Adding numbers: ');
  for i:=1 to 10 do begin
    t:=random(100);
    write(t,' ');
    AddToList(t,l);
  end;
  writeln;
  writeln ('List: ');
  PrintList(L);
  while L.XStart<>L.XEnd do begin
  t:=random(10)+1;
  if DeleteFromList(t,L) then
  writeln ('Delete ',t,' elem')
  else writeln ('Out of index! (',t,')');
  writeln ('List after delete: ');
  PrintList(L);
  end;
  ClearList(L);
  readln;
end.

__________________
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума  
Старый 15.01.2012, 14:53   #29
Вадим Мошев
гигаМодератор :)
Заслуженный модератор
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес:
Сообщений: 7,052
Репутация: 3559
По умолчанию Работа с массивами. Теория. (для rpy3uH'a)

ИМХО, для того, чтобы лучше понять работу с матрицами (как двумерными массивами), сначала надо освоить работу над одномерными массивами, поскольку такой тип данных требует меньше времени на разработку обрабатывающих их алгоритмов, а чисто психологически, вызывает меньше страха у начинающих. При переходе к массивам с бОльшим числом измерений все принципы работы сохраняются.

Циклический сдвиг элементов одномерного массива.

Циклическим сдвигом элементов одномерного массива называется такое изменение порядка следования элементов, при котором каждый его элемент становится на позицию элемента, предшествующего/следующего за текущим, а первый/последний элемент массива становится последним/первым. Например, если речь идёт о циклическом сдвиге впёрёд, то определение сдвига принимает следующий вид: Циклическим сдвигом вперёд элементов одномерного массива называется такое изменение порядка следования элементов, при котором каждый его элемент становится на позицию элемента, следующего за текущим, а последний элемент массива становится первым.

Всё это выглядит следующим образом. Если исходный массив имеет вид:
Код:

1 2 3 4 5 6 7 8 9 0

,
То массив, над которым была выполнена операция циклического сдвига вперёд, будет иметь вид:
Код:

0 1 2 3 4 5 6 7 8 9

Идея такова (циклический сдвиг вперёд).
1. Запоминаем первый элемент массива в некоторой буферной переменной.
2. Начиная со второго по счёту элемента массива, для каждого элемента массива производим обмен значениями буферной переменной и текущим элементом массива.
3. Заменяем первый элемент массива на значение буферной переменной.

Реализация на Pascal.

Код:

// 1.Запоминаем первый элемент массива в некоторой буферной переменной.
      buf:=a[1];

   {2.	Начиная со второго по счёту элемента массива, для каждого
    элемента массива производим обмен значениями буферной переменной
    и текущим элементом массива}
      for i:=2 to 10 do
                      begin
                        t:=A[i];
                        A[i]:=buf;
                        buf:=t;
                      end;

   // 3.	Заменяем первый элемент массива на значение буферной переменной
       a[1]:=buf;

Циклический сдвиг вперёд строк/столбцов двумерного массива.

В этом случае двумерный массив удобно представить как ОДНОМЕРНЫЙ массив, элементами которого являются уже не числа, а ОДНОМЕРНЫЕ МАССИВЫ, СОСТОЯЩИЕ ИЗ ЭТИХ ЧИСЕЛ.

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

Итак, реализация циклического сдвига вперёд столбцов матрицы.

Код:

// 1.Запоминаем первый элемент массива в некоторой буферной переменной
      for i:=1 to N do
      			 Buf[i]:=A[i, 1];
                                        
                                        
{2.Начиная со второго по счёту элемента массива, для каждого
    элемента массива производим обмен значениями буферной переменной
    и текущим элементом массива}

      for j:=2 to M do
                       begin
                         for i:=1 to N do
                                         t[i]:=A[i, j];

                         For i:=1 to N do
                                        A[i, j]:=buf[i];

                         For i:=1 to N do
                                        buf[i]:=t[i];

                       end;
                                          
// 3.	Заменяем первый элемент массива на значение буферной переменной

      for i:=1 to N do
      		 A[i, 1]:=buf[i];

Вадим Мошев вне форума  
Старый 15.01.2012, 14:57   #30
Вадим Мошев
гигаМодератор :)
Заслуженный модератор
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес:
Сообщений: 7,052
Репутация: 3559
По умолчанию

Перемешивание элементов массива случайным образом.

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

Я предлагаю такое решение.
Сначала следует убедиться, что в массиве содержится более одного элемента, иначе его бессмысленно перемешивать.
Далее стоит проверить, что в массиве более двух элементов. Если в массиве ровно два элемента, то сгенерировать случайное действительное число из диапазона (0; 1), и если это число больше, чем 0.5, то обменять эти два элемента массива значениями.
Если же в массиве содержится более двух элементов, то каждый элемент массива переставляем местами с другим элементом массива, индекс которого равен случайному числу из диапазона индексирования элементов массива (если элементы массива пронумерованы от 1 по N, то диапазон индексирования представляет собой отрезок [1; N]) и в то же время не совпадает с индексом текущего элемента массива.

Реализация на Pascal:

Код:


{стоит проверить, что в массиве более двух элементов.
 Если в массиве ровно два элемента, то сгенерировать
 случайное действительное число из диапазона (0; 1),
 и если это число больше, чем 0.5, то обменять
 эти два элемента массива значениями.}

 if N = 2 then
                if Random > 0.5
                           then
                             begin
                               tmp:=Question[0];
                               Question[0]:=Question[1];
                               Question[1]:=tmp;
 
                             end;  
  
{Если же в массиве содержится более двух элементов,
 то каждый элемент массива переставляем местами с другим элементом массива,
 индекс которого равен случайному числу
 из диапазона индексирования элементов массива
 (если элементы массива пронумерованы от 1 по N, то диапазон индексирования
 представляет собой отрезок [1; N])
 и в то же время не совпадает с индексом текущего элемента массива.}  
  
  if N > 2 then
                 for j:=0 to N do
                                 begin
                                   repeat                                         
                                     k:=Random(N);                                        
                                   until k <> j;                                         

                                   tmp:=Question[j];
                                   Question[j]:=Question[k];
                                   Question[k]:=tmp;
                                                                                                                   
                        	end;

Напоследок скажу, что весь алгоритм можно перенести и двумерные и «болеемерные» массивы, а также выйти за рамки работы с массивами и применить алгоритм перемешивания, например, к динамическим спискам.

Последний раз редактировалось Вадим Мошев; 15.01.2012 в 15:06.
Вадим Мошев вне форума  
Закрытая тема



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Теория вероятности. Решить 2 задачи Worldqwerty Помощь студентам 2 14.01.2013 14:52
Типичные задачи на С++ Heming Помощь студентам 3 15.10.2012 11:13
Теория языков программирования и проектирование компиляторов (задачи) Onni Помощь студентам 0 03.06.2012 21:18
Теория информации + теория её передачи. vedro-compota Общие вопросы по программированию, компьютерным наукам 4 23.10.2010 10:06
решение инженерных задач современными средствами компьютерной техники и типичные задачи автоматизированны Дініс Свободное общение 1 12.09.2009 00:02




11:21.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru