Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

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

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 в 18:03.
Stilet вне форума
Старый 08.06.2015, 16:37   #42
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Методы работы с Вордом:
Код:
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, 21:13   #43
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вывод массива змейкой (формула)
По мотивам 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 в 21:24.
Stilet вне форума
Старый 20.09.2015, 19:13   #44
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию Шифрование. 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 в 20:15.
Stilet вне форума
Старый 05.06.2018, 16:31   #45
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Теория вероятности. Решить 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