Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задачки 
:(
    Опции темы
NV
Дата 27.12.2005, 13:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не знаете как делать следующие задачки:

. Записать сложную функцию на естественном языке.
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 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 440
Регистрация: 1.11.2005
Где: Казахстан. Костан ай

Репутация: нет
Всего: 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;
}


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

Это сообщение отредактировал(а) Exekutor - 27.12.2005, 13:07


--------------------
[color=blue][size=2]En taro addun, ma sol larinas[/size][/color]
PM MAIL   Вверх
NV
Дата 27.12.2005, 13:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Записать сложную функцию на естественном языке.
Код

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 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



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. задачи-то простые


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
NV
Дата 27.12.2005, 13:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо буду разбираться
  Вверх
Romikgy
Дата 27.12.2005, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 9
Всего: 146



Цитата(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);
}



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
MAKCim
Дата 27.12.2005, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 6
Всего: 207



Цитата

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

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);
}



согласен


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0798 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.