Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > Задачки


Автор: NV 27.12.2005, 13:02
Не знаете как делать следующие задачки:

. Записать сложную функцию на естественном языке.
void * ( * j ) ( int * [3], char ( * ) [4]);
2. #include <stdio.h>
int a[] = {8, 7, 6, 5, 4 };
int *p[] = {a, a+1, a+2, a+3, a+4};
int **pp = p;
int main(int argc, char* argv[])
{
printf("*a=%d **p=%d **pp=%d/n", *a, **p, **pp);
pp++;
printf("*a=%d **p=%d **pp=%d/n", pp-p, **pp - a, **pp);
++*pp;
printf("*a=%d **p=%d **pp=%d/n", pp-p, *pp - a, **pp);
pp=p;
++**pp;
printf("*a=%d **p=%d **pp=%d/n", pp-p, *pp - a, **pp);
return 0;
}
что будет выведено на печать?
3. реализовать функцию, в которую передается двумерный квадратный массив int и его размерность. функция должна заполнить массив числами, начиная от 1 "улиткой".
4. переписать без использования реккурсии,описать, что выполняет функция:
void xyz(char *р) { xyz1(p, strlen(p)); }
void xyz1(char*p, int n)
{
if (n > 1)
{
char c;
c = *p;
p[0] = p[n-1];
*(p+n-1) = c;
xyz1(++p, n-2);
}
}
5. переписать с использованием оператора for и без оператора goto:
int i = 10;
p1: while(i < 30)
{
char c;
if ((c = getchar()) == 'a')
goto p1;
if (c == 'b')
goto p2;
printf ("%d\n", i);
p2: i++;
}
6. реализовать функцию int atoi(const char *str), которая переводит число, записанное в строке, в целое (как отрицательное, так и положительное). В случае ошибки при переводе функция должна возвращать число 0. (Функциями стандартной библиотеки пользовать нельзя.)
7. Разработать программу подсчета количества строк\слов\символов. Прграмма получает на поток стандарто\ного ввода поток символов, по нему она должна подсчитать количество строк\слов\символов, результаты подсчета должна выдать на поток стандартного вывода. (Конец строки - '\n', разделительслов - ' ' или '\n'; последняя строка и слово могут быть ничем не завершены).

Автор: Exekutor 27.12.2005, 13:05
Цитата

2. #include <stdio.h>
int a[] = {8, 7, 6, 5, 4 };
int *p[] = {a, a+1, a+2, a+3, a+4};
int **pp = p;
int main(int argc, char* argv[])
{
printf("*a=%d **p=%d **pp=%d/n", *a, **p, **pp);
pp++;
printf("*a=%d **p=%d **pp=%d/n", pp-p, **pp - a, **pp);
++*pp;
printf("*a=%d **p=%d **pp=%d/n", pp-p, *pp - a, **pp);
pp=p;
++**pp;
printf("*a=%d **p=%d **pp=%d/n", pp-p, *pp - a, **pp);
return 0;
}


Когда оформляем код -- используем ТОЛЬКО [code=cpp][/code] чтобы было удобнее читать. Это правило а не рекомендация![quote]

Автор: NV 27.12.2005, 13:24
Записать сложную функцию на естественном языке.
Код

void * ( * j ) ( int * [3], char ( * ) [4]);
2. #include <stdio.h>
int a[] = {8, 7, 6, 5, 4 };
int *p[] = {a, a+1, a+2, a+3, a+4};
int **pp = p;
int main(int argc, char* argv[])
{
printf("*a=%d **p=%d **pp=%d/n", *a, **p, **pp);
pp++;
printf("*a=%d **p=%d **pp=%d/n", pp-p, **pp - a, **pp);
++*pp;
printf("*a=%d **p=%d **pp=%d/n", pp-p, *pp - a, **pp);
pp=p;
++**pp;
printf("*a=%d **p=%d **pp=%d/n", pp-p, *pp - a, **pp);
return 0;
}

что будет выведено на печать?
3. реализовать функцию, в которую передается двумерный квадратный массив int и его размерность. функция должна заполнить массив числами, начиная от 1 "улиткой".
4. переписать без использования реккурсии,описать, что выполняет функция:
Код

void xyz(char *р) { xyz1(p, strlen(p)); }
void xyz1(char*p, int n)
{
if (n > 1)
{
char c;
c = *p;
p[0] = p[n-1];
*(p+n-1) = c;
xyz1(++p, n-2);
}
}


5. переписать с использованием оператора for и без оператора goto:
Код

int i = 10;
p1: while(i < 30)
{
char c;
if ((c = getchar()) == 'a')
goto p1;
if (c == 'b')
goto p2;
printf ("%d\n", i);
p2: i++;
}

6. реализовать функцию int atoi(const char *str), которая переводит число, записанное в строке, в целое (как отрицательное, так и положительное). В случае ошибки при переводе функция должна возвращать число 0. (Функциями стандартной библиотеки пользовать нельзя.)
7. Разработать программу подсчета количества строк\слов\символов. Прграмма получает на поток стандарто\ного ввода поток символов, по нему она должна подсчитать количество строк\слов\символов, результаты подсчета должна выдать на поток стандартного вывода. (Конец строки - '\n', разделительслов - ' ' или '\n'; последняя строка и слово могут быть ничем не завершены).


Автор: MAKCim 27.12.2005, 13:48
1.
Указатель на функцию, которая получает в качестве параметров массив из 3-х указателей на int (будет проинтерпретировано int**), указатель на массив из 4-х char и возвращает void*
3.
Код

void set(int** matirx, int m, int n)
{
    if (m>0 && n>0)
    {
        int i=1,t=1,p=0,q=n;
        for (j=0; j<m; j++)
        {
            do
            {
                matrix[j][p]=t++;
                p+=i;
            }
            while (p!=q);
            q=q==n ? -1: n; 
            i*=-1;
            p+=i;
        }
    }
}

4.
Симметричый обмен, например char* p="stroustroup" -> "puortsuort"
без рекурсии
Код

void new_string(char* p)
{
    int size=strlen(p), i;
    for (i=0; i<size/2; i++) 
    {
        char k=p[i];
        p[i]=p[n-i-1];
        p[n-i-1]=k;
    }
}

6.
Код

int atoi(const char* s)
{
    int t=0,i=strlen(s);
    const int min=48,max=57;
    const char minus='-';
    while (i>=0)
    {
        if (s[i]>=min && s[i]<=max)
        {
            int j=10, r=t;
            t=0;
            while (r>0)
            {
                t+=(r%10)*j;
                j*=10;
                r/=10;
            }
            t+=s[i]-min;
        }
       else if (s[i]==minus && i==0) t*=-1;
       else t=0, i=-1;
       i--;
    }
    return t;
}

пока все

ps. задачи-то простые

Автор: NV 27.12.2005, 13:57
Спасибо буду разбираться

Автор: Romikgy 27.12.2005, 14:49
Цитата(MAKCim @ 27.12.2005, 12:48)

Код

int atoi(const char* s)
{
    int t=0,i=strlen(s);
    const int min=48,max=57;
    const char minus='-';
    while (i>=0)
    {
        if (s[i]>=min && s[i]<=max)
        {
            int j=10, r=t;
            t=0;
            while (r>0)
            {
                t+=(r%10)*j;
                j*=10;
                r/=10;
            }
            t+=s[i]-min;
        }
       else if (s[i]==minus && i==0) t*=-1;
       else t=0, i=-1;
       i--;
    }
    return t;
}


Имхо лучше так
Код

int atoi(const char* s)
{
    int t=0,i=strlen(s)-1,z=1,len=i,step=1;
    const int min=48,max=57;
    const char minus='-';
    while (i>=0)
    {
        if (s[i]>=min && s[i]<=max)
        {
          step=1;
          for (int x=0;x<(len-i);x++) step*=10;
          t+=(s[i]-min)*step;  
        }
       else if (s[i]==minus && i==0) z=-1;
       else t=0;
       i--;
    }
    return (z*t);
}

Автор: MAKCim 27.12.2005, 21:53
Цитата

Имхо лучше так
Код

int atoi(const char* s)
{
    int t=0,i=strlen(s)-1,z=1,len=i,step=1;
    const int min=48,max=57;
    const char minus='-';
    while (i>=0)
    {
        if (s[i]>=min && s[i]<=max)
        {
          step=1;
          for (int x=0;x<(len-i);x++) step*=10;
          t+=(s[i]-min)*step;  
        }
       else if (s[i]==minus && i==0) z=-1;
       else t=0;
       i--;
    }
    return (z*t);
}



согласен

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)