Cod sursa(job #739855)

Utilizator dan.paulaDan Paula dan.paula Data 23 aprilie 2012 23:16:17
Problema Hashuri Scor 0
Compilator c Status done
Runda Arhiva educationala Marime 2.61 kb
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 64

char ***s;


void create(int nv,int lv)
{
    int i,j;

    s = (char***) malloc((nv+1) * sizeof(char**));

    for (i = 1; i <= nv; i++)
    {
        s[i] = (char **) malloc((lv+1) * sizeof(char*));
        for (j = 1; j <= lv; j++)
            s[i][j] = (char*) malloc(16 * sizeof(char));
    }
}

void delete_s(int nv,int lv)
{
    int i,j;

    for(i = 1; i <= nv; i++)
        {
            for(j = 1; j <= lv; j++)
                free(s[i][j]);
            free(s[i]);
        }
    free(s);
}

int convertStringToInt(char *ss)
{
    int x = 0, flag = 0, i;

    if(ss[0]=='-')
        flag = 1;

    for(i=flag;i<strlen(ss);i++)
        {
            x*=10;
            x+=ss[i] - '0';
        }

    if(flag)
        x*=-1;

    return x;
}

char* convertIntToString(int x)
{
    char p[16]="0\0",q[16]="";
    int i=0;

    if(x<0)
    {
        q[0]='-';
        x*=-1;
    }

    while(x)
    {
        p[++i] = x%10 + '0';
        x/=10;
    }

    strrev(p);
    strcat(q,p);
    q[strlen(q)-1]='\0';
    if(strcmp(q,"")==0)
        strcpy(q,"0");

    return q;
}

int check(char *ss)
{
    int i;

    if((ss[0]-'0' < 0 || ss[0]-'0' > 9) && ss[0]!='-')
        return 0;

    for(i=1;i<strlen(ss);i++)
        if(ss[i]-'0' < 0 || ss[i]-'0' > 9)
            return 0;

    return 1;
}

void vector(int lv, char **a, char **b)
{
    int i,aux;
    for(i=1;i<=lv;i++)
    {
        aux = convertStringToInt(a[i]) + convertStringToInt(b[i]);
        strcpy(a[i],convertIntToString(aux));
    }
}

void read(int nv, int lv)
{
    int i,j,flag=1;
    char blank[5];
    gets(blank);    //in gol

    for(i=1;i<=nv;i++)
    {
        for(j=1;j<=lv;j++)
        {
            printf("sir%d[%d] = ",i,j);
            gets(s[i][j]);
            if(!check(s[i][j]))
                {
                    flag = 0;
                    printf("\nERROR - %s is NaN", s[i][j]);
                    break;
                }
        }
        if(!flag)   break;

        if(i!=1)
            vector(lv,s[i-1],s[i]);
    }
}

void print(int nv, int lv)
{
    int i,j;
    for(i=1;i<nv;i++)
    {
        printf("\nsir%d-sir%d: ",i,i+1);
        for(j=1;j<=lv;j++)
            printf("%s ", s[i][j]);
    }
}

int main()
{
    int lv,nv;
    printf("Lungimea vectorilor: ");
    scanf("%d",&lv);
    printf("Numarul vectorilor: ");
    scanf("%d",&nv);

    create(nv,lv);
    read(nv,lv);
    print(nv,lv);
    delete_s(nv,lv);

    return 0;
}