Уводни функции в Лисп (Lisp)

Сума на числата 1,2,3,4
(+ 1 2 3 4)
връща: 10

Математическата функция (3*(2+6))/3
(/ (* 3 (+ 2 6)) 3)
връща: 8
Коментари в Lisp се поставят след точка със запетая
Пример:
;comment

Дефинира променлива a = 5
(define a 5)

Дефинира функция square, което връща квадрата на число:
(define (square x) (* x x))
Вика се: (square 5)
Връща: 25

Генератор за поредица от числа с действие accumulare:
Пример:
1*2*3*4*…*20 или 1+3+5+7+..+100

(define (accumulate start end init_value term_filter term combinator)
    (if (> start end) init_value
        (if (term_filter start)
             (combinator (term start)  
                 (accumulate (+ start 1) end init_value term_filter term combinator))
             (accumulate (+ start 1) end init_value term_filter term combinator))))

Пример за използване:
always_true винаги ще връща истина
identity ще връща подадения параметър
square връща квадрата на променливата
f която връща сумата 4+16+36+…+n*n или 4+16+36+…+(n-1)*(n-1) (където n или n-1 е четно. Използва се „(f 10)“)
f2 която връща сумата 1+2+…+n (използва се „(f2 10)“)
nf ще връща 1*2*…*n (използва се „(nf 10)“)
functe връща (x^n)/(n!)
ex връща e^x или натуралното число e на степен x (използва се „(ex 2)“)

(define (always_true x) #t)
(define (identity x) x)
(define (square x) (* x x))

(define (f n)
  (accumulate 1
              n
              0
              even?
              square
              +))
(define (f2 n)
  (accumulate 1
              n
              0
              always_true
              identity
              +))
(define (nf n)
  (accumulate 1
              n
              1
              always_true
              identity
              *))
(define (functe x n) (/ (expt x n) (nf n)))
(define (ex x)
  (define (term n) (functe x n))
    (accumulate 1
                100
                1
                always_true
                term
               +))
(ex 2)

Няма коментари

Генератор за подмножество

Генератор на пролог за подмножество на друго. Като също може да разпознае дали дадено множество е подмножество на друго, без повтарящи се символи.
Ако има повторения генератора ще зацикли на първия символ пр. [3,3,3,3,3,….]

member(X,[X|L]).
member(X,[Y|L]):-member(X,L).

submn([],_).
submn([X|L1],[Y|L2]):-member(X,[Y|L2]),submn(L1,L2),not(member(X,L1)).
?-submn(X,[3,1,2,4,5]),write(X),1<0.

А за разпознаване на множество дали е подмножество на друго със повторения може да използвате това:

member(X,[X|L]).
member(X,[Y|L]):-member(X,L).

submn([],_).
submn([X|L1],L2):-member(X,L2),submn(L1,L2).
?-submn([3,3,3,3,4,5],[3,1,2,4,5]).

Няма коментари

Лексикографско сортиране на числа

За нуждите на ЦЕРН даден масив от данни, които те обработват, трябва да бъде сортиран. За
съжаление в ЦЕРН всички са твърде заети, за да напишат алгоритъм за сортиране, защото
последният им опит е излязал извън контрол и ако не бъдат взети спешни мерки, Земята ще бъде
погълната от черна дупка. Можете ли да помогнете на ЦЕРН?
За да може ЦЕРН да се възползва от алгоритъма ви, те ще ви зададат цяло число N < 10000, брой
на числа, които трябва да се сортират, последвано от редица от цели числа всяко от които е по-
малко от 10000000. Вие трябва за техните нужди да сортирате масива лексикогравски. Това става
като сравняваме първите цифри и ако при едното цифрата е по-малка, то е по-малко. Ако са
равни продължаваме със следващите цифри. Ако на някое от числата цифрите му се изчерпат
преди тези на другото по описания алгоритъм, тогава то е по-малкото (например 190 е по-голямо
от 1000).
Изхода от програмата ви трябва да е сортираните числа като всяко се принтира на отделен ред.

Вход:
5
190
1000
5
11
22

Изход:
1000
11
190
22
5

#include <iostream>
using namespace std;
int a[10000];

int intlength(int a) {
	if(a==0) return 1;
    int i=0;
    while(a>0) {
   	 a = a/10;
   	 i++;
    }
    return i;
}
int e(int a) {
	if(a<=0) return 1;
	int b = 1;
	for(int i=0;i<a;i++) {
		b = b*10;
	}
	return b;
}
bool leksikogravskaProverkaPoGolqmo(int a, int b) {
    int alen = intlength(a);
    int blen = intlength(b);
	int i = 1;
	bool ss= false;
	int tmpa,tmpb;
    while(alen>0 && !ss) { 
		tmpa = (a % e(alen))/e(alen-1);
		tmpb = (b % e(blen))/e(blen-1);
		if(blen<1) tmpb=-1;
		if(tmpa>tmpb) {
			ss = !ss;
			return 1;
		} else if(tmpa<tmpb) {
			return 0;
		}
		alen--;
		blen--;
		i++;
    }
    return 0;
}

void quicksort(int arr[],int left,int right) {
	int length = sizeof(arr);
	int i=left,j=right;
	int pivot = arr[(left+right)/2];

	while(i<=j) {
		while(!leksikogravskaProverkaPoGolqmo(arr[i],pivot) && arr[i]!=pivot)
			i++;
		while(leksikogravskaProverkaPoGolqmo(arr[j],pivot))
			j--;
		if(i<=j) {
			swap(arr[i],arr[j]);
			j--;
			i++;
		}
	}
	if(left<j)
		quicksort(arr,left,j);
	if(i<right)
		quicksort(arr,i,right);
}

int main() {
	int count;
	cin>>count;
	for(int i=0; i< count; i++) {
		cin>>a[i];
	}
	quicksort(a,0,count-1);
	for(int i=0;i<count;i++) {
		
		cout<<a[i];cout<<endl;
	}
}

Няма коментари

HTML5 rotate tag – завъртане на елемент

Въведете число:



Целия сайт
Този блок

Може да пробвате с число, чрез което ще завъртите сайта ми..
Използвал съм HTML5, CSS3 i JS

Кода е прост, но за сметка това много мощен:

<script type="text/javascript">
	var rotatingDiv = document.getElementById("rotatingDiv");
	rotatingDiv.style.webkitTransform  = "rotate(-1.6deg)";
	function transform()
	{
		var x=document.getElementById("fname");
		if(document.getElementById("radioB1").checked) {
			document.body.style.webkitTransform ="rotate("+x.value+"deg)";
		}
		if(document.getElementById("radioB2").checked) {
			var rotatingDiv = document.getElementById("rotatingDiv");
			rotatingDiv.style.webkitTransform  = "rotate("+x.value+"deg)";
		}
	}
</script>

Няма коментари

Островландия

Известният мореплавател Станчо използвал своите хакерски умения и се сдобил с карта на Островландия. За съжаление обаче съкровището не било отбелязано с голям червен Х, ами просто било казано, че то се намира на най- големия остров. Картата била представена под формата на голям хексагон (правилен шестоъгълник), който е съставен от много на брой по малки хексагони. Страната на картата (големият хексагон) се състои от N хексагона. Всяка клетка в картата има стойност – нула или единица, в която нулите са вода, а единиците – суша. Съответно островите били съседни клетки от единици (като две клетки ще наричаме съседни, ако имат обща стена). Вашата задача е по дадена карта на Островландия да изведете големината на най- големия остров (в брой клетки). Най-големият остров на примера по-долу е отбелязан със зелени 1-ци.

Прочети цялата страница »

Няма коментари

  • Страница 6 от 9
  • <
  • 1
  • ...
  • 4
  • 5
  • 6
  • 7
  • ...
  • 9
  • >