MyTestInC

 avatar
unknown
c_cpp
a year ago
4.1 kB
3
Indexable
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

#define M 7
#define N1 5
#define N2 4

typedef struct {
    int mark1, mark2;
}marks;

typedef struct {
    char name[20];
    int id;
    marks m;
}talmid;

void print_talmid(talmid t[], int n) {
    for (int i = 0; i < n; i++) {
        //I wrote : printf("Name: %s, ID: %d, avg: %lf, : \n", t[i].name, t[i].id, ((t[i].m.mark1+t[i].m.mark2)/2));
        printf("Name: %s, ID: %d, avg: %lf, : \n", t[i].name, t[i].id, ((t[i].m.mark1+t[i].m.mark2)/2.0));
    }
}

void print_talmid_ptr(talmid* t[], int n) {
    for (int i = 0; i < n; i++) {
        //I wrote : printf("Name: %s, ID: %d, avg: %lf, : \n", t[i]->name, t[i]->id, ((t[i]->m.mark1 + t[i]->m.mark2)/2));
        printf("Name: %s, ID: %d, avg: %lf, : \n", t[i]->name, t[i]->id, ((t[i]->m.mark1 + t[i]->m.mark2)/2.0));
    }
}

talmid** mergeTalmid(talmid a[], int n1, talmid b[], int n2)
{
    talmid** t;
    int i = 0, j = 0, k = 0;
    t =(talmid**) malloc((n1 + n2) * sizeof(talmid*));
    assert(t != NULL);
    while (i < n1 && j < n2) 
    {
        if (strcmp(a[i].name, b[j].name) < 0) {
            t[k++] = a + (i++);
        } 
        else if (strcmp(a[i].name, b[j].name) > 0)
        {
            t[k++] = b + j;
            j++;
        } 
        else
        {
            t[k++] = a + (i++);
            t[k++] = b + j;
            j++;
        }
    }

    while (i < n1) {
        t[k++] = a + (i++);
    }

    while (j < n2) {
        t[k++] = b + j;
        j++;
    }

    return t;
}


char* Q2(char** A){
    int i = 0;
    char *p;  
    p = (char *)malloc(sizeof(char)*( strlen(*A) +1 )); 
    assert(p != NULL);
    strcpy(p,A[i++]); 
    while(i < M) 
    { 
        if(strstr(*A, *(A+i))) 
        {
            p = (char*)realloc(p, sizeof(char)*(strlen(p) + strlen(*(A+i))+1)); 
            assert(p != NULL);
            strcat(p, *(A+i)); 
        }
        i++; 
    }
    return p;
}


char* Q2Correct(char** A) {
    int i = 0;
    char *p;  
    p = (char *)malloc(sizeof(char)*(strlen(*(A+M-1)) + 1));
    assert(p != NULL);
    strcpy(p, *(A+M-1-(i++))); 
    while (i < M) { 
        if (strstr(*(A+M-1), *(A+M-1-i))) { 
            p = (char*)realloc(p, sizeof(char)*(strlen(p) + strlen(*(A+M-1-i)) + 1));
            assert(p != NULL);
            strcat(p, *(A+M-1-i)); 
        }
        i++;
    }
    return p;
}

typedef struct s1 
{
    int code;
    char* color;
    struct s1* p;
}s1;

int main() {
    int aa[10] = {10,20,30,40,50,60,90,100};
    char* clr[5]={"white", "pink", "black", "red", "blue"};
    s1 arr1[4] = {
        {*(aa+6)+1, clr[3], arr1 + 3},
        {aa[9], *clr+1, arr1},
        {*aa+5, *(clr + 4), arr1 + 1},
        {*aa * 5, *(clr + 3) + 1, arr1 +2}
    };

    s1* pa[4] = {arr1+1, arr1+2, arr1+3, arr1};
    s1** pp = pa + 1;

    printf("1. %s\n", pa[1]->p->color);
    printf("2. %s\n", ((*(pp+2))->p->p->color));
    printf("3. %d\n", --(pa[2]->code));
    pp++;
    printf("4. %c\n", (*(**(pa)).color));
    printf("5. %s\n", (*(pa+3))->p->color);
    printf("6. %d\n", (pp[-2]->p->code));
    printf("7. %s\n", pp[-1]->p->color);
    printf("8. %c\n\n", (*(*pp)->p->color));



    char* s[M] = {"12abc", "1523", "aaa", "4124", "112" , "aaa2" , "12"};
    char* ptr1 = Q2(s);
    if (ptr1) {
        puts(ptr1);
        free(ptr1);
    }
      
    printf("\n\n");

    talmid a[N1] = {
    {"Alice", 2, {75, 80}},
    {"Bob", 3, {88, 90}},
    {"Charlie", 5, {70, 75}},
    {"Eve", 4, {95, 100}},
    {"John", 1, {90, 85}}
    };

    talmid b[N2] = {
    {"David", 6, {85, 90}},
    {"Frank", 8, {90, 95}},
    {"Grace", 7, {80, 85}},
    {"Helen", 9, {78, 82}}
    };


    printf("Array a:\n");
    print_talmid(a, N1);
    printf("\nArray b:\n");
    print_talmid(b, N2);


    talmid** merged = mergeTalmid(a, N1, b, N2);


    printf("\nMerged Array:\n");
    print_talmid_ptr(merged, N1 + N2);


    free(merged);
    return 0;
}

Editor is loading...
Leave a Comment