с++ шикарные Задачки на Функции
Пользователи, просматривающие топик: 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 <iostream>
#include <conio.h>
using std::cin; using std::cout;
int size;
int *massiv= new int[size];
int main(){
cout<<"Vvvedite razmer massiva: ";
int size;
cin>>size;
int *massiv= new int[size];
for(int i=0;i<size,++i;){
cin>>massiv[i];}
for(int i=0;i!=size,i++;)cout<<massiv;
getch();
} Потом мне интересно, если кроме майна у меня будет другая ф-я, то как сделать, чтобы в ней тоже была доступна переменная size, которую я принял в мэйне? Фааак, Я надеюсь на вас парни. Пошел пытаться дальше, но чет уже глазки трескаются
|
|
|
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)поиска кол-ва элементов в массиве, равных заданному значению; 2)определения максимума в массиве б)Используя функции (а), найти в массиве количество элементов, равных максимуму. 1. int find(int myArray[defined_value], elem) { for(int counter = 0; counter < defined_value; counter++) {if (elem == myArray[counter]) return counter; break; } } сам поправишь под нужды Размер массива должен быть определен до компиляции программы.
|
|
|
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 <iostream> #include <conio.h> using std::cin; using std::cout; int main(){ cout<<"Vvvedite razmer massiva: "; int size; cin>>size; int *massiv= new int; int i; for( i=0;i<size;i++) { cin>>*(massiv+i); } for( i=0;i<size;i++) { cout<<*(massiv+i); cout<<"\n"; } delete [] massiv; getch(); return 0; } Теперь работает.Выучи си без плюсов.И хоть что то пойми сам,без этого правда будет никак.
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-23 00:54:11.403333
|
|
|
Mamka
Сообщений: 560
Оценки: 0
Присоединился: 2007-11-26 22:20:09.313333
|
quote:
Выучи си без плюсов. ээээм…без этого плюсы не познатЬ?))
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-23 01:03:29.936666
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Да,хотя бы основы.Просто так можно будет не замусоривая себя конструкциями языка разобраться в сути многих вещей (как строки сделаны тут и как массивы)…а потом перейти уже ко всему остальному.ИМХО.
|
|
|
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<size,++i;) - ересь." for( i=0;i<size;i++) " - вот так. поздравляю вас, господин соврамши. может, ещё перечислишь ошибки оригинального варианта? он, между прочим, куда корректней твоего, и с "ЦИКЛ НАПИСАТЬ" проблемы тут скорей не у топикстартера, а у тебя UPD. ну, почти. for(int i = 0; i < size; ++i) - вот где-то так было бы совсем хорошо :)
|
|
|
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++? :)
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 13:29:33.933333
|
|
|
Archivarius
Сообщений: 164
Оценки: 0
Присоединился: 2008-10-26 00:16:25.630000
|
quote:
ORIGINAL: Denaturat 2. (\list -> length $ filter (== maximum list) list). ты всё ещё уверен, что хочешь учить C/C++? :) Стесняюсь спросить.. Что это?
|
|
|
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, то благодаря его ленивости, результат будет ещё и более-менее оптимальным - вычисляться будет только то, что реально нужно
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 15:34:34.746666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
А ничего, что изначально задача должна решаться на cpp?
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 15:50:48.380000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: _SaZ_ А ничего, что изначально задача должна решаться на cpp? лень. да и написали ему уже решение на C++, хоть и страшное как моя жизнь
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 19:36:13.636666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
Потом мне интересно, если кроме майна у меня будет другая ф-я, то как сделать, чтобы в ней тоже была доступна переменная size, которую я принял в мэйне? это интересный на самом деле вопрос. C - процедурный язык, в котором процедуры могут работать как функции (но не являются при этом first-class value); стало быть для передачи значения в процедуру ты можешь воспользоваться либо функциональным подходом (передать в качестве параметра), либо процедурным (объявить переменную глобальной по отношению к функции, либо передать в качестве параметра указатель на переменную). примеры нужны?
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:07:05.133333
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
quote:
поздравляю вас, господин соврамши Таак!! Кто тут бочку катит?! Я не собирался писать правильный вариант,просто указал почему лично его не работает как таковой.(получилась программа выводящая чиселки,ответ на "Даж массив принять не могу (вот да фак?) "). Хочется - делай,токо тогда на С/С++ ,или понты дороже денег? ;)
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:12:49.666666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Genco Таак!! Кто тут бочку катит?! Я не собирался писать правильный вариант,просто указал почему лично его не работает как таковой.(получилась программа выводящая чиселки,ответ на "Даж массив принять не могу (вот да фак?) "). Хочется - делай,токо тогда на С/С++ ,или понты дороже денег? ;) о, человек с чувством юмора :) рекость на этом форуме мои претензии к тебе - давая совет ты дважды испортил программу: отказался от более локального определения счётчика, отказался от префиксной формы инкремента. то, что она в результате всё равно работает (возможно даже правильно) - не так существенно. маленьким врать нехорошо! а решение я не просто так написал на Haskell - такая форма записи хорошо показывает тривиальность задачи: тут вообще не над чем мозг напрячь, это скучно-скучно-скучно-скучно очень скучно. хочешь чтобы я что-то написал - усложни задачу. тут мне делать нечего
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:22:52.873333
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Признаю критику про счетчик.А я то хотеть не хочу - это же ТС надо на самом деле,потому и задача такая)).
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:25:40.310000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Genco Признаю критику про счетчик а про префиксную форму? могу объяснить в чём подвох
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 22:35:08.516666
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Эмм….да,если можно))
|
|
|
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++ - всегда использовать префиксную форму инкремента/декремента, кроме тех случаев когда действительно необходимо получить предыдущее значение счётчика
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 23:38:05.153333
|
|
|
Genco
Сообщений: 1662
Оценки: 90
Присоединился: 2007-12-16 23:11:22.003333
|
Отличия я знаю,результат разный не из за того что инкремент что то возвращает,а из за того что приоритет выполнения у префиксного меньше.(Не помню как точно называется,кароч порядок выполнения операторов) Потому сначала выполнится "=" или постфиксный. Однако остальное похоже на правду,пасиба.
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-24 23:39:24.810000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: Genco Отличия я знаю,результат разный не из за того что инкремент что то возвращает,а из за того что приоритет выполнения у префиксного меньше.(Не помню как точно называется,кароч порядок выполнения операторов) Потому сначала выполнится "=" или постфиксный. Однако остальное похоже на правду,пасиба. ты ошибаешься. мне лень цитировать стандарт, но если будешь упрямиться - сделаю это завтра
|
|
|
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]
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-25 04:27:48.530000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
И что тебя смущает? A++ и ++A - абсолютно одинаковые операции… только вот приоритет у них разный.
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-25 04:30:19.686666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: Denaturat … префиксная форма инкремента (++i) выполняет инкремент и возвращает новое значение переменной постфиксная форма инкремента (i++) выполняет инкремент и возвращает старое значение переменной на примерах так: … Постфиксная форма сначала возвращает значение переменной, а потом делает инкремент. Актуально для перегруженных ++ ;).
|
|
|
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
|
|
|
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 Програмка: 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 ,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 ,ecx Одинаковое количество команд. [sm=bl.gif] а теперь попробуй вывести на экран значения и посмотри листинги ещё раз. ты ведь оптимизацию не выключал, правда?
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-25 13:11:17.486666
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: _SaZ_ Постфиксная форма сначала возвращает значение переменной, а потом делает инкремент. Актуально для перегруженных ++ ;). актуально для любых инкремента и декремента
|
|
|
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 перевести или как?
|
|
|
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)
|
|
|
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-типа не имеет сайд-эффектов; однако даже на такую оптимизацию полагаться не стоит
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-26 19:38:30.726666
|
|
|
bootycat
Сообщений: 10
Оценки: 0
Присоединился: 2008-10-15 19:29:38.580000
|
Взял куски, что тут выложили, что то ыптался сделать, но посскольку я не представляю как сделать ф-ю и вызвать ее, у меня ничего не получилось. смотрел в книжках, так и не понял. Вот что у меня есть
#include <iostream>
#include <conio.h>
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 < size; ++counter)
{if (elem == massiv[counter])
++kol;
return kol;
break;
}
}
int main(){
cout<<"Vvvedite razmer massiva: ";
cin>>size;
int i;
for( i=0;i<size;++i)
{
cin>>*(massiv+i);
}
for( i=0;i<size;++i)
{
cout<<*(massiv+i);
cout<<"\n";
}
//delete [] massiv;
cout<<"Vvedite element, kotorii xotite naiti: ";
cin>>elem;
cout<<funFind(size,elem,massiv);
getch();
return 0;
}
ошибки в определении функции. Да и не понятно, как с помощью этой ф-ии выполнить заданиее Подправте пожалуйста. Очень срочно нужно.(сегодня) пс. Так и не понял принцип обозначения пременных в скобках после названия ф-ии. Так и не понял как передать значение ф-ии
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-26 19:49:33.716666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Теперь ещё раз напиши русским языком, без всяких "тут, вот, как-то так" и пр., нормально отформатированное задание.
|
|
|
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)
{
int counter = 0;
for(int i = 0; i < size; ++i)
{
if(val == mass[i])
{
++counter;
}
}
return counter;
}
int maximum(int const * const mass, const unsigned int size)
{
if(!size)
{
return 0;
}
int max = *mass;
for(int i = 1; i < size; ++i)
{
max = (max < mass[i]) ? mass[i] : max;
}
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 Так и не понял принцип обозначения пременных в скобках после названия ф-ии. Так и не понял как передать значение ф-ии эти вопросы сформулируй отдельным постом, попробуем разобраться
|
|
|
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(){} ?
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-26 20:39:40.580000
|
|
|
Denaturat
Сообщений: 1741
Оценки: 453
Присоединился: 2008-10-27 20:50:06.380000
|
quote:
ORIGINAL: bootycat Насчет вопросов- 1)Что и зачем вписывать funkciya(>>>СЮДА<<<){} ? Я так понимаю, переменные, которые будут использоваться в теле ф-ии. Нов мейне мы их почему-то не пишем, и все нормально. функция - это чёрный ящик, получающий что-то на вход и возвращающий что-то в качестве результата. объявляя функцию, ты указываешь её сигнатуру: тип возвращаемого значения и тип каждого из получаемых значений retType funcName(argType1 name1, argType2 name2, …, argTypeN nameN) например, функция, вычисляющая сумму двух целых чисел, будет иметь такую сигнатуру: int sum(int a, int b) потому как должна получить два целых числа и вернуть тоже целое число - такова логика работы функции суммирования функция main особенная, её нельзя вызвать и её параметры фиксированы стандартом quote:
ORIGINAL: bootycat 2)Допустим я определил значение переменной вне функций, сразу под инклюдами. В мэйн я дал переменной значение 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; } это вполне корректный код ещё вопросы?
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-26 20:46:20.486666
|
|
|
bootycat
Сообщений: 10
Оценки: 0
Присоединился: 2008-10-15 19:29:38.580000
|
еее, 2 задачка решена :) огромное спаибо Denaturatу насчет 1й- вот что пока есть- #include<conio.h>
#include<stdio.h>
#include<iostream>
#include<string>
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<<"\n vvedite stroki simvolov: ";
gets(str);
int l=strlen(str);
str2=new char[l];
cout<<"\n vvedite nomer slova: ";
cin>>k;
for (i=0; i<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 задачи начинаю потихоньку въезжать. Так вот, хоть слово и выделяется, оно может быть и цифрой( а по заданию обязательно слово). Не знаю, как проверить. Да и как с помощбю этой ф-ии посчитать кол-во слов, тоже ума не приложу)
|
|
|
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} } Еще очень насущный вопрос- Зачем нужны указатели (*С) Вроде динамический массив можно создать только используя указатель. А указатель должен указывать на объект. Но мы определяем только указатель. Так где же сам массив и как он называется? С указателями можно делать то же самое, что и с объектом, на который он указывает?
|
|
|
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)
|
|
|
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) - получить значение, на которое указатель указывает
|
|
|
RE: с++ шикарные Задачки на Функции - 2008-11-26 21:43:14.086666
|
|
|
bootycat
Сообщений: 10
Оценки: 0
Присоединился: 2008-10-15 19:29:38.580000
|
ну вот у меня в 1 задаче char*str2; это получаетс яуказатель на строку. а где сама строка то если это указатель? )
|
|
|
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"
|
|
|
|
|