Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > Технологии > Помощь студентам
Регистрация

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

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

Методы работы с Экзелем:
Код:


procedure TForm1.ButtonExcellClick(Sender: TObject);
begin
//Если удалось открыть Экзель, создать книгу, и получить ее лист
 if OpenExcell and OpenBook and OpenSheet then begin
//Наполним его, вызвав процедуру наполнения
  FillExcell;
//И покажем на экране
  Excell.Visible:=True;
 end else begin
//Иначе выведем сообщение об ошибке
   ShowMessage(Error);
 end;
end;


procedure TForm1.FillExcell;
var j,i:integer;  Cell:OleVariant;
begin
 with DBGrid1.DataSource.DataSet do begin
//Сначала сделаем шапку колонок
   for i := 0 to Fields.Count-1 do  begin
    Cell:=Sheet.cells[1,i+1];
//Запишем имена колонок в ячейки первой строки
    Cell:=Fields[i].FullName;
//И разукрасим
    Cell.Interior.ColorIndex:=3;
   end;

//Перескочим на первую запись в наборе (В гриде)
   first;
   j:=2;
//И пройдя до конца по нему
   while not eof  do begin
//Наполним ячейки Экзела данными из ДатаСета, с которым связан Открытый Грид
    for i := 0 to Fields.Count-1 do
     Sheet.cells[j,i+1]:=Fields[i].AsString;
     inc(j);
    next;
   end;
 end;
end;

function TForm1.OpenBook: Boolean;
begin
//Попытаемся создать книгу в Экзеле
 Result:=true; Error:='';
 Book:=Excell.Workbooks.Add();
 if VarIsClear(Book) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Книги: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

function TForm1.OpenExcell: Boolean;
begin
 Result:=true; Error:='';
//Попытаемся открыть Экзел
 Excell:=CreateOleObject('Excel.Application');
 if VarIsClear(Excell) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Экзеля: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

function TForm1.OpenSheet: Boolean;
begin
 Result:=true; Error:='';
//Попытаемся получить первый лист в открытой книге
 Sheet:=Book.worksheets[1];
 if VarIsClear(Sheet) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Страницы: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

__________________
I'm learning to live...

Последний раз редактировалось Stilet; 23.10.2015 в 19:03.
Stilet вне форума  
Старый 08.06.2015, 17:37   #42
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

Методы работы с Вордом:
Код:

procedure TForm1.ButtonMSWordClick(Sender: TObject);
begin
//Если удалось открыть Ворд, создать документ и таблицу
 if OpenWord and OpenWordDoc and CreateWordTable then begin
//Наполним ее
  FillWord;
//И покажем на экране
  MSWord.Visible:=True;
 end else begin
//Иначе выведем сообщение об ошибке
   ShowMessage(Error);
 end;
end;

function TForm1.CreateWordTable: Boolean;
begin
 Result:=true;
//Создадим таблицу в Ворде
 with DBGrid1.DataSource.DataSet do
   WordTable:=WordDoc.Tables.Add(WordDoc.Range
    ,RecordCount //Указав кол-во строк
    ,FieldCount   //И колонок заранее
   );
//Взяв их из DBGrid (а фактически из открытой базы данных)
end;



//Наполнение В Ворде
procedure TForm1.FillWord;
var j,i:integer;  Cell:OleVariant;
begin
 with DBGrid1.DataSource.DataSet do begin
   for i := 0 to Fields.Count-1 do  begin
//Сначала сделаем шапку колонок и разукрасим их
    Cell:=WordTable.cell(1,i+1).range;
    Cell.Text:=Fields[i].FullName;
    Cell.ParagraphFormat.Alignment :=1;
    Cell.Font.Bold := true;
   end;

//Перескочим на первую запись в наборе (В гриде)
   first;
   j:=2;
//И пройдя до конца по нему
   while not eof  do begin
    for i := 0 to Fields.Count-1 do
//Наполним ячейки Экзела данными из ДатаСета, с которым связан Открытый Грид
     WordTable.cell(j,i+1).range.Text:=Fields[i].AsString;
     inc(j);
    next;
   end;
 end;
end;


function TForm1.OpenWord: Boolean;
begin
 Result:=true; Error:='';
//Попытаемся открыть Ворд
 MSWord:=CreateOleObject('Word.Application');
 if VarIsClear(MSWord) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Ворда: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

function TForm1.OpenWordDoc: Boolean;
begin
 Result:=true; Error:='';
//Попытаемся создать документ в открытом Ворде
 WordDoc:=MSWord.Documents.Add();
 if VarIsClear(WordDoc) then begin
 //Если неудачно - оставим сообщение с ошибкой, чтоб его вывести на экран
  Error:=('Ошибка создания Документа: '+SysErrorMessage(GetLastError));
  Result:=false;
 end;
end;

Любителям копипасте и школоте: Да, да, вы угадали. Можете код из трех сообщений копипастить в тупую. Поздравляю. Вам вдумываться в него не обязательно.
Всем остальным - рекомендую изучить и разобраться.
__________________
I'm learning to live...
Stilet вне форума  
Старый 14.09.2015, 22:13   #43
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию

Вывод массива змейкой (формула)
По мотивам http://www.programmersforum.ru/showt...40#post1534240
Автор BDA.
Паскаль (любой)
Код:

program Project1;
const
  n = 10;
var
  i, j, k: integer;
begin
  for i := 0 to n - 1 do
  begin
    for j := 0 to n - 1 do
    begin
      k := i + j;
      write(1 + k * (k + 1) div 2 - ord(k > n) * (k - n) * (k - n + 1) +
            (k mod 2) * j + ((k + 1) mod 2) * i - ord(k >= n) * (k - n + 1):5);
    end;
    writeln;
  end;
  writeln;
  readln;
end.

Си (классика)
Код:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i, j, n = 5, k, v;
    for (i = 0; i < n; ++i) {
        for (j = 0; j < n; ++j) {
            k = i + j;
            v = 1 + k * (k + 1) / 2 - (k > n) * (k - n) * (k - n + 1) +
                (k % 2) * j + ((k + 1) % 2) * i - (k >= n) * (k - n + 1);
            printf("%5d", v);
        };
        printf("\n");
    };
    getchar();
    return 0;
}

Для С++ нужно заменить:
printf("%5d",v); на cout.width(5); cout<<v;
printf("\n"); на cout<<endl;
getchar(); на cin.get();
__________________
I'm learning to live...

Последний раз редактировалось BDA; 14.09.2015 в 22:24.
Stilet вне форума  
Старый 20.09.2015, 20:13   #44
Stilet
Белик Виталий :)
Профессионал
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Адрес: Украина, Донецкая область, г. Краматорск
Сообщений: 57,842
Репутация: 6832
По умолчанию Шифрование. Crypto API

Шифрование стоки. Crypto API
Delphi/Free Pascal

Используется модуль jwawincrypt вместо wincrypt, который признан неудачным, но может быть все же использован.

Код:

program project1;
uses sysutils,windows,jwawincrypt;

Function CryptDecript(aStr,Password:AnsiString;Decrypt:Boolean):AnsiString;
var b:Boolean;
  hProv: HCRYPTPROV; AProvType,AAlgHash,AAlgKey:DWORD;
   mhash:HCRYPTHASH;  key: HCRYPTKEY;  lBufLen, ABufferSize:Cardinal;
begin


      AAlgHash:=CALG_MD5; //Алгоритм для создания Хеша
      AAlgKey:=CALG_RC4;  //Алгоритм для ключа
      AProvType:=PROV_RSA_FULL; //Тип провайдера, который будет шифровать

      //Активируем провайдер.
      if not CryptAcquireContext(hProv, nil, nil, AProvType, CRYPT_VERIFYCONTEXT) then begin
       Writeln('CryptAcquireContext error: '+SysErrorMessage(GetLastOSError));
      end else
      //Создаем хеш
		  if CryptCreateHash(hProv, AAlgHash, 0, 0, mhash) then begin
        //Хешируем пароль
  		  if CryptHashData(mhash, @Password[1], length(Password), 0) then begin
         //Создаем на основе хеша и алгоритма ключ для шифрования
         if CryptDeriveKey(hProv, AAlgKey, mhash, 0, key) then begin
          ABufferSize:=Length(aStr);
          lBufLen:=ABufferSize;
          //Готовим результирующую перемену, которая будет содержать шифровку или расшифровку
          Result:=aStr;
          if Decrypt then begin  //Шифруем данные
           b:=CryptDecrypt(key, 0, true, 0, PByte(@Result[1]),lBufLen)
          end else begin //Или расшифровываем
           b:=CryptEncrypt(key, 0, true, 0, PByte(@Result[1]),lBufLen, ABufferSize);
					end;

          //Далее вывод ошибок, если они возникли
    		  if not b then begin
    		   Writeln('CryptEncrypt error: '+SysErrorMessage(GetLastOSError));
    		  end;

 	  		end else begin
    	   Writeln('CryptDeriveKey error: '+SysErrorMessage(GetLastOSError));
    	  end;

				end else begin
  		   Writeln('CryptHashData error: '+SysErrorMessage(GetLastOSError));
  		  end;
		  end else begin
		   Writeln('CryptCreateHash error: '+SysErrorMessage(GetLastOSError));
		  end;
      //Освобождаем криптопровайдер
      CryptReleaseContext(hProv, 0);
end;

var pass,s,sIn,sOut:AnsiString;
begin
  //Строка для шифрования и пароль
  s:='Hello World'; pass:='Password';

  //Шифруем строку
  sOut:=CryptDecript(s,pass,false);
    writeln('Crypt = ',sOut);
  //Расшифровываем строку
  sIn:=CryptDecript(sOut,pass,true);
    writeln('DeCrypt = ',sIn);
  readln;
end.

C#
Пока пример без пароля:
Код:

using System;
using System;
using System.Security.Cryptography;//Сборка криптографиии


namespace CryptoAPI
{
	class MainClass
	{
		public static void Main (string[] args)
		{
			/* С установкой пароля. Но увы не работает как надо, поэтому в примере закомментировано
			string Pass = "Password";
			//Создаем строку безопасности
			System.Security.SecureString ss = new System.Security.SecureString();
			//Заносим в нее пароль посимвольно
			foreach (char c in Pass)
				ss.AppendChar (c);
			//Устанавливаем параметры для криптопровайдера
			CspParameters csp = new CspParameters();
				csp.KeyPassword = ss;
				csp.Flags = CspProviderFlags.UseUserProtectedKey;
			*/

			//Объявляем криптопровайдер RSA
			RSACryptoServiceProvider rs = new RSACryptoServiceProvider (/*csp*/);

			//Задаем строку для шифрования
			string s = "Hello World";
			System.Text.ASCIIEncoding enc = new System.Text.ASCIIEncoding ();

			//Шифруем в массив байт
			byte[] bCrypt=rs.Encrypt (enc.GetBytes (s),false);
			//Расшифровываем в другой массив
			byte[] bEncrypt = rs.Decrypt(bCrypt,false);

			//Выводим и то и другое
			Console.WriteLine ("Source = {0}\n\nCrypted = {1}\n\nDeCrypted = {2}"
				,s
				,enc.GetString (bCrypt)
				,enc.GetString (bEncrypt));
			Console.ReadKey ();
		}
	}
}

__________________
I'm learning to live...

Последний раз редактировалось Stilet; 20.09.2015 в 21:15.
Stilet вне форума  
Старый 05.06.2018, 17:31   #45
Вадим Мошев
гигаМодератор :)
Заслуженный модератор
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес: Адрес:
Сообщений: 7,798
Репутация: 3781
По умолчанию

Если необходимо дописать в тему "теорию и методы", обращайтесь к любому модератору с просьбой дополнить тему новым материалом.
Вадим Мошев на форуме  
Закрытая тема

Опции темы

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

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


01:56.


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

RusProfile.ru


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