Friday, January 22, 2016

ბუშტულების მეთოდით დალაგება C++ bubble sort


#include<iostream>
using namespace std;

int main(){
     //declaring array
      int array[5];
      cout<<"Enter 5 numbers randomly : "<<endl;
      for(int i=0; i<5; i++)
      {
     //Taking input in array 
       cin>>array[i];       
      } 
      cout<<endl;
      cout<<"Input array is: "<<endl;
     
      for(int j=0; j<5; j++)
      {
       //Displaying Array
       cout<<"\t\t\tValue at "<<j<<" Index: "<<array[j]<<endl;        
      }  
      cout<<endl;
    // Bubble Sort Starts Here
     int temp;
     for(int i2=0; i2<=4; i2++)
   {
     for(int j=0; j<4; j++)
     {
        //Swapping element in if statement   
           if(array[j]>array[j+1])
       {
        temp=array[j];
        array[j]=array[j+1];
        array[j+1]=temp;       
       }
     }        
   }
   // Displaying Sorted array
      cout<<"  Sorted Array is: "<<endl;
     for(int i3=0; i3<5; i3++)
   {
    cout<<"\t\t\tValue at "<<i3<<" Index: "<<array[i3]<<endl; 
   }  
return 0;
}

წყარო:http://fahad-cprogramming.blogspot.com/2014/05/bubble-sort-in-c-code-example.html

მინიმუმის თანრიგით დალაგება C

#include <stdio.h>   
#include <stdlib.h>
int main()
{
 int i,j,k, min, ind;
   int n=5;
   int a[n];
   for(i=0; i<n; i++)
   { 
            scanf("%d",&a[i]);
          
   }
 min=a[0];
  for(i=1; i<n; i++)
   { 
    if(min>a[i])
    min=a[i];
    ind=i;
   } 
 printf("min=%d\n",min);  
      min=a[0];
    for(i=0; i<n; i++)
   { 
  for(j=i+1; j<n; j++)
   {  
   if(min>a[i])
    min=a[i];
   }
   k=a[i];
   a[i]=a[j];
   a[j]=k;
   }
system("pause");
return 0;
}

ჩასმის მეთოდით დალაგება ზრდადობის მიხედვით C

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int main()
{
     int i,j,k,c,temp;
   
   int mas[8]= {14,11,8,16,2,12,19,7};
   int n=8;  
 
for(i=0;i<n;i++)
{
                temp=mas[i];
                j=i-1;
                while((temp<mas[j])&& j>=0)
                {
                    mas[j+1]=mas[j];
                    j=j-1;   
                }
                mas[j+1]=temp;
}     
      
    for(i=0;i<n;i++)
     {                    
     printf("%d\n",mas[i]);  
     }
system("pause");
return 0;
}

ჰანოის კოშკების ამოცანა



  ამოცანის პირობა:
   არსებობს ლეგენდა, რომ შორეული აღმოსავლეთის ერთ-ერთ მონასტერში ბერები ცდილობდნენ გადაეტანათ ფირფიტები ერთი ღერძიდან მეორეზე, ფირფიტები ღერძზე ჩამოცმული იყო ისე, რომ მათი ზომა მცირდებოდა ქვემოდან ზემოთ. ფირფიტები გადატანა ხდებოდა შემდეგი წესებით:
1.     ერთ გადატანაზე შეიძლება გადაიტანო მხოლოდ ერთი ფირფიტა
2.     დიდი ზომის ფირფიტა არასდროს არ უნდა აღმოჩნდეს პატარა ფირფიტის ზემოდან
3.     შეგვიძლია გამოვიყენოთ მხოლოდ ერთი დამხმარე ღერძი




შევუდგეთ ამოცანის ამოხსნას:
     მოდით განვიხილოთ პირობა, როდესაც   1 – ი ღერძიდან 3 – მე ღერძზე გადასატანია 3 ფირფიტა, 2 – ე ღერძს ვიყენებთ ფირფიტების დროებით განსათავსებლად. ამოცანას თუ დავუკვირდებით შევამჩნევთ, რომ 3 ფირფიტის გადატანა შეიძლება გამარტივდეს 2 ფირფიტის   გადატანის საშუალებით ანუ  n ფირფიტის გამარტივება ხდება  n-1 ფირფიტის გადანაცვლებით.
შემოვიტანოთ ცვლადები:
disc – ფირფიტების რაოდენობა
first – ღერძი, რომელზეც განთავსებულია ფირფიტები
last – ღერძი, რომელზეც გადაგვაქვს ფირფიტები
temp – დამხმარე რერძი, ფირფიტების დროებიტ განსათავსებლად
ამოცანის გადაწყვეტის ალგორითმი თითოეული რეკურსიული ბიჯისთვის ასეთია:
1. გადავიტანოთ disc – 1 ფირფიტა  first – დან temp– ზე
2. გადავიტანოთ 1 დარჩენილი ფირფიტა first – დან last – ზე
3. გადავითანოთ disc – 1 ფირფიტა temp – დან last – ზე
ეს პროცესი დასრულდება, მაშინ როდესაც გადასატანი იქნება მხოლოდ 1 ფირფიტა, ანუ ფუნქცია მიაღწევს საბაზო ამოცანამდე. ეს ალგორითმი შეიძლება გამოვიყენოთ 64 ფირფიტის ამოცანის გადაწყვეტისთვისაც. :) ახლა კი ამ ალგორითმის რეალიზაცია C++ ზე.
void HanoiTower(int disc, int first, int last, int temp)//ფუნქცია იღებს ზემოთ ჩამოთვლილ პარამეტრებს
{
    if( disc == 1 ) //მოწმდება პირობა: არის თუ არა ფირფიტების რაოდენობა  საბაზო ანუ 1
    {
        cout<<first<<” –> “<<last<<endl;//იბეჭდება, საიდან სად უნდა გადავიტანოთ ფირფიტა. მაგალითად: 1 –> 3
    }
    else//როდესაც ფირფიტების რაოდენობა ერთზე მეტია
    {
        //ფუნქცია იძახებს თავისთავს ალგორითმის წესების შესამამისად
        HanoiTower(disc – 1, first, temp, last);
        HanoiTower(1,first,last,temp);
        HanoiTower(disc – 1, temp, last, first);
    }
    return;
}
თუ ფუნქციას გამოვიძახებთ პარამეტრებით HanoiTower(3,1,3,2) გვექნება შემდეგი შედეგი:
1–>3
1–>2
3–>2
1–>3
2–>1
2–>3
1–>3



მაგალითი 4 რგოლზე :
#include <iostream>
#include "stdafx.h"
using namespace std;
void Hanoi(int n, char src, char mid, char dst) //charshi racaa eg svetebia
{
   if (n==2)
   {
             cout << "moving ring 1 from " <<src<<" to " <<mid<<endl;
             cout << "moving ring 2 from " <<src<<" to " <<dst<<endl;
             cout << "moving ring 1 from " <<mid<<" to " <<dst<<endl;  //ori calis gadatana
   }
   else
   {
       Hanoi(n-1, src, dst, mid);
       cout << "moving ring " <<n<<" from " <<src<<" to " <<dst<<endl;
       Hanoi(n-1, mid, src, dst);
     
   }
}
int _tmain(int argc, _TCHAR* argv[])
{
 Hanoi (4, 'S', 'M', 'D'); // S svetidan gadagvaq D ze Mis daxmarebiT 4cali
return 0;
}