Orar semigroup #2

Orar semigroup #2

Problema broaştei pentru C

Se oferă un lac de mxn "bălţi" care posedă sau nu obiecte plutitoare care pot susţine o broască de masă m'. Broasca este paraşutată pe un astfel de obiect plutitor căruia îi vom atribui în continuare denumirea de "nufăr". Se citeşte dintr-un fişier cu denumire fortuită m, n, poziţia iniţială a amfibianului, un număr întreg mm şi mm perechi de coordonate pe care se găsesc nuferi. Să se genereze într-o ordine fortuită toate traseele pe care le poate parcurge amfibianul pentru a ajunge la malul lacului.

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

int L[10][10],sol[10][10],n,m,mm,nrsol,is,js;
int dx[]= {-1,1,0,0},dy[]= {0,0,-1,1};

void citire(FILE *f)
{
    int a,b,i;
    fscanf(f,"%d %d %d %d %d",&m,&n,&is,&js,&mm);
    sol[is][js]=1;
    for(i=1; i<=mm; i++)
    {
        fscanf(f,"%d%d",&a,&b);
        L[a][b]=1;
    }
}

void afisare()
{
    int i,j;
    nrsol++;
    printf("Solutia nr %d\n",nrsol);
    for(i=1; i<=m; i++)
    {
        for(j=1; j<=n; j++)
            printf("%d ",sol[i][j]);
        printf("\n");
    }
    printf("\n");
}

void traseu(int i, int j, int pas)
{
    int inou,jnou,k;
    for(k=0; k<4; k++)
    {
        inou=i+dx[k];
        jnou=j+dy[k];
        if(inou>=1 && inou<=m && jnou>=1 && jnou<=n)
            if(sol[inou][jnou]==0 && L[inou][jnou]==1)
            {
                sol[inou][jnou]=pas;
                if(inou==1 || inou==m || jnou==1 || jnou==n)
                    afisare();
                traseu(inou,jnou,pas+1);
                sol[inou][jnou]=0;
            }
    }
}

int main()
{
    FILE *f;
    f=fopen("date.txt","r");
    citire(f);
    //printf("%d %d",m,n);
    traseu(is,js,2);
    printf("%d solutii",nrsol);
    printf("\nApasati o tasta pentru iesire");
    getch();
}
Fisier
7 7
4 3
11
4 2
1 2
1 4
4 5
4 4
3 4
3 5
4 1
5 2
4 7
4 6

joi, 9 ianuarie 2014 by DlMuresan
Categories: | Leave a comment

Laborator 5 - Probleme recursivitate (30 octombrie)

3.4.Să se scrie un program recursiv care citeşte n cuvinte şi le afişează în ordinea inversă a introducerii lor. 

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

void citire_afisare(int n)
{
    int i;
    char a[10];
    if(n>=1)
{
    scanf("%s",&a);
    citire_afisare(n-1);
}
if(n)
    printf("%s\n",a);

}

int main()
{
    int n;
    printf("Cititi numarul de cuvinte: ");
    scanf("%d",&n);
    citire_afisare(n);
    getch();
}
 
3.5.Să se scrie un program recursiv de generare a produsului cartezian a n mulţimi.
#include<stdio.h>  //  CU ŞIRURI DE CARACTERE

int n,nr=0;
char a[10][10],x[10];

void backt(int i)
{
    int j;
    for(j=0;j<strlen(a[i]);j++)
    {
        x[i]=a[i][j];
        if(i==n)
        {
            printf("%s \n",x+1);
            nr++;
        }
        else
            backt(i+1);
    }
}

int main()
{
    int i;
    scanf("%d",&n);
    for(i=0;i<=n;i++)
    {
        gets(a[i]);
    }

    x[n+1]='\0';
    backt(1);
    printf("%d solutii",nr);
    getch();
    return 0;
}

3.6.Să se scrie un program de generare recursivă a submulţimilor de k elemente ale mulţimii A cu n elemente (combinaţiile de n elemente luate câte k). 

3.7. Să se scrie un program de rezolvare a problemei celor 8 regine (determinarea tuturor aşezărilor pe tabla de şah a celor 8 regine astfel încât să nu se atace). 

3.8.Să se genereze recursiv permutările mulţimii A de n elemente. 

3.9.Se consideră o bară de lungime m şi n repere de lungimi l1, l2, .... , ln. Din bară trebuie tăiate bucăţi de lungimea reperelor date, astfel încât să rezulte din fiecare reper cel puţin o bucată şi pierderile să fie minime. 

3.10. Funcţia lui Ackermann. Să se scrie programul recursiv care calculează funcţia lui Ackermann definită astfel: 
Ack(0,n)=n+1 pentru n ε N 
Ack(m,0)=Ack(m-1,1) pentru m ε N* 
Ack(m,n)=Ack(m-1,Ack(m,n-1)) pentru m,n ε N

marți, 5 noiembrie 2013 by DlMuresan
Categories: , , , , , , , , , , , | Leave a comment

Temă curs PC (6 noiembrie)

Se citeste într-un şir de caractere un număr hexazecimal, iar mai apoi un număr roman. Care e valoarea în zecimal?

#include <stdio.h>  //  Problema tema Ignat 6.11.13
#include <stdlib.h>  //  Se citeste intr-un sir de caractere un număr hexazecimal, iar mai apoi un număr roman. Care e valoarea în zecimal?
void roman_arab(char a[100])        //  M D C L X V I
{
int n=0,i,j;

for(i=0;i<strlen(a);i++)
{
    if(a[i]=='C' && a[i+1]=='M')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+900;
    }
    if(a[i]=='C' && a[i+1]=='D')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+400;
    }
    if(a[i]=='X' && a[i+1]=='C')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+90;
    }
    if(a[i]=='X' && a[i+1]=='L')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+40;
    }
    if(a[i]=='I' && a[i+1]=='X')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+9;
    }
    if(a[i]=='I' && a[i+1]=='V')
    {
        strcpy(a+i,a+i+2);
        i--;
        n=n+4;
    }
}

for(i=0;i<strlen(a);i++)
{
    switch(a[i])
    {
        case 'M':n=n+1000;break;
        case 'D':n=n+500;break;
        case 'C':n=n+100;break;
        case 'L':n=n+50;break;
        case 'X':n=n+10;break;
        case 'V':n=n+5;break;
        case 'I':n=n+1;break;
    }
}

printf("%d",n);
}

int pow(int n,int p)
{
    if(p==0)
        return 1;
    int i,k=1;
    for(i=1;i<=p;i++)
        k=k*n;
    return k;
}

void hexazecimal_zecimal(char a[100])
{
int n=0,nr,i,j,val;
nr=strlen(a);
for(i=0;i<nr;i++)
{
    switch(a[i])
    {
        case 'A':val=10;break;
        case 'B':val=11;break;
        case 'C':val=12;break;
        case 'D':val=13;break;
        case 'E':val=14;break;
        case 'F':val=15;break;
        default :val=(int)a[i];break;
    }
    n=n+val*pow(16,nr-i-1);
}
printf("%d",n);
}

int main()
{
    char a[100];
    printf("Cititi un numar hexazecimal sau un numar roman\n");
    gets(a);
    int ok;
    printf("Ati citit un numar hexazecimal (1) sau un numar roman (0)?\n");
    scanf("%d",&ok);
    printf("Numarul in zecimal este\n");
    if (ok==1)
    {
        hexazecimal_zecimal(a);
    }
    else
    {
        roman_arab(a);
    }
    getch();
}

by DlMuresan
Categories: , , , , , , , , | Leave a comment