Студентам с лабораторными сюда (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 20 Jun 2007.

Thread Status:
Not open for further replies.
  1. advokat.holy

    advokat.holy New Member

    Joined:
    5 Mar 2008
    Messages:
    11
    Likes Received:
    1
    Reputations:
    0
    Помогите плз! Кто знает JavaScript?????
    Я его ваще не знаю.

    Есть хтмл форма, там два поля
    Имя и Фамилия
    и есть кнопка,
    надо что б когда юзер вводит в поля данные и нажимает на кнопку, ему
    выводился алерт типа ::: Привет, Нейм, твоя фамилия Фамилия.
    и на форме еще есть чек-бокс, если его чекнуть то в алерте все буквы должны быть
    большие.

    <form action="javascript: ShowAlert();" method="post" name="itsme" onSumbit="return ShowAlert()">
    <br />Нейм:<br />
    <input type="text" name="name" />
    <br />ФИО:<br />
    <input type="text" name="fio" />
    <br />Чекбокс:<br />
    <input type="checkbox" name="chb1" value="yes"/> Зробити прописними<br />
    <br /><input type="submit" value="ВпереД !" />
    </form>
     
  2. velvetdust

    velvetdust New Member

    Joined:
    8 Nov 2008
    Messages:
    7
    Likes Received:
    0
    Reputations:
    -5
    Есть такое задание, по нему написал программу:

    Составить программу для нахождения одинаковых букв в словах Х и У равной длины, стоящих на одних и тех же местах.

    Code:
    #include <stdio.h>
    #include <conio.h>
    
    main()
    {
    char word1[]="hello";
    char word2[]="hailo";
    char *i1,*i2;
    int i,m=0;
    printf("\n\n");
    m=sizeof(word1);
    if(sizeof(word2)>m)
    	m=sizeof(word2);
    i1=word1;
    i2=word2;
    for(i=0;i<m-1;i++)
    {
    	if(*(i1+i)==*(i2+i))
    {
    		printf("%d-letter is \"%c\"\n",i+1,*(i1+i));
    	}
    }
    return 0;
    }
    В итоге программа выводит:
    Code:
    1 - letter is "h"
    4 - letter is "l"
    5 - letter is "o"
    
    1 - letter is "h"
    4 - letter is "l"
    5 - letter is "o"
    Вопрос такой - как изменить программу так, чтобы вводилось в строку не по одному слову, а по несколько, и сначала, попарно проверялась бы их длина, и, если бы она была одинаковой, выполнялась бы эта программа. Поясню:

    char word1[]="magazin", "good", "week", "affect";
    char word2[]="magasin", "god", "weak", "effect";

    Проверяться должны 1,3 и 4 пары слов. Заранее, спасибо большое!
     
  3. kyoko

    kyoko Member

    Joined:
    17 Aug 2008
    Messages:
    137
    Likes Received:
    74
    Reputations:
    9
    помогите пожалуйста! тут не сложно. с меня ++++ плиз, выручите

    Написать программу, которая бы перекодировала текстовый файл из кодировки MS-DOS в кодировку MS Windows. на С++
     
  4. morris

    morris New Member

    Joined:
    28 Dec 2008
    Messages:
    3
    Likes Received:
    1
    Reputations:
    0
    velvetdust, вот. изменил немного.
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    
    main()
    {
    	char* word1[]={"magazin", "good", "week", "affect"};
    	char* word2[]={"magasin", "god", "weak", "effect"};
    	int len=sizeof(word1)/sizeof(char*);
    	for(int j=0;j<len;j++) 
    	{
    		char *i1,*i2;
    		printf("\n\n");
    
    		//ïðîâåðêà
    		if (strlen(word1[j])>strlen(word2[j]) || strlen(word1[j])<strlen(word2[j]))
    			continue;
    
    		int m=strlen(word1[j]);
    		i1=word1[j];
    		i2=word2[j];
    		for(int i=0;i<m;i++)
    		{
    			if(*(i1+i)==*(i2+i))
    			{
    				printf("%d-letter is \"%c\"\n",i+1,*(i1+i));
    			}
    		}
    			
    	}
    
    return 0;
    }
    
     
    #1044 morris, 17 Jan 2009
    Last edited: 17 Jan 2009
    1 person likes this.
  5. Zedobat

    Zedobat Elder - Старейшина

    Joined:
    24 Jul 2007
    Messages:
    145
    Likes Received:
    34
    Reputations:
    10
    Pascal
    Есть массив А (прим.: 3 4 5 3 2 1 5 2), нужно составить массив В в котором будут все элементы из массива А без повторений (т.е.: 3 4 5 2 1)
     
  6. Moldman

    Moldman Elder - Старейшина

    Joined:
    12 Jun 2007
    Messages:
    91
    Likes Received:
    35
    Reputations:
    -5
    Turbo Pascal

    Turbo Pascal

    1.Напишите программу, которая отображает делители одного номера и их число

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

    3.Известно что все натуральные числа больше чем 7 могут быть отображены в виде суммы чисел 3 и 5. (8=3+5, 9=3+3+3, 10=5+5...) Напишите программу с помощью которой можно узнать сколько 3 и сколько 5 нужно чтобы отображать любое число >7.Результаты нужно записать в файл.

    4.Дано число N. Напишите программу с помощью которой получим число К,в которой будут отсутствовать цифры 0 и 5 из N.
    Например если N=45207502 то K=4272


    + за правильный ответ
    :)
     
    #1046 Moldman, 24 Jan 2009
    Last edited: 24 Jan 2009
  7. Moldman

    Moldman Elder - Старейшина

    Joined:
    12 Jun 2007
    Messages:
    91
    Likes Received:
    35
    Reputations:
    -5
    ДА,именно так :)

    1.Напишите программу, которая отображает делители одного номера и их число
    например:
    номер 20
    делители 2,4,5,10
    их число 4

    или
    номер 18
    делители 2,3,6,9
    их число 4


    В первом варианте была ошибка так как задачи перевел с другого языка
     
  8. _evgeniy_

    _evgeniy_ Member

    Joined:
    7 Sep 2008
    Messages:
    25
    Likes Received:
    11
    Reputations:
    5
    Code:
    #include "stdafx.h"
    #include <math.h>
    #include <conio.h>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
       double c=0,s=0;
       cout << "vvedite chislo:";
       cin >> c;
       cout << c << endl;
    
       cout << "deliteli:";
       for(int i=2; i<c; i++)
       {
    	   if(fmod(c,i) == 0)
    	   {
    			cout << i << " ";
    			s++;
    	   }
       }
       cout << endl << "CHislo:" << s << endl;
    
    
       system ("pause");
       return 0;
    }
     
    1 person likes this.
  9. Moldman

    Moldman Elder - Старейшина

    Joined:
    12 Jun 2007
    Messages:
    91
    Likes Received:
    35
    Reputations:
    -5
    Вот моя простая версия на 3 задачу
    Code:
    Program task3;
    var 
    	a,b,c:byte;
    begin
    	write('N=');
    	readln(c);
    		for a:=0 to c do
    			for b:=0 to c do
    				if 3*a+5*b = c then
    				begin
    					if a <> 0 then Write(a,' Troek, ');
    					if b <> 0 then Write(b,' Pyaterok, ');
    					Writeln(' = ',c)
    				end;
    end.			
    
     
  10. 12_afer

    12_afer New Member

    Joined:
    29 Aug 2007
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Помогите пожалуйста завтра сдавать

    нужно закоментить каждую строку проги
    или по другому, вообщем препод сказал объяснить прогу!
    и еще если он например покажет на определенное место в исходняке я должен объяснить!!!
    помогите пожалуйста!!!!!!!


    Code:
    program test_variant_14;
    uses crt, windos;
    type
           rec=record
           vopros:string;
    	 tip:byte;
           otvet:array [1..4] of string[100];
           ball:integer;
           end;
    
           st=record
           	fam:string;
            gruppa:integer;
           	ocenka:byte;
           end;
    
           
    var
    	zadanija:file of rec;
    	students:file of st;
    	stud:st;
    	z:rec;
    	pass:string;
    	key:char;
    	k:byte;
         
    procedure menu_pr; forward;
    procedure regim2; forward;
    procedure test; forward;
    procedure password; forward;
    
    
    
    procedure menu;
    begin
    	repeat
          clrscr;
          writeln('programma testirovanie studentov ');
          writeln('  1. Prepod');
          writeln('  2. Student');
          writeln('  3. Vyhod');
    	key:=readkey;
    	until (ord(key)>=49) and (ord(key)<=51);
          case key of
          '1': password;
          '2': regim2;
          '3': halt(1);
          end;
    end;
    
    
    procedure prosmotr;
    var
    a,size:longint;
    temp:file of rec;
    i:byte;
    
    begin
         assign(zadanija,'zadanija');
         {$I-}
         reset(zadanija);
         close(zadanija);
         {$I+}
         if IOResult <>0 then menu_pr;
         reset(zadanija);
         begin
    	   while not eof(zadanija) do
    	   begin
    	    read(zadanija,z);
              clrscr;
              writeln('1-udalenie voprosa, 2-redaktirovanie');
              writeln('najmi lubuju klavishu dla sledujushego voprosa');
              writeln(z.vopros);
              writeln('Pravilnii otvet: ',z.otvet[1]);
              if z.tip<>2 then
    	    for i:=2 to 4 do writeln('otvet № ',i,' ',z.otvet[i]);
              writeln('ball: ',z.ball);
              key:=readkey;
              if key='1' then
              begin
                 A:=filepos(zadanija);
    	Assign(temp,'temp');
    	Rewrite(temp);
    	Seek(zadanija,0);
    	If (a-1)<>0 then
    	While size<>(a-1) do
    	Begin
    		Read(zadanija,z);
    		Write(temp,z);
    		Size:=filepos(zadanija);
    	end;
    	seek(zadanija,a);
    	while not eof(zadanija) do
    	begin
    		read(zadanija,z);
    		write(temp,z);
    	end;
    	close(zadanija);
    	close(temp);
    	erase(zadanija);
    	rename(temp,'zadanija');
    	reset(zadanija);
    	seek(zadanija,a-1);
    	   end;
            if key='2' then
            begin
              seek(zadanija,filepos(zadanija)-1);
             writeln('vvedi vopros:');
          readln(z.vopros);
          writeln('  Vyberete tip voprosa;');
          writeln('  1- neskolko variantov otveta ');
          writeln('  2- trebuetsya vvod znacheniya');
    	repeat
          key:=readkey;
    	until (key='1') or (key='2');
          case key of
          '1':z.tip:=1;
          '2':z.tip:=2;
          end;
          writeln('  Vvedi pravilnyi otvet');
          Readln(z.otvet[1]);
          If z.tip=1 then
    	for i:=2 to 4 do
                         begin
                           z.otvet[i]:='';
                           writeln('  Vvedi otvet №',i);
                           readln(z.otvet[i]);
    			   end;
    	writeln('  Vvedi bally za pravilnyi otvet');
    	repeat
    	{$I-}
          readln(z.ball);
    	{$I+}
    	Until Ioresult=0;
    	{$I-}
            write(zadanija,z);
            seek(zadanija,filepos(zadanija)-1);
            end;
         end;
         clrscr;
         writeln('вы просмотрели все задания');
         writeln('нажмите любую клавишу,');
         writeln('чтобы выйти в предыдущее меню');
         key:=readkey;
         menu_pr;
    end;
    end;
    
    procedure otchet;
    var
    temp:file of rec;
    begin
    	assign(students,'students');
    	{$I-}
    	Reset(students);
    	close(students);
    	{$I+}
    	if IOResult <> 0 then
    	      begin
    
                   writeln('ERROR!!! Nikto ne proshel test!');
    	       writeln('Najmi lyubuyu klavishu');
          	       key:=readkey;
                   menu_pr;
    	      end;
       	reset(students);
    	while not eof(students)do
    	begin
    	read(students,stud);
    	clrscr;
          writeln(' Familiya: ',stud.fam);
          writeln(' Gruppa: ',stud.gruppa);
          writeln(' ball: ',stud.ocenka);
    	writeln;
    	writeln(' Najmite lyubuyu klavishu,chtoby prosmotret otchet dalshe');
    	key:=readkey;
    	end;
    	clrscr;
    	writeln(' Najmite lyubuyu klavishu,chtoby vyiti v menyu');
    	key:=readkey;
    	menu_pr;
    end;
    
    procedure vvod;{ввод новых заданий}
    var
    i,j:byte;
    begin
          Assign(zadanija,'zadanija');
          clrscr;
          writeln('vvedi vopros:');
          readln(z.vopros);
          writeln('  Vyberete tip voprosa;');
          writeln('  1- neskolko variantov otveta ');
          writeln('  2- trebuetsya vvod znacheniya');
    	repeat
          key:=readkey;
    	until (key='1') or (key='2');
          case key of
          '1':z.tip:=1;
          '2':z.tip:=2;
          end;
          writeln('  Vvedi pravilnyi otvet');
          Readln(z.otvet[1]);
          If z.tip=1 then
    	for i:=2 to 4 do
                         begin
                           z.otvet[i]:='';
                           writeln('  Vvedi otvet №',i);
                           readln(z.otvet[i]);
    			   end;
    	writeln('  Vvedi bally za pravilnyi otvet');
    	repeat
    	{$I-}
          readln(z.ball);
    	{$I+}
    	Until Ioresult=0;
    	{$I-}
          reset(zadanija);
    	{$I+}
    	If ioresult<>0 then
    	Begin
    		rewrite(zadanija);
                    close(zadanija);
    	End;
          reset(zadanija);
          seek(zadanija,filesize(zadanija));
          write(zadanija,z);
          close(zadanija);
          writeln('  Novoe zadanie dobavleno');
          writeln('  Najmi lyubuyu klavishu');
          key:=readkey;
          menu_pr;
    end;
    
    procedure password;
    begin
    	clrscr;
    	repeat
    	writeln('  vvedi parol (123) Dlya vyhoda vvedi EXIT');
    	readln(pass);
    	if pass = 'EXIT' then menu;
    	write(' ERROR!! Parol nevernyi ');
    	until pass='123';
    	menu_pr;
    end;
    procedure menu_pr;
    begin
    	repeat
            clrscr;
          writeln(' 1. Vvod novyh zadanii');
          writeln(' 2. Prosmotr i udalenie zadanii');
          writeln(' 3. Otchet ');
          writeln(' 4. Vyhod');
          key:=readkey;
    	until (key>='1') and (key<='4');
          case key of
           '1': vvod;
           '2': prosmotr;
           '3': otchet;
           '4': menu;
          end;
    end;
    
    
    
    
    procedure regim2;
    begin
    CLRSCR;
           assign(zadanija,'zadanija');
            {$I-}
    	reset(zadanija);
            close(zadanija);
    	{$I+}
    	if IOResult <> 0 then
    	            begin
                             writeln('ERROR!!');
    	                 writeln('Vvedi zadaniya dlya testa');
    	                 writeln;
    	                 writeln('Najmi lyubuyu knopku');
    	                 key:=readkey;
          	                 menu;
                        end;
          writeln('Vvedi familiyu:');
          readln(stud.fam);
          writeln('vvedi nomer gruppy');
    	repeat
    	{$I-}
          readln(stud.gruppa);
    	{$I+}
    	Until (Ioresult=0) and (stud.gruppa>=1000) and (stud.gruppa<=9999);
          writeln('Vy zaregistrirovalis');
          writeln('najmite lyubuyu klavishu dlya nachala testa');
          key:=readkey;
          test;
    
    end;
    
    
    procedure test;
    
    var
    	otvet,vop:byte;
    	m: array [1..4] of byte;
            n,k1,stball:byte;
    	Hour,min,sec,sec100,time:word;
            time_hour,time_min,time_sec:word;
    	Otvet1:string;
    Label 1;
    begin
            vop:=0;
            stball:=0;
    	Assign(zadanija,'zadanija');
    	reset(zadanija);
    	gettime(Hour,min,sec,sec100);
    	time_sec:=filesize(zadanija)*15+sec;
            time:=filesize(zadanija)*15;
            time_min:=min;
            time_hour:=hour;
    	if time_sec>=60 then
    	begin
    	inc(min);
    	time_min:=min;
    	time_sec:=time_sec-60;
    	if time_min>=60 then
    	begin
    	inc(hour);
    	time_hour:=hour;
    	time_min:=time_min-60;
            end;
            end;
    	repeat
          	read(zadanija,z);
     		clrscr;
            writeln('na kajdoe zadanie otvedeno 15sek');
            writeln('poetomu vsego u vas ',time,' sek');
          	writeln(z.vopros);
    
          	if z.tip=1 then
    		begin
          	randomize;
          	writeln;
          	writeln('otvety:');
          	for n:=1 to 4 do
          	begin
    1:    	m[n]:=random(5);
          	for k1:=1 to (n-1) do
          	if m[n]=m[k1] then goto 1;
          	if m[n]=0 then goto 1;
          	if m[n]=1 then otvet:=n;
          	writeln(z.otvet[m[n]]);
          	end;
          	writeln('Vvedi № pravilnogo otveta');
          	writeln('Najmi Esc dlya vyhoda iz testa');
    		repeat
            key:=readkey;
            until ((key>='1') and (key<='5') or (key=#27));
          	case key of
          	 '1'..'5':begin
            Str(otvet,otvet1);
            If key=otvet1 then
            begin
            stball:=stball+z.ball;
            inc(vop);
            end;
                          end;
          	 #27:menu;
          	end;
    		end;
    		if z.tip=2 then
    		begin
            writeln('Vvedi otvet ');
          	writeln('Vvedi EXIT dlya vyhoda iz testa');
          	readln(otvet1);
          	if otvet1=z.otvet[1] then
                               begin
                                stball:=stball+z.ball;
                                inc(vop);
                               end;
          	if otvet1='EXIT' then menu;
    		end;
    		gettime(hour,min,sec,sec100);
    	until (hour*10000+min*100+sec>=time_hour*10000+time_min*100+time_sec) or (eof(zadanija));
            clrscr;
            if (hour*10000+min*100+sec>=time_hour*10000+time_min*100+time_sec) and (not eof(zadanija)) then
            writeln('vremja isteklo')
            else  writeln('vy proshli test!');
          writeln('Vy nabrali ', stball,' ballov');
          writeln('pravilnyh otvetov: ',vop);
          stud.ocenka:=stball;
          assign(students,'students');
          {$I-}
          Reset(students);
          {$I+}
          if IOResult <> 0 then
            begin
    	 rewrite(students);
             close(students);
            end;
            reset(students);
            seek(students,filesize(students));
            write(students,stud);
            close(students);
    	writeln('najmi lyubuyu klavishu');
    	key:=readkey;
    	menu;
    end;
    
    begin
    menu
    end.
     
  11. Moldman

    Moldman Elder - Старейшина

    Joined:
    12 Jun 2007
    Messages:
    91
    Likes Received:
    35
    Reputations:
    -5
    ASM16d
    :D :D :)

    P.S. + завтра поставлю а то лимит закончился
     
  12. blednii

    blednii Elder - Старейшина

    Joined:
    12 Jun 2007
    Messages:
    160
    Likes Received:
    23
    Reputations:
    -7
    Помогите срочно, на завтра надо сдать лабу по ассемблеру, вот задание.


    Вводятся два числа в двоичной системе исчисления. Найти их произведение и вывести на экран в двоичной системе исчисления.

    Тому кто напишет максимум плюсиков.
     
    1 person likes this.
  13. NaX[no]rT

    NaX[no]rT Members of Antichat

    Joined:
    3 Sep 2005
    Messages:
    489
    Likes Received:
    201
    Reputations:
    202
    Задача собственно такая. С меня много +
    Написать макрос, который выводит все возможные перестановки указанных
    элементов:
    Вот что написал препод, как результат выполнения:
    DSL N,'a','b','c'
    db 'a', 'b', 'c'
    db 'a', 'c', 'b'
    db 'c', 'a', 'b'
    ... и тд
    Использовать можно только макроопределения, команды асма в макросе использовать нельзя.
     
    _________________________
  14. pupkin77

    pupkin77 New Member

    Joined:
    8 Dec 2007
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    HELP ME PLEASE!!!

    в Общем дело 5 минут.

    Есть программа *.pas там вводятся данные (цифры) и они обрабатываются и выдается ответ.

    В общем нужно сделать чтобы "Дается Исходник Программы. Там Вводятся Данные. Нужно Чтобы 'Вводится Последовательность Из 0 И 1. Программа Должна Выдать 0 Если Число 0-Ей Больше И 1 – В Противном Случае. Пример. 000011. Программа Выдает 0."

    Code:
    unit unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Buttons;
    
    type
      TForm1 = class(TForm)
        Label1: TLabel;
        Edit1: TEdit;
        Button1: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.Button1Click(Sender: TObject);
    var st,st_p:string;
              i:integer;
    begin
      st:=Edit1.text;
      i:=1;
      st_p:=st;
      for i:=1 to Length(St_p) do
       if (st_p[i]='0') and (st_p[i+1]='0') then
        st_p[i+1]:='1';
      memo1.Lines.Add('введено   :  '+st);
      memo1.lines.Add('получаем :  '+st_p);
      Edit1.Text:=''
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     edit1.Text:='';
     Memo1.Text:='Вводится Последовательность Из 0 И 1. Программа Должна Выдать 0 Если Число 0-Ей Больше И 1 – В Противном Случае.';
     end;
    
    end.
    
     
  15. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    если вводится тока 0 или 1 то можно пойти вот таким способом
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var 
     x,y:integer;
     st:string;
    begin
     st:=Edit1.text;
     y:=0;
     for x:=1 to length(st) do
       if st[x]='0' then inc(y);
     if y>(length(st) div 2) then y:=0 else y:=1;
     memo1.Lines.Add('введено   :  '+st);
     memo1.lines.Add('получаем :  '+intostr(y));
     Edit1.Text:=''
    end;
    
     
  16. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Code:
    function Trace(txt:string):string;
    Begin
      form1.Memo1.Lines.Add(txt);
    End;
    
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i           : integer;
      st_0, st_1  : integer;
      TxtLine     : string;
    begin
      st_0 := 0;
      st_1 := 0;
      Memo1.Text := '';
      Trace('Исходная строка: '+Edit1.Text);
      TxtLine := Edit1.Text;
      For i := 1 to Length(Edit1.Text) Do
        Begin
          If StrToInt(TxtLine[i]) = 0 then st_0 := st_0 + 1;//inc(st_0)
          If StrToInt(TxtLine[i]) = 1 then st_1 := st_1 + 1;
          if (StrToInt(TxtLine[i]) <> 1) and (StrToInt(TxtLine[i]) <> 0) then
            Begin
              ShowMessage('Введено другое число, пожалуйста введите правильно!');
              Edit1.Text := '';
              Memo1.Text := '';
              Exit;
            End;
        End;
      If st_0 = st_1 then Trace('Нулей и единиц поровну [ 0 = 1]')
        Else
          If st_0 > st_1 then Trace('Нулей больше чем единиц [0 > 1] : 0')
            Else
              Trace('Нулей меньше, чем единиц [0 < 1] : 1');
    
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      edit1.Text:='';
      Memo1.Text:='';
    end;
    
    end.
    :)
     
  17. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    может кому пригодитса
    C#
    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace ZI_22_KMDI_5
    {
        class Lab
        {
            const int n = 2;
            double E = 0.00001;
            double[] X1 = { 0, 0 };
            double[] X2 = new double[n];
    
            double[,] MatrixJakobi(double[] X)
            {
                double[,] J = new double[n, n]; 
                double y, h = 0.000000001;
                for (int i = 0; i < n; i++)
                {
                    y = Funkcia(X, i);
                    for(int k = 0; k < n; k++)
                    {
                        X[k] = X[k] + h;
                        J[i,k] = (Funkcia(X,i) - y)/h;
                        X[k] = X[k] - h;
                    }
                }
                return (J);
            }
    
            double Funkcia(double[] X, int f)
            {
                double fx = 0;
                if (f == 0)
                    fx = -X[0] + X[0] * X[0] - X[1] * X[1] + 0.1;
                if (f == 1)
                    fx = -X[1] + 2 * X[0] * X[1] - 0.1;
                return (fx);
            }
    
            double[] Funkcii(double[] X)
            {
                double[] F = new double[n];
                F[0] = -X[0] + X[0] * X[0] - X[1] * X[1] + 0.1;
                F[1] = -X[1] + 2 * X[0] * X[1] - 0.1;
                return (F);
            }
            
            bool Pohubka(double[] mX1, double[] mX2)
            {
                double a, b;
                a = (mX2[0] - mX1[0]) / mX1[0]; a = Math.Abs(a);
                b = (mX2[1] - mX1[1]) / mX1[1]; b = Math.Abs(b);
                Console.WriteLine(Math.Max(a,b));
                if (Math.Max(a,b) <= E)
                    return (true);
                else
                    return (false);
            }
    
            double[,] Obertanna(double[,] A)
            {
                double[] b = new double[n];
                double[,] X = new double[n, n];
                double[] dX = new double[n];
                for (int k = 0; k < n; k++)
                {
                    for (int i = 0; i < n; i++)
                    {
                        if (k == i)
                            b[i] = 1;
                        else
                            b[i] = 0;
                    }
                    dX = Gaus(A, b);
                    for (int i = 0; i < n; i++)
                        X[i, k] = dX[i];
                }
                return (X);
            }
    
            double[] Gaus(double[,] A, double[] b)
            {
                double[,] GausA = new double[n, (n + 1)];
                double[] X = new double[n];
                for(int i = 0; i < n; i++)
                    for (int j = 0; j < (n + 1); j++)
                    {
                        if (j != n)
                            GausA[i, j] = A[i, j];
                        else
                            GausA[i, j] = -b[i];
                    }
                for (int l = 0; l < n - 1; l++)
                {
                    double c = GausA[l, l];
                    for (int k = l + 1; k < (n+1); k++)
                    {
                        GausA[l, k] = -GausA[l, k] / c;
                        for (int i = l + 1; i < n; i++)
                            GausA[i, k] = GausA[i, k] + GausA[i, l] * GausA[l, k];
                    }
                }
                X[n - 1] = -GausA[n - 1, n] / GausA[n - 1, n - 1];
                for (int i = n - 2; i >= 0; i--)
                {
                    double s = GausA[i, n];
                    for (int k = i + 1; k < n; k++)
                        s = s + GausA[i, k] * X[k];
                    X[i] = s;
                }
                return (X);
            }
    
            double[] Mnogenna(double[,] A, double[] B)
            {
                double[] C = new double[n];
                C[0] = A[0, 0] * B[0] + A[0, 1] * B[1];
                C[1] = A[1, 0] * B[0] + A[1, 1] * B[1];
                return (C);
            }
            
            public void Calculate()
            {
                double[,] A = new double[n, n];
                double[] fX = new double[n];
                double[] Mn = new double[n];
                int d = 0;
    
                A = MatrixJakobi(X1);
                A = Obertanna(A);
                fX = Funkcii(X1);
                Mn = Mnogenna(A, fX);
                X2[0] = X1[0] - Mn[0];
                X2[1] = X1[1] - Mn[1];
                d++; 
                while (Pohubka(X1, X2) != true)
                {
                    if (d > 5)
                    {
                        A = MatrixJakobi(X1);
                        A = Obertanna(A);
                    }
                    X1[0] = X2[0];
                    X1[1] = X2[1];
                    fX = Funkcii(X1);
                    Mn = Mnogenna(A, fX);
                    X2[0] = X1[0] - Mn[0];
                    X2[1] = X1[1] - Mn[1];
                    d++;
    
                    Console.WriteLine("x(1) = " + X2[0]);
                    Console.WriteLine("x(2) = " + X2[1]);
                }
                Console.WriteLine("------");
                Console.WriteLine("Результат");
                Console.WriteLine("x(1) = " + X2[0]);
                Console.WriteLine("x(2) = " + X2[1]);
                Console.WriteLine("------");
                Console.WriteLine("Перевiрка 1");
                Console.WriteLine(-X2[0] + X2[0] * X2[0] - X2[1] * X2[1] + 0.1);
                Console.WriteLine(-X2[1] + 2 * X2[0] * X2[1] - 0.1);
                Console.WriteLine("Перевiрка 2");
                Console.WriteLine(X2[0] + " = " + (X2[0] * X2[0] - X2[1] * X2[1] + 0.1));
                Console.WriteLine(X2[1] + " = " + (2 * X2[0] * X2[1] - 0.1));
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Lab lab5 = new Lab();
                lab5.Calculate();
                Console.Read();
            }
        }
    }
    
     
  18. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    метод Рунге-Кутта 4 порядка:

    Code:
    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace ZI_22_KMDI_6
    {
        class RyngeRytta4
        {
            const int n = 2; // Порядок системи
            const double h = 0.1; // Крок
            double x, a = 0, b = 1; // Проміжок
            global double[] y = new double[n]; //если небольшой масив
            global double[] f = new double[n]; //тогда можна без global
    
            void dy() // Праві частини рівнянь
            {
                f[0] = y[1];
                f[1] = (8 * y[1] - 5 * y[0] - 4 * Math.Exp(x) * Math.Sin(x / 2)) / 4;
            }
            public void Calculate()
            {
                double[] K1 = new double[n];
                double[] K2 = new double[n];
                double[] K3 = new double[n];
                double[] K4 = new double[n];
                double[] z = new double[n];
    
                // Початкові значення
                y[0] = 1; y[1] = 1;
                x = a;
    
                do
                {
                    dy();
                    for (int i = 0; i < n; i++)
                    {
                        K1[i] = f[i];
                        z[i] = y[i];
                        y[i] = z[i] + 0.5 * h * K1[i];
                    }
                    x = x + 0.5 * h;
                    dy();
                    for (int i = 0; i < n; i++)
                    {
                        K2[i] = f[i];
                        y[i] = z[i] + 0.5 * h * K2[i];
                    }
                    dy();
                    for (int i = 0; i < n; i++)
                    {
                        K3[i] = f[i];
                        y[i] = z[i] + 0.5 * h * K3[i];
                    }
                    x = x + 0.5 * h;
                    dy();
                    for (int i = 0; i < n; i++)
                    {
                        K4[i] = f[i];
                        y[i] = z[i] + h * (K1[i] + K4[i] + 2 * (K2[i] + K3[i])) / 6;
                    }
                    Console.WriteLine("x = " + x + "; y = " + y[0] + "; y' = " + y[1]);
                }
                while (x < b);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                RyngeRytta4 Lab6 = new RyngeRytta4();
                Lab6.Calculate();
                Console.Read();
            }
        }
    }
     
    #1058 eLWAux, 1 Feb 2009
    Last edited: 1 Feb 2009
  19. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    опять задача из екзамена:
    С:
    Code:
    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    #define n 2
    void main(void)
    {
    clrscr();
    int i, j, L, k, m;
    const double E=1e-5;
    double x[n], Xprev[n], F[n], J[n][n], a[n][n+1], deltaX[n];
    double f(int i,double x[n]);
    double Jacobi(int i,int j,double x[n]);
    double max(double x[n],double Xprev[n]);
    
    x[0]=0.00000001;     //pochatkove
    x[1]=0.00000001;     //nablyzhennya
    m=0;
    
    do
    {
      for(i=0;i<=n-1;i++)
        Xprev[i]=x[i];
      //----------FORMUYEMO F TA J------------------------
      for(i=0;i<=n-1;i++)
      {
       F[i]=f(i,x);
       for(j=0;j<=n-1;j++)
        J[i][j]=Jacobi(i,j,x);
      }
      //--------------------------------------------------
      for(i=0;i<=n-1;i++)
       for(j=0;j<=n-1;j++)
        a[i][j]=J[i][j];
      a[0][n]=F[0];
      a[1][n]=F[1];
    
       //------------- GAUSS PO STOVPTSYAH----------------------
      for(L=0;L<=n-2;L++)
      {
        for(k=L+1;k<=n;k++)
        {
          a[L][k]=-a[L][k]/a[L][L];
          for(i=L+1;i<=n-1;i++)
            a[i][k]=a[i][k]+a[i][L]*a[L][k];
        }
      }
    
        // ------ZVOROTNIY HID-------
      deltaX[n-1]=-a[n-1][n]/a[n-1][n-1];
      for(i=n-2;i>=0;i--)
      {
        deltaX[i]=a[i][n];
        for(k=i+1;k<=n-1;k++)
          deltaX[i]+=a[i][k]*deltaX[k];
      }
    
      for(i=0;i<=n-1;i++)
        x[i]+=deltaX[i];    //--UTOCHNENE ZNACHENNYA x[i]--
      m++;
    }
    while(max(x,Xprev)>E);
    
    printf("\t ---ROZVYAZOK SYSTEMY---\n\t|   (ZA %d ITERATSII):   |\n",m);
    for(i=0;i<=n-1;i++)
      printf("\t|    x[%d]= %lf    |\n",i,x[i]);
    printf("\t -----------------------");
    printf("\nPEREVIRKA_1!!!  %lf\n",-x[0]+x[0]*x[0]-x[1]*x[1]-0.1);
    printf("PEREVIRKA_2!!!  %lf\n",-x[1]+2*x[0]*x[1]-0.1);
    
    getch();
    }
    
    double f(int i,double x[n])
    {
     if(i==0)
      return -x[0]+x[0]*x[0]-x[1]*x[1]-0.1;
     else
      return -x[1]+2*x[0]*x[1]-0.1;
    }
    double Jacobi(int i,int j,double x[n])
    {
     const double h=1e-9;
     double prev=f(i,x);
     x[j]+=h;
     return (f(i,x)-prev)/h;
    }
    double max(double x[n],double Xprev[n])
    {
    int i;
    double z,q;
    z=fabs((x[0]-Xprev[0])/Xprev[0]);
    for(i=1;i<=n-1;i++)
    {
     q=fabs((x[i]-Xprev[i])/Xprev[i]);
     if(q>z)
      z=q;
    }
    return z;
    }
     
  20. eLWAux

    eLWAux Elder - Старейшина

    Joined:
    15 Jun 2008
    Messages:
    860
    Likes Received:
    616
    Reputations:
    211
    модифицирований метод Ейлера

    C:
    Code:
    #include <stdio.h>
    #include <math.h>
    #include <conio.h>
    #define n 2
    #define pi 3.14159265
    void main(void)
    {
    int i;
    double x,a,b,h,y[n],yn[n],yz[n];
    double dy(int i,double x,double y[n]);
    double modyficEYLER(int i,double h,double x,double y[n],double yz[n]);
    a=pi/4;
    b=pi/3;
    h=0.026;
    x=a;
    y[0]=0.0;
    y[1]=2.0;
    printf("x= %lf\ty[1]= %lf\ty[2]= %lf\n",x,y[0],y[1]);
    do
    {
     printf("x= %lf\t",x+h);
     for(i=0;i<=n-1;i++)
     {
      yz[i]=y[i];
      yn[i]=modyficEYLER(i,h,x,y,yz);
      printf("y[%d]= %lf\t",i+1,yn[i]);
     }
     printf("\n");
     for(i=0;i<=n-1;i++)
      y[i]=yn[i];
     x+=h;
    }
    while(x<=(b-h));
    printf("\n");
    
    getch();
    }
    
    double dy(int i,double x,double y[n])
    {
     if(i==0)
      return y[1];
     else
      return -4*y[0]+8*(1/tan(2*x));
    }
    
    double modyficEYLER(int i,double h,double x,double y[n],double yz[n])
    {
     yz[i]=yz[i]+h*dy(i,x,yz);
     return y[i]+0.5*h*( dy(i,x,y)+dy(i,x+h,yz) );
    }
     
Thread Status:
Not open for further replies.