Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

с++ шикарные Задачки на Функции

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> с++ шикарные Задачки на Функции
Имя
Сообщение << Старые топики   Новые топики >>
с++ шикарные Задачки на Функции - 2008-11-22 20:29:06.173333   
bootycat

Сообщений: 10
Оценки: 0
Присоединился: 2008-10-15 19:29:38.580000
Привет :) Я как-то уже спрашивал у вас что-то по Си++, и помню это очень помогло, сенкс.
Сейчас застрял на 2 задачах, ну никак не получается решить.


1. а)Написать функцию выделения слова из строки. Ф-я выделения слова- функция, которая запихивает это слово в новый массив
б)Используя функцию (а), определить общее количество слов(не чисел) в строке.
—————————————
Я не представляю, как это делать. Вводил переменную типа string, принимал значение getline. А как найти кол-во слов-не знаю. Искать пробелы? но как выделить символы между ними и вставить в другой массив/
А потом- даже если у менея получится написать эту ф-ю выделения, как посчитать количество слов в строке с помощью нее?бррр.



2. а)Написать две функции: 1)поиска кол-ва элементов в массиве, равных заданному значению;
                         2)определения максимума в массиве
б)Используя функции (а), найти в массиве количество элементов, равных максимуму.

—————————-
тут тож завал//
Даж массив принять не могу (вот да фак?)
Программа комиплруется , принимает размер масива, но потом до умопосинения принимает в него значения, при том что цикл принятия данных в масисв должн ограничиваться его размером
#include &lt;iostream&gt; #include &lt;conio.h&gt; using std::cin; using std::cout; int size; int *massiv= new int[size]; int main(){ cout&lt;&lt;"Vvvedite razmer massiva: "; int size; cin&gt;&gt;size; int *massiv= new int[size]; for(int i=0;i&lt;size,++i;){ cin&gt;&gt;massiv[i];} for(int i=0;i!=size,i++;)cout&lt;&lt;massiv; getch(); }

Потом мне интересно, если кроме майна у меня будет другая ф-я, то как сделать, чтобы в ней тоже была доступна переменная size, которую я принял в мэйне?



Фааак, Я надеюсь на вас парни.
Пошел пытаться дальше, но чет уже глазки трескаются
Post #: 1
RE: с++ шикарные Задачки на Функции - 2008-11-22 20:32:39.063333   
rtw

Сообщений: 1372
Оценки: 0
Присоединился: 2004-08-19 00:28:05
quote:

1. а)Написать функцию выделения слова из строки. Ф-я выделения слова- функция, которая запихивает это слово в новый массив
б)Используя функцию (а), определить общее количество слов(не чисел) в строке.

Есть 2 пути:
1. Отлавливать спец. символ конца слова (скажем пробел или ";")
2. Сравнивать по словарю введенных в массив значений

quote:

2. а)Написать две функции: 1)поиска кол-ва элементов в массиве, равных заданному значению;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)определения максимума в массиве
б)Используя функции (а), найти в массиве количество элементов, равных максимуму.


1. int find(int myArray[defined_value], elem)
{
for(int counter = 0; counter < defined_value; counter++)
{if (elem == myArray[counter])  return counter;  break;
}
}
сам поправишь под нужды


Размер массива должен быть определен до компиляции программы. 
Post #: 2
RE: с++ шикарные Задачки на Функции - 2008-11-22 20:51:41.513333   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
Ну…ща конечно тебе помогут,но ты бы почитал чего нить,а то шокируешь. К вопросам: 1) strtok() разбивает строку,в качестве разделителя укажи пробел,непустые строки будут словами.  2)
quote:

то как сделать, чтобы в ней тоже была доступна переменная size
Жжошь…ты в функцию параметр передать не можешь?))  Код просто плох. Память не удалил,"return 0" нет, стр 4,5 не надо,i объявлена дважды (я к тому что не надо рассказывать что у тебя это компилировалось),но это не главное…ТЫ ЦИКЛ НАПИСАТЬ НЕ МОЖЕШЬ!!! for(int i=0;i<size,++i;) - ересь."  for( i=0;i<size;i++)  "  - вот так.
#include &lt;iostream&gt;
#include &lt;conio.h&gt;
using std::cin; using std::cout;

int main(){
cout&lt;&lt;"Vvvedite razmer massiva: ";
int size;
cin&gt;&gt;size;
int *massiv= new int;
int i;
for( i=0;i&lt;size;i++)
{
&nbsp;cin&gt;&gt;*(massiv+i);
}

for( i=0;i&lt;size;i++)
{
cout&lt;&lt;*(massiv+i);
cout&lt;&lt;"\n";
}
delete [] massiv;
getch();
return 0;
}
Теперь работает.Выучи си без плюсов.И хоть что то пойми сам,без этого правда будет никак.
Post #: 3
RE: с++ шикарные Задачки на Функции - 2008-11-23 00:54:11.403333   
Mamka

Сообщений: 560
Оценки: 0
Присоединился: 2007-11-26 22:20:09.313333
quote:

Выучи си без плюсов.


ээээм…без этого плюсы не познатЬ?))
Post #: 4
RE: с++ шикарные Задачки на Функции - 2008-11-23 01:03:29.936666   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
 Да,хотя бы основы.Просто так можно будет не замусоривая себя конструкциями языка разобраться в сути многих вещей (как строки сделаны тут и как массивы)…а потом перейти уже ко всему остальному.ИМХО.
Post #: 5
RE: с++ шикарные Задачки на Функции - 2008-11-24 11:56:41.833333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Genco

но это не главное…ТЫ ЦИКЛ НАПИСАТЬ НЕ МОЖЕШЬ!!! for(int i=0;i&lt;size,++i;) - ересь."&nbsp; for( i=0;i&lt;size;i++)&nbsp; "&nbsp; - вот так.


поздравляю вас, господин соврамши. может, ещё перечислишь ошибки оригинального варианта? он, между прочим, куда корректней твоего, и с "ЦИКЛ НАПИСАТЬ" проблемы тут скорей не у топикстартера, а у тебя

UPD. ну, почти. for(int i = 0; i < size; ++i) - вот где-то так было бы совсем хорошо :)
Post #: 6
RE: с++ шикарные Задачки на Функции - 2008-11-24 13:14:44.113333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
2. (\list -> length $ filter (== maximum list) list). ты всё ещё уверен, что хочешь учить C/C++? :)
Post #: 7
RE: с++ шикарные Задачки на Функции - 2008-11-24 13:29:33.933333   
Archivarius

Сообщений: 164
Оценки: 0
Присоединился: 2008-10-26 00:16:25.630000

quote:

ORIGINAL: Denaturat

2. (\list -&gt; length $ filter (== maximum list) list). ты всё ещё уверен, что хочешь учить C/C++? :)
Стесняюсь спросить.. Что это?

Post #: 8
RE: с++ шикарные Задачки на Функции - 2008-11-24 14:14:42.170000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Archivarius

Стесняюсь спросить.. Что это?


это описание требуемой функции, синтаксис взят из Haskell (Gopher, Miranda),- как наиболее близкого к математической нотации

(\list -> length $ filter (== maximum list) list)

строчка объявляетя лямбда-абстракцию (функцию) с параметром list, над которым выполняются следующие действия: находим максимум в списке (maximum list), оставляем в списке только значения, равные максимуму (filter (== maximum list) list), считаем длинну полученного списка (то есть их количество)

если это писать именно на Haskell, то благодаря его ленивости, результат будет ещё и более-менее оптимальным - вычисляться будет только то, что реально нужно
Post #: 9
RE: с++ шикарные Задачки на Функции - 2008-11-24 15:34:34.746666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
А ничего, что изначально задача должна решаться на cpp?
Post #: 10
RE: с++ шикарные Задачки на Функции - 2008-11-24 15:50:48.380000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: _SaZ_

А ничего, что изначально задача должна решаться на cpp?


лень. да и написали ему уже решение на C++, хоть и страшное как моя жизнь
Post #: 11
RE: с++ шикарные Задачки на Функции - 2008-11-24 19:36:13.636666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

Потом мне интересно, если кроме майна у меня будет другая ф-я, то как сделать, чтобы в ней тоже была доступна переменная size, которую я принял в мэйне?


это интересный на самом деле вопрос. C - процедурный язык, в котором процедуры могут работать как функции (но не являются при этом first-class value); стало быть для передачи значения в процедуру ты можешь воспользоваться либо функциональным подходом (передать в качестве параметра), либо процедурным (объявить переменную глобальной по отношению к функции, либо передать в качестве параметра указатель на переменную). примеры нужны?
Post #: 12
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:07:05.133333   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
quote:

поздравляю вас, господин соврамши
Таак!! Кто тут бочку катит?! Я не собирался писать правильный вариант,просто указал почему лично его не работает как таковой.(получилась программа выводящая чиселки,ответ на "Даж массив принять не могу (вот да фак?) "). Хочется - делай,токо тогда на С/С++ ,или понты дороже денег? ;)
Post #: 13
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:12:49.666666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Genco

Таак!! Кто тут бочку катит?! Я не собирался писать правильный вариант,просто указал почему лично его не работает как таковой.(получилась программа выводящая чиселки,ответ на "Даж массив принять не могу (вот да фак?) "). Хочется - делай,токо тогда на С/С++ ,или понты дороже денег? ;)


о, человек с чувством юмора :) рекость на этом форуме

мои претензии к тебе - давая совет ты дважды испортил программу: отказался от более локального определения счётчика, отказался от префиксной формы инкремента. то, что она в результате всё равно работает (возможно даже правильно) - не так существенно. маленьким врать нехорошо!

а решение я не просто так написал на Haskell - такая форма записи хорошо показывает тривиальность задачи: тут вообще не над чем мозг напрячь, это скучно-скучно-скучно-скучно

очень скучно. хочешь чтобы я что-то написал - усложни задачу. тут мне делать нечего
Post #: 14
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:22:52.873333   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
Признаю критику про счетчик.А я то хотеть не хочу - это же ТС надо на самом деле,потому и задача такая)). 
Post #: 15
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:25:40.310000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Genco

Признаю критику про счетчик


а про префиксную форму? могу объяснить в чём подвох
Post #: 16
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:35:08.516666   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
Эмм….да,если можно))
Post #: 17
RE: с++ шикарные Задачки на Функции - 2008-11-24 23:14:16.143333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Genco

Эмм….да,если можно))


префиксная форма инкремента (++i) выполняет инкремент и возвращает новое значение переменной
постфиксная форма инкремента (i++) выполняет инкремент и возвращает старое значение переменной
на примерах так:

i = 0;
a = ++i;
теперь i = 1, a = 1

i = 0;
a = i++;
теперь i = 1, a = 0

в случае когда мы не используем значение, возвращаемое оператором инкремента (например, в цикле for как в примере) оказываемый эффект ничем не различается. однако отличается скорость выполнения: если рассмотреть псевдокод реализации префиксного и постфиксного инкремента, получится что-то подобное:

++i
{
i = i + 1
return i
}

i++
{
temp = i
i = i + 1
return temp
}

итого на одну временную переменную и на одну операцию присваивания больше

для C, единственными итераторами которого являются указатели, это несущественно - все эти операции занимают считанные такты процессорного времени, да и памяти перевыделяется мизерное количество. а вот в C++ итератор может быть достаточно объемным классом, со сложной семантикой копирования - и пренебрежение разницей между префиксной и постфиксной формой может стоить существенных потерь в производительности приложения

итого одно из правил борьбы с преждевременной пессимизацией в C++ - всегда использовать префиксную форму инкремента/декремента, кроме тех случаев когда действительно необходимо получить предыдущее значение счётчика
Post #: 18
RE: с++ шикарные Задачки на Функции - 2008-11-24 23:38:05.153333   
Genco

Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
 Отличия я знаю,результат разный не из за того что инкремент что то возвращает,а из за того что приоритет выполнения у префиксного меньше.(Не помню как точно называется,кароч порядок выполнения операторов) Потому сначала выполнится "=" или постфиксный. Однако остальное похоже на правду,пасиба. 
Post #: 19
RE: с++ шикарные Задачки на Функции - 2008-11-24 23:39:24.810000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Genco

&nbsp;Отличия я знаю,результат разный не из за того что инкремент что то возвращает,а из за того что приоритет выполнения у префиксного меньше.(Не помню как точно называется,кароч порядок выполнения операторов) Потому сначала выполнится "=" или постфиксный. Однако остальное похоже на правду,пасиба.&nbsp;


ты ошибаешься. мне лень цитировать стандарт, но если будешь упрямиться - сделаю это завтра
Post #: 20
RE: с++ шикарные Задачки на Функции - 2008-11-25 00:40:26.690000   
Archivarius

Сообщений: 164
Оценки: 0
Присоединился: 2008-10-26 00:16:25.630000
Хм. C++ из Visual Studio 2005
Програмка: int main() {  int a=1;  int b;  b=a++;  b=++a;  return 0; }Ассемблерный листинг:b=a++; 00411385 mov eax,dword ptr [a]  00411388 mov dword ptr [b],eax  0041138B mov ecx,dword ptr [a]  0041138E add ecx,1  00411391 mov dword ptr [a],ecx   b=++a; 00411394 mov eax,dword ptr [a]  00411397 add eax,1  0041139A mov dword ptr [a],eax  0041139D mov ecx,dword ptr [a]  004113A0 mov dword ptr [b],ecx Одинаковое количество команд. [sm=bl.gif]
Post #: 21
RE: с++ шикарные Задачки на Функции - 2008-11-25 04:27:48.530000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
И что тебя смущает? A++ и ++A - абсолютно одинаковые операции… только вот приоритет у них разный.
Post #: 22
RE: с++ шикарные Задачки на Функции - 2008-11-25 04:30:19.686666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333

quote:

ORIGINAL: Denaturat

префиксная форма инкремента (++i) выполняет инкремент и возвращает новое значение переменной
постфиксная форма инкремента (i++) выполняет инкремент и возвращает старое значение переменной
на примерах так:



Постфиксная форма сначала возвращает значение переменной, а потом делает инкремент. Актуально для перегруженных ++ ;).
Post #: 23
RE: с++ шикарные Задачки на Функции - 2008-11-25 12:53:20.480000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: _SaZ_

Постфиксная форма сначала возвращает значение переменной, а потом делает инкремент. Актуально для перегруженных ++ ;).


http://www.gotw.ca/gotw/002.htm
Post #: 24
RE: с++ шикарные Задачки на Функции - 2008-11-25 13:08:24.670000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: Archivarius

Хм. C++ из Visual Studio 2005
Програмка:&nbsp;int main() { &nbsp;int a=1; &nbsp;int b; &nbsp;b=a++; &nbsp;b=++a; &nbsp;return 0; }Ассемблерный листинг:b=a++; 00411385 mov eax,dword ptr [a]&nbsp; 00411388 mov dword ptr ,eax&nbsp; 0041138B mov ecx,dword ptr [a]&nbsp; 0041138E add ecx,1&nbsp; 00411391 mov dword ptr [a],ecx&nbsp; &nbsp;b=++a; 00411394 mov eax,dword ptr [a]&nbsp; 00411397 add eax,1&nbsp; 0041139A mov dword ptr [a],eax&nbsp; 0041139D mov ecx,dword ptr [a]&nbsp; 004113A0 mov dword ptr ,ecx Одинаковое количество команд.&nbsp;[sm=bl.gif]


а теперь попробуй вывести на экран значения и посмотри листинги ещё раз. ты ведь оптимизацию не выключал, правда?
Post #: 25
RE: с++ шикарные Задачки на Функции - 2008-11-25 13:11:17.486666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: _SaZ_

Постфиксная форма сначала возвращает значение переменной, а потом делает инкремент. Актуально для перегруженных ++ ;).


актуально для любых инкремента и декремента
Post #: 26
RE: с++ шикарные Задачки на Функции - 2008-11-25 13:16:33.020000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: _SaZ_

И что тебя смущает? A++ и ++A - абсолютно одинаковые операции… только вот приоритет у них разный.


5.2.6.1 (Increment and decrement): "The value obtained by applying a postfix ++ is the value that the operand had before applying the operator. [Note: the value obtained is a copy of the original value]"

тебе слово copy перевести или как?
Post #: 27
RE: с++ шикарные Задачки на Функции - 2008-11-25 17:43:08.903333   
Archivarius

Сообщений: 164
Оценки: 0
Присоединился: 2008-10-26 00:16:25.630000

quote:

ORIGINAL: Denaturat

а теперь попробуй вывести на экран значения и посмотри листинги ещё раз. ты ведь оптимизацию не выключал, правда?
Исходник:#include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a=1; int b; b=a++; printf("%i",b); b=++a; printf("%i",b); return 0; } Листинг:b=a++;   mov eax,dword ptr [a]   mov dword ptr [b],eax   mov ecx,dword ptr [a]   add ecx,1   mov dword ptr [a],ecx printf("%i",b);   mov esi,esp    mov eax,dword ptr [b]    push eax     push offset string "%i" (41563Ch)    call dword ptr [__imp__printf (4182B8h)]    add esp,8    cmp esi,esp    call @ILT+310(__RTC_CheckEsp) (41113Bh)  b=++a;   mov eax,dword ptr [a]    add eax,1    mov dword ptr [a],eax    mov ecx,dword ptr [a]    mov dword ptr [b],ecx  printf("%i",b);   mov esi,esp    mov eax,dword ptr [b]    push eax     push offset string "%i" (41563Ch)    call dword ptr [__imp__printf (4182B8h)]    add esp,8    cmp esi,esp    call @ILT+310(__RTC_CheckEsp) (41113Bh)
Post #: 28
RE: с++ шикарные Задачки на Функции - 2008-11-25 18:03:23.350000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
значит либо MSVS 2005 использует излишне агрессивную оптимизацию, либо они ложили на стандарт - что тоже бывает. цитату из оного по данному вопросу я выше привёл

вариант ответа по подобному листингу:

quote:

Depends what the type of x is and what the rest of the expression is. With built in types, the difference is negligable to non-existant as the compilers are pretty good about optimizing either case. In the case of user defined operator++ functions, it depends on the definition of the function, but usually the x++ case returns a copy of the object and ++x returns a reference so the former is less efficient


для встроенных типов оптимизатор мог свести оба варианта к одинаковому набору ASM-комманд, поскольку копирование POD-типа не имеет сайд-эффектов; однако даже на такую оптимизацию полагаться не стоит
Post #: 29
RE: с++ шикарные Задачки на Функции - 2008-11-26 19:38:30.726666   
bootycat

Сообщений: 10
Оценки: 0
Присоединился: 2008-10-15 19:29:38.580000
Взял куски, что тут выложили, что то ыптался сделать, но посскольку я не представляю как сделать ф-ю и вызвать ее, у меня ничего не получилось. смотрел  в книжках, так и не понял. Вот что у меня есть
#include &lt;iostream&gt; #include &lt;conio.h&gt; using std::cin; using std::cout; int size; int *massiv= new int[size]; int elem, kol=0; //Ф-я поиска значений, равных числу int funFind(size,elem,massiv){ for(int counter = 0; counter &lt; size; ++counter) {if (elem == massiv[counter]) ++kol; return kol; break; } } int main(){ cout&lt;&lt;"Vvvedite razmer massiva: "; cin&gt;&gt;size; int i; for( i=0;i&lt;size;++i) { cin&gt;&gt;*(massiv+i); } for( i=0;i&lt;size;++i) { cout&lt;&lt;*(massiv+i); cout&lt;&lt;"\n"; } //delete [] massiv; cout&lt;&lt;"Vvedite element, kotorii xotite naiti: "; cin&gt;&gt;elem; cout&lt;&lt;funFind(size,elem,massiv); getch(); return 0; } ошибки в определении функции. Да и не понятно, как с помощью этой ф-ии выполнить заданиее

Подправте пожалуйста. Очень срочно нужно.(сегодня)
пс.
Так и не понял принцип обозначения пременных в скобках после названия ф-ии.
Так и не понял как передать значение ф-ии
Post #: 30
RE: с++ шикарные Задачки на Функции - 2008-11-26 19:49:33.716666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Теперь ещё раз напиши русским языком, без всяких "тут, вот, как-то так" и пр., нормально отформатированное задание.
Post #: 31
RE: с++ шикарные Задачки на Функции - 2008-11-26 19:59:33.970000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: bootycat

ошибки в определении функции. Да и не понятно, как с помощью этой ф-ии выполнить заданиее

Подправте пожалуйста. Очень срочно нужно.(сегодня)


вот тебе функции

int count(int const * const mass, const unsigned int size, const int val) { &nbsp;&nbsp;&nbsp; int counter = 0; &nbsp;&nbsp;&nbsp; for(int i = 0; i &lt; size; ++i) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(val == mass[i]) &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; ++counter; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; return counter; } int maximum(int const * const mass, const unsigned int size) { &nbsp;&nbsp;&nbsp; if(!size) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 0; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; int max = *mass; &nbsp;&nbsp;&nbsp; for(int i = 1; i &lt; size; ++i) &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; max = (max &lt; mass[i]) ? mass[i] : max; &nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp; return max; }
пример использования:
int test[] = {1, 10, 3, 4, 5, 10, 3, 10, 10};
std::cout << "maximum occurs " << count(test, 9, maximum(test, 9)) << " times" << std::endl;

неэффективно, но заданию соответствует

quote:

ORIGINAL: bootycat

Так и не понял принцип обозначения пременных в скобках после названия ф-ии.
Так и не понял как передать значение ф-ии


эти вопросы сформулируй отдельным постом, попробуем разобраться
Post #: 32
RE: с++ шикарные Задачки на Функции - 2008-11-26 20:23:31.526666   
bootycat

Сообщений: 10
Оценки: 0
Присоединился: 2008-10-15 19:29:38.580000
_SaZ_
Так вот же задание- 2 задачки

1. а)Написать функцию выделения слова из строки. Ф-я выделения слова- функция, которая записывает это слово в новый массив
б)Используя функцию (а), определить общее количество слов(не чисел) в строке.


2. а)Написать две функции: 1)поиска кол-ва элементов в массиве, равных заданному значению;
                         2)определения максимума в массиве
б)Используя функции (а), найти в массиве количество элементов, равных максимуму.

Denaturat
Yeeeaaah, Спасибо за помощь. Сейчас попробую с твоим кодом разобаться и написать.

Насчет вопросов-
1)Что и зачем вписывать funkciya(>>>СЮДА<<<){}  ?
Я так понимаю, переменные, которые будут использоваться в теле ф-ии. Нов  мейне мы их почему-то не пишем, и все нормально.

2)Допустим я определил значение переменной вне функций, сразу под инклюдами. В мэйн я дал  переменной значение 5. Потом вызвал ф-ю в которой используется эта переменная. Как передпть занчение=5 из мэна в ту ф-ю?

3) Имеет ли значение порядок функций..те
main(){}
funkcia(){}

=

funkcia(){}
main(){}
?
Post #: 33
RE: с++ шикарные Задачки на Функции - 2008-11-26 20:39:40.580000   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: bootycat

Насчет вопросов-
1)Что и зачем вписывать funkciya(&gt;&gt;&gt;СЮДА&lt;&lt;&lt;){}&nbsp; ?
Я так понимаю, переменные, которые будут использоваться в теле ф-ии. Нов&nbsp; мейне мы их почему-то не пишем, и все нормально.


функция - это чёрный ящик, получающий что-то на вход и возвращающий что-то в качестве результата. объявляя функцию, ты указываешь её сигнатуру: тип возвращаемого значения и тип каждого из получаемых значений

retType funcName(argType1 name1, argType2 name2, …, argTypeN nameN)

например, функция, вычисляющая сумму двух целых чисел, будет иметь такую сигнатуру:

int sum(int a, int b)

потому как должна получить два целых числа и вернуть тоже целое число - такова логика работы функции суммирования

функция main особенная, её нельзя вызвать и её параметры фиксированы стандартом

quote:

ORIGINAL: bootycat

2)Допустим я определил значение переменной вне функций, сразу под инклюдами. В мэйн я дал&nbsp; переменной значение 5. Потом вызвал ф-ю в которой используется эта переменная. Как передпть занчение=5 из мэна в ту ф-ю?


int a = 5, b = 6, res;

res = sum(a, b); // будет вызвана функция sum с параметрами 5 и 6 соответственно

quote:

ORIGINAL: bootycat

3) Имеет ли значение порядок функций..те
main(){}
funkcia(){}

=

funkcia(){}
main(){}
?


имеет значение порядок объявления функций - функция должна быть объявлена до своего первого вызова. порядок определения несущественнен

например

int sum(int, int); // здесь имена переменных можно опустить - ты их всё равно не используешь

int main()
{
  sum(5, 6);

  return 0;
}

int sum(int a, int b)
{
  return a + b;
}

это вполне корректный код

ещё вопросы?
Post #: 34
RE: с++ шикарные Задачки на Функции - 2008-11-26 20:46:20.486666   
bootycat

Сообщений: 10
Оценки: 0
Присоединился: 2008-10-15 19:29:38.580000
еее, 2 задачка решена :) огромное спаибо Denaturatу


насчет 1й-
вот что пока есть-
#include&lt;conio.h&gt; #include&lt;stdio.h&gt; #include&lt;iostream&gt; #include&lt;string&gt; using std::string; using std::cin;using std::cout;using std::endl; char*str2; //char* str; ХЗ почему, но с указателем не работает, только с массивом, определенным точно =/ char str[100]; int n,k, i,nom; void main(){ cout&lt;&lt;"\n vvedite stroki simvolov: ";&nbsp;&nbsp;&nbsp; gets(str); int l=strlen(str); str2=new char[l]; cout&lt;&lt;"\n vvedite nomer slova: "; cin&gt;&gt;k; for (i=0; i&lt;l; i++){ while (str[i]==' ')i++; n=i;nom++; while (str[i]!=' ')i++; if(nom==k){strncpy(str2, str+n, i-n); str2[i-n]='\0'; puts(str2);} } getch(); }
правда я все написал в main'е, тк не опнял, как заставить работать  и вызывать другие функции
хотя сейчас, рассматривая код 2 задачи начинаю потихоньку въезжать.

Так вот, хоть слово и выделяется, оно может быть и цифрой( а по заданию обязательно слово). Не знаю, как проверить.
Да и как с помощбю этой ф-ии посчитать кол-во слов, тоже ума  не приложу)

Post #: 35
RE: с++ шикарные Задачки на Функции - 2008-11-26 20:52:46.070000   
bootycat

Сообщений: 10
Оценки: 0
Присоединился: 2008-10-15 19:29:38.580000
Насчет вопросов, спасибо, что-то проясняется. Т.е. я так понял, что в фуекции и в мэне могут быть абсолютно разные переменные. Просто, когда я из мейна ее вызываю, переменные заменяются . Скажем,

fun(int A, int b){return A+b;};

main(){
int X=99
int Y=X-1

int blabla=fun(X,Y}
}



Еще очень насущный вопрос-
Зачем нужны указатели (*С)
 Вроде динамический массив можно создать только используя указатель. А указатель должен указывать на объект. Но мы определяем только указатель. Так где же сам массив и как он называется?
С указателями можно делать то же самое, что и с объектом, на который он указывает?
Post #: 36
RE: с++ шикарные Задачки на Функции - 2008-11-26 21:02:16.806666   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: bootycat

Насчет вопросов, спасибо, что-то проясняется. Т.е. я так понял, что в фуекции и в мэне могут быть абсолютно разные переменные. Просто, когда я из мейна ее вызываю, переменные заменяются . Скажем,

fun(int A, int b){return A+b;};

main(){
int X=99
int Y=X-1

int blabla=fun(X,Y}
}


когда ты вызываешь функцию (в данном случае fun), передавая ей имена каких-то переменных в качестве параметров, функция будет работать с копиями значений этих переменных

int a = 5;
int b = 6;

res(a, b) // функция будет работать так, как будто ты вызвал её как res(5, 6)
Post #: 37
RE: с++ шикарные Задачки на Функции - 2008-11-26 21:10:37.213333   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

ORIGINAL: bootycat

Еще очень насущный вопрос-
Зачем нужны указатели (*С)
Вроде динамический массив можно создать только используя указатель. А указатель должен указывать на объект. Но мы определяем только указатель. Так где же сам массив и как он называется?
С указателями можно делать то же самое, что и с объектом, на который он указывает?


указатели - самая сложная сущность в C, выолняющая сразу несколько задач
их правда сложно объяснить с нуля :)

в контексте вопроса указатель и массив это одно и то же
int mass[5] = {1, 2, 3, 4, 5};

mass[1] эквивалентно *(mass + 1), означает "получить значение, находящееся на расстоянии в один размер типа от того, на что указывает mass"

фишка динамического массива прежде всего в том, что память для него выделяется не на стеке, а в куче - потому и доступ к нему может быть только опосредованным, через указатель

с указателями можно делать многое - по сути это просто переменная, хранящая адрес; арифметические операции позволяют вокруг этого адреса перемещаться, а операция разыменования (унарный оператор "*", *ptr) - получить значение, на которое указатель указывает
Post #: 38
RE: с++ шикарные Задачки на Функции - 2008-11-26 21:43:14.086666   
bootycat

Сообщений: 10
Оценки: 0
Присоединился: 2008-10-15 19:29:38.580000
ну вот у меня в 1 задаче char*str2; это получаетс яуказатель на строку. а где сама строка то если это указатель? )
Post #: 39
RE: с++ шикарные Задачки на Функции - 2008-11-26 22:01:27   
Denaturat

Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
quote:

str2=new char[l];
quote:

ORIGINAL: bootycat

ну вот у меня в 1 задаче char*str2; это получаетс яуказатель на строку. а где сама строка то если это указатель? )


char * str;
это объявление указателя на тип char, т.е. то же самое что массив char'ов, т.е. то же самое что строка

как и любая другая переменная простого типа в C, по созданию она неинициализирована
чтобы в ней что-то было, это что-то туда надо занести:

str = new char[10];
это присваивание переменной адреса, начиная с которого была выделена память, достаточная для того, чтобы вместить 10 char'ов. теперь с этой памятью можно работать

вообще если ограничиваться чистым C, то здесь будет не new а malloc

для работы со строками в стандартной библиотеке C есть заголовочный файл string.h, смотри какие там объявлены функции - и используй. работать со строками C как с указателями или массивами - неудобно, хотя тоже можно:

str[0] = 'a';
str[1] = 'b';
*(str + 2) = 'c';
str[3] = '\0';

получили в str нуль-терминированную (корректную) строку, содержащую "abc"
Post #: 40
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> с++ шикарные Задачки на Функции







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.