pokk
Помогающий
Offline
|
|
« : 14-11-2008 19:05 » |
|
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[]) {
int a[6],max,u; a[0]=0; a[1]=1; a[2]=2; a[3]=3; a[4]=40; a[5]=7;
for (max=u=0; u<6; u++){ if (a[u]>a[max]) { max=u; } } printf("%d",max); return 0; }
Вот код программы которая ищет максимальный элемент массива с помощью метода тыканья проверил всё работает вот тока не как не могу понять каким образом это всё происходил ,а именно for (max=u=0; u<6; u++){ if (a[u]>a[max]) так как max=u то получается a[0]>a[0] так что ли ?? и что это получается ??
|
|
« Последнее редактирование: 14-11-2008 19:12 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #1 : 14-11-2008 19:20 » |
|
для понимания, сначала напишем всё красиво: int _tmain(int argc, _TCHAR* argv[]) {
int a[6]; int max=0; int u=0; a[0]=0; a[1]=1; a[2]=2; a[3]=3; a[4]=40; a[5]=7;
for (max=0, u=0; u<6; u++) { if (a[u]>a[max]) { max=u; } }
printf("%d",max); return 0; }
видим, что запоминается индекс наибольшего элемента - переменная max. Вначале индекс нулевой, но это неважно, так как сканируется весь массив - всё равно найдём максимальный элемент. сканируется при помощи индекса u . Если текущий элемент (a[u]) больше уже найденного ранее самого большого элемента (a[max])) , то вместо max запоминаем u (max=u). Таким образом, в max окажется индекс максимального элемента (а если одинаковые элементы есть, то самого первого максимального)
|
|
« Последнее редактирование: 14-11-2008 19:21 от Алексей1153++ »
|
Записан
|
|
|
|
Вад
|
|
« Ответ #2 : 14-11-2008 19:20 » |
|
Ну, изначально будет a[0], и присваивания быть в данном случае не должно. Попробуй протрассировать этот код - условие в if всегда должно давать false для такого тестового массива.
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #3 : 15-11-2008 10:40 » |
|
Вроде немного понятно. Я вот немного преобразовал в другой код а почему не работает не понятно #include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[]) {
int a[6]; int max=0; int u=0; a[1]=1; a[2]=20; a[3]=3; a[4]=4; a[5]=7;
for (u=0; u<6; u++) { if (a[u]>a[u+1]) { max=u; } }
printf("%d",max); return 0; }
получается мы сравниваем первый элимент с 2 потом 2 элимент с 3 .... и записываем в max но что-то не получается в чём причина ??
|
|
« Последнее редактирование: 15-11-2008 11:44 от Алексей1153++ »
|
Записан
|
|
|
|
Sands
Помогающий
Offline
|
|
« Ответ #4 : 15-11-2008 11:05 » |
|
pokk, У тебя массив из 6 элементов, тоесть последний индекс должен быть 5. А когда выполняется цикл, то при i == 5(которое удовлетворяет условиям цикла) внутри ты будеш доступаться к u[5+1], что некорректно. Перепиши цикл в виде for (u=0; u<5; u++) { if (a[ u ]>a[u+1]) { max=u; } }
и все должно сработать.
|
|
|
Записан
|
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #6 : 15-11-2008 11:49 » |
|
а ещё остался неинициализирован 0-й элемент a[1]=1; a[2]=20; a[3]=3; a[4]=4; a[5]=7;
перед началом работы всегда нужно инициализировать массив: статический : enum { e_len=100, };
int a[e_len]; memset(a,0,sizeof(a));
//или так memset(a, 0, sizeof(*a)*e_len);
динамический DWORD dwdLen=100; int* a=new[dwdLen];
memset(a, 0, sizeof(*a)*dwdLen);
...
//освобождаем память после работы if(a) { delete [] a; a=0; }
|
|
« Последнее редактирование: 15-11-2008 11:51 от Алексей1153++ »
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #7 : 16-11-2008 13:47 » |
|
for (max=0;u=0; u<5; u++){ if (a[u]>a[u+1]) { max=u; } Этот код в который я преобразовал он не коректный тока щас заметил :) (если получится ряд чисел 9,8,7,... то он не найдёт масимальное число )
надо разбиратся с этим кодом
for (max=0 ; u=0; u<5; u++){ if (a[u]>a[max]) { max=u; }
Я вот не как не могу понять. Получается что при u=1 тогда max=1 и мы находим a[1]>a[1] и так получается при любом u что заставляет его смешатся ?
|
|
« Последнее редактирование: 16-11-2008 13:57 от Алексей1153++ »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #8 : 16-11-2008 13:56 » |
|
pokk, поьзуйся тегом [code]...[/code] !
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 16-11-2008 14:02 » |
|
pokk, запусти под отладчикам, погляди всё по шагам
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #10 : 16-11-2008 14:05 » |
|
for (max=0 ; u=0; u<5; u++){ if (a[u]>a[max]) { max=u; }
это всё работает а почему хз
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #11 : 16-11-2008 14:07 » |
|
это всё работает а почему хз
так я же написал , как оно работает ) См верхний пост
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #12 : 16-11-2008 14:16 » |
|
видим, что запоминается индекс наибольшего элемента - переменная max. Вначале индекс нулевой, но это неважно, так как сканируется весь массив - всё равно найдём максимальный элемент.
сканируется при помощи индекса u . Если текущий элемент (a[u]) больше уже найденного ранее самого большого элемента (a[max])) , то вместо max запоминаем u (max=u). Таким образом, в max окажется индекс максимального элемента (а если одинаковые элементы есть, то самого первого максимального)
оооо десятый раз задумался и понял получается что он в начале сравнивает с 0 и записывает его в max если оно больше 0 потом со следущим элимен это записаное число и так далее так ?? и запись for (max=u=0; u<5; u++){ if (a[u]>a[max]) { max=u; }
max=u=0 неверно =))
|
|
« Последнее редактирование: 16-11-2008 14:25 от pokk »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 16-11-2008 14:27 » |
|
ты о чём ? ) Ты отладчик уже запускал ?
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #14 : 16-11-2008 14:28 » |
|
enum { e_len=100, };
А не проще написать для статического: const int e_len = 100; ? Теперь код поиска максимального елемента: include "stdafx"
int main(...) { int a[6] = {15, 20, 12, 11, 21, -9}; int max, u;
for(max = 0, u = 0; u < 5; ++u) { if (a[u] > a[max] max = u; } //и результатом программы будет max = 4!!!
return 0; }
А теперь обьясняю: когда u = 0, то if дасть false, потому что у нас строго сказано >, а - ; дальше: когда u = 1 (но max у на пока равен max = 0), и тогда a[u ] = a[1] = 20, a[max] = a[0 ] = 15 (в данном случае) if даст true и сделает max = u (тоесть max = 1); анализируя каждый шаг цикла могу сказать, что if вернёт true до конца цикла ещё только один раз при u = 4 (a[u ] = a[4] = 21). Вот так.
Совет: когда у вас программа не работает, а компилятор ошибки не выдаёт, то используйте пошаговый режим. P. S.: люди, ну что же это такое: for (max=0;u=0; u<5; u++){ if (a[u]>a[u+1]) { max=u; } , это же ненужное усложнение...
|
|
« Последнее редактирование: 16-11-2008 14:39 от Inkognito »
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #15 : 16-11-2008 14:31 » |
|
(Предыдущее сообщение я исправил)
|
|
« Последнее редактирование: 16-11-2008 14:40 от Inkognito »
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #16 : 16-11-2008 14:40 » |
|
Inkognito, А не проще написать для статического: const int e_len = 100;
нет, не проще )))
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #17 : 16-11-2008 14:45 » |
|
нет, не проще )))
Во-первых дольше, а во-вторых надо знать ещё что такое в С++ enum, а const - он во всех языках программирования const.
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #18 : 16-11-2008 14:49 » |
|
Inkognito, ДОЛЬШЕ ? Чем ? Это же на этапе компиляции обрабатывается всё. И наплевать мне на другие языки, тут речь про с++ )) надо знать ещё что
знаю )
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #19 : 16-11-2008 14:52 » |
|
enum { e_len=100, };
А не проще написать для статического: const int e_len = 100; ? Теперь код поиска максимального елемента: include "stdafx"
int main(...) { int a[6] = {15, 20, 12, 11, 21, -9}; int max, u;
for(max = 0, u = 0; u < 5; ++u) { if (a[u] > a[max] max = u; } //и результатом программы будет max = 4!!!
return 0; }
А теперь обьясняю: когда u = 0, то if дасть false, потому что у нас строго сказано >, а - ; дальше: когда u = 1 (но max у на пока равен max = 0), и тогда a[u ] = a[1] = 20, a[max] = a[0 ] = 15 (в данном случае) if даст true и сделает max = u (тоесть max = 1); анализируя каждый шаг цикла могу сказать, что if вернёт true до конца цикла ещё только один раз при u = 4 (a[u ] = a[4] = 21). Вот так.
Совет: когда у вас программа не работает, а компилятор ошибки не выдаёт, то используйте пошаговый режим. P. S.: люди, ну что же это такое: for (max=0;u=0; u<5; u++){ if (a[u]>a[u+1]) { max=u; } , это же ненужное усложнение... всё спасибо разобрался теперь всё понял хорошо
|
|
|
Записан
|
|
|
|
Dr.Yevhenius
|
|
« Ответ #20 : 16-11-2008 14:58 » |
|
Это же на этапе компиляции обрабатывается всё
А кто о компиляторе говорит? И наплевать мне на другие языки, тут речь про с++ ))
Во-первых, я не говорил о том, как описывать константу на языке Pascal!, во-вторых, я знаю 6 языков программирования и во всех есть const, и когда я говорю, что "const - он во всех языках программирования const", это значит, что тот, кто только недавно перешёл с другого языка на С++, особой сложности написать const не составит. тут речь про с++ ))
А я и обсуждаю С++ (поиск в массиве и елемент enum)
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #21 : 16-11-2008 15:00 » |
|
Inkognito, хватит воду лить Речь идёт о c++ , enum никому не мешает
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #22 : 18-11-2008 14:27 » |
|
Опять не могу понять каким образом можно сделать так что бы выполнялась сумма между нулевыми элимантами масива вот что я надумал // про.cpp : Defines the entry point for the console application. //
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[]) {
int a[6],max,u,d,sum,m; a[0]=1; a[1]=0; a[2]=2; a[3]=3; a[4]=0; a[5]=7; for (m=0,sum=0,d=0;d<6;d++){ if (a[d]=0){ m=d; } for (sum=0; m<6; m++){ sum+=a[m]; } }
printf("\t\t\t%d\n",sum); return 0; }
для начала надо сделать так что бы выполнялась сумма после нулегого элимента что я и пытался сделать for (m=0,sum=0,d=0;d<6;d++) запускается цикол поиска нулегого элиманта if (a[d]=0) если наёден такой ,то записываем его индекс в переменую м дальше запускается цикол сумирования с [m] но вот почемуто это всё не работает программа запускается а результат всегда получается 0 что я не так сделал ??
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #23 : 18-11-2008 14:40 » |
|
int a[6],max,u,d,sum,m; a[0]=1; a[1]=0; a[2]=2; a[3]=3; a[4]=0; a[5]=7; for (m=0,sum=0,d=0;d<6;d++){ if (a[d]=0){ //если a[d]=0 то запоминаем его номер m=d; } //цикл от нулевого элемента m=d до 6 - а почему 6? for (sum=0; m<6; m++){ sum+=a[m]; } }
printf("\t\t\t%d\n",sum); //если вывод сделать здесь то выведешь только последнюю сумму - эту строку нужно перенести в цикл return 0; }
смотри коменты
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #24 : 18-11-2008 15:08 » |
|
int a[6],max,u,d,sum,m; a[0]=1; a[1]=0; a[2]=2; a[3]=3; a[4]=0; a[5]=7; for (m=0,sum=0,d=0;d<6;d++){ if (a[d]=0){ //если a[d]=0 то запоминаем его номер m=d; } //цикл от нулевого элемента m=d до 6 - а почему 6? for (sum=0; m<6; m++){ sum+=a[m]; } }
printf("\t\t\t%d\n",sum); //если вывод сделать здесь то выведешь только последнюю сумму - эту строку нужно перенести в цикл return 0; }
смотри коменты 6 потому что это размерность массива а если перенести цикол туда тогда получится что несколько раз выведется,а мне надо что бы он посчитал с нулегого элимента сумму до последнего и один раз вывел
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #25 : 18-11-2008 15:19 » |
|
nt a[6],max,u,d,sum,m; a[0]=1; a[1]=0; a[2]=2; a[3]=3; a[4]=0; a[5]=7; for (m=0,sum=0,d=5;d<0;d--){ if (a[d]=0){ m=d; //цикл от нулевого элемента m=d до 6 - а почему 6? for (sum=0; m<6; m++){ sum+=a[m]; } printf("\t\t\t%d\n",sum); return 0; } } //для отладки и для понимания printf("\t\t\t%d\n",sum);
return 0; }
расставь правильно скобки откомментируй код
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|
Sla
|
|
« Ответ #27 : 18-11-2008 15:51 » |
|
pokk, я допустил ошибку в коде поэтому и не выводится. (я код не проверял не на чем)
я просил откомментировать код
Задача Вывести сумму элементов массива, от последнего ненулевого.
смотрим первый цикл, почему он такой? смотрим условие - почему именно такое? смотрим второй цикл - почему именно такой?
Не скупись на слова - старайся упорядочить свои мысли
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #28 : 18-11-2008 16:11 » |
|
первый цикол перебирает весь масив с 5 элимента до 0 пока не получим a[d]=0(не найдём нулевой элимент ) если такое находим то записываем в переменную его номер( m=d;) и теперь вычисляем сумму с m до самого первого элимента. Так ?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #29 : 18-11-2008 18:51 » |
|
вычисляем сумму с m до самого первого элимента.
почему до первого? кста, а ты нашел ошибку в алгоритме (в первом цикле)?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #30 : 19-11-2008 05:07 » |
|
почему до первого?
а до какого ? for (m=0,sum=0,d=5;d<0;d--) мне тут d=5;d<0 не нравится наверно надо d>0 кста, а ты нашел ошибку в алгоритме (в первом цикле)?
я нашёл ошибку в условии (a[d]==0) это то ? Tщё вопрос. Так как у меня два нулевых элимента то какой он возьмёт ? Если я правильно понял что цикол начинается с конца то он возьмёт первый который найдёт т.е. a[4] так ?
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #31 : 19-11-2008 05:27 » |
|
вот что у меня получилось #include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[]){
int a[6],max,u,d,sum,m; a[0]=1; a[1]=0; a[2]=2; a[3]=3; a[4]=0; a[5]=7; for (m=0,d=5;d>0;d--){ if (a[d]==7){ m=d; for (sum=0; m>0; m--){ sum+=a[m]; } printf("\t\t\t%d\n",sum ); return 0; } }
}
Цикол первый работает всё нормально условие тоже выполняется ,а вот со вторым циклом что-то не так не могу понять что иненно
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #32 : 19-11-2008 07:11 » |
|
pokk, ахринеть 1. оформление и форматирование кода ужасное!!! 2. d=5 с каких это щей? 3. sum+=a[m], нифига у тебя не получится.
|
|
« Последнее редактирование: 19-11-2008 09:43 от McZim »
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #33 : 19-11-2008 07:14 » |
|
Задача Вывести сумму элементов массива, от последнего ненулевого. Я так понял твою задачу.
pokk, Замечательно! Браво! ты нашел ошибку мне тут d=5;d<0 не нравится наверно надо d>0
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #34 : 19-11-2008 07:15 » |
|
McZim, мухи отдельно, котлеты отдельно
как с каких? а какая размерность массива?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Sla
|
|
« Ответ #35 : 19-11-2008 07:16 » |
|
вот почему если нам нужен НУЛЕВОЙ элемент
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #36 : 19-11-2008 07:18 » |
|
а какая размерность массива?
да....извиняюсь.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
McZim
|
|
« Ответ #37 : 19-11-2008 07:20 » |
|
вот почему если нам нужен НУЛЕВОЙ элемент это мне или аффтару?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #38 : 19-11-2008 07:22 » |
|
McZim, к автору
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #39 : 19-11-2008 08:47 » |
|
а я если честно не понял задачу
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
McZim
|
|
« Ответ #40 : 19-11-2008 09:15 » |
|
ааааа, ну примерно понял
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Sla
|
|
« Ответ #41 : 19-11-2008 09:27 » |
|
где-то за пределами мира сего родилось в общении такое for(int d = 5; d > 0; d--) { if(a[d] == 0) { do { d++; sum += a[d]; }while(d != 5);
break; } }
pokk, расскажи, что мы родили?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #42 : 19-11-2008 09:38 » |
|
ну раз такая пьянка, то еще расскажи, если заменить условие: на условие: что это даст?
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Антон (LogRus)
|
|
« Ответ #43 : 19-11-2008 10:05 » |
|
#define ARRAY_SIZE(x) ( sizeof(x)/sizeof (x[0]))
void Test() { long a[] = {1,0,2,3,0,7};
size_t sum = 0; bool useSum = false; for (size_t i = 0; i != ARRAY_SIZE(a); ++i) { if (a[i] == 0) useSum = !useSum;
if (useSum) sum += a[i]; } std::cout << "sum = " << sum << std::endl; }
|
|
|
Записан
|
Странно всё это....
|
|
|
Sla
|
|
« Ответ #44 : 19-11-2008 10:06 » |
|
McZim, кста, если делаеть второй цикл с предусловием, то не нужно
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
McZim
|
|
« Ответ #45 : 19-11-2008 10:12 » |
|
Sla, можно.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
McZim
|
|
« Ответ #46 : 19-11-2008 10:22 » |
|
LogRus, хм, это разве сумма элементов от последнего нулевого значения? и потом, вот тут: мне кажется нужно сделать: if (useSum) { sum += a[i]; useSum = false; }
|
|
« Последнее редактирование: 19-11-2008 10:25 от McZim »
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
McZim
|
|
« Ответ #47 : 19-11-2008 10:30 » |
|
LogRus, у тебя получается складываются только 2 и 3, но это ведь значения не после последнего нулевого элемента, а последним в данном массиве является 7.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Антон (LogRus)
|
|
« Ответ #48 : 19-11-2008 10:54 » |
|
........ каким образом можно сделать так что бы выполнялась сумма МЕЖДУ нулевыми элимантами масива ...............
|
|
|
Записан
|
Странно всё это....
|
|
|
McZim
|
|
« Ответ #49 : 19-11-2008 10:55 » |
|
LogRus, ну тада ага, я не так понял, да еще и Слава меня смутил
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
McZim
|
|
« Ответ #50 : 19-11-2008 10:59 » |
|
только вот задача опять таки не ясна, а если вот такой массив будет: {0,1,2,0,5,0}; между какими считать? В любом случае у автора, теперь богатый выбор рабочего кода
|
|
« Последнее редактирование: 19-11-2008 11:01 от McZim »
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Антон (LogRus)
|
|
« Ответ #51 : 19-11-2008 11:28 » |
|
McZim, какой вопрос такой ответ будет уточнение в вопросе - будет уточнее в ответе
|
|
|
Записан
|
Странно всё это....
|
|
|
|
McZim
|
|
« Ответ #53 : 19-11-2008 11:33 » |
|
ну в общем ждем аффтора, и внематочно его выслушиваем
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #54 : 19-11-2008 13:33 » |
|
вот полное задание. Я делал от простого к сложному или рабивал задание на более простоые примеры В любом случае у автора, теперь богатый выбор рабочего кода выбор не сильно большой единствиное что понятно вот это и то не всё for(int d = 5; d > 0; d--) { if(a[d] == 0) { do { d++; sum += a[d]; }while(d != 5);
break; } }
do { d++; sum += a[d]; }while(d != 5);
видимо этим вырожением заменили цикол сумирования Оо пока писал понял пока d не равно 5 как тока d=5 то выполняется выход из цикла
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #55 : 19-11-2008 13:41 » |
|
Ёооо Это же меняет суть, хотя и не намного 1. находим первый нулевой B 2. находим последний нулевой E 3 цикл от первого до последнего B...E - сумма
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #56 : 19-11-2008 13:42 » |
|
Ёооо Это же меняет суть, хотя и не намного 1. находим первый нулевой B 2. находим последний нулевой E 3 цикл от первого до последнего B...E - сумма
Что бы это всё сделать надо было понять как вообще сделать сумму с любого элимента =))
|
|
|
Записан
|
|
|
|
McZim
|
|
« Ответ #57 : 19-11-2008 14:01 » |
|
pokk, тут есть решение для суммы чисел от последнего нулевого значения, есть решение между нулевыми значениями. Немного подумай и сделай так как от тебя требует задача.
|
|
|
Записан
|
The CBO without stats is like a morning without coffee. (c) T.Kyte.
|
|
|
Антон (LogRus)
|
|
« Ответ #58 : 20-11-2008 05:33 » |
|
Пока без мата. Какой-то фигнёй занимаемся - честное слово. Задачи простые как 3 копейки, а автор даже сформулировать их не может. особенно радуют слово цикол ( ЦИКЛ - ЦИКЛ - запомни раз и навсегда) и фразы вот полное задание. Я делал от простого к сложному или рабивал задание на более простоые примеры и где блин оно? Что бы это всё сделать надо было понять как вообще сделать сумму с любого элимента =))
А на листочке ты, как суммы считаешь? Просто начни с нужного. Пиши словесные алгоритмы.
|
|
« Последнее редактирование: 20-11-2008 08:12 от LogRus »
|
Записан
|
Странно всё это....
|
|
|
Sla
|
|
« Ответ #59 : 20-11-2008 07:11 » |
|
LogRus, человек явно нерусскоязычен. Поспокойней. Просто тему нужно перенести в Памагите, и тогда все станет на свои места
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Антон (LogRus)
|
|
« Ответ #60 : 20-11-2008 08:11 » |
|
больше не буду.
|
|
|
Записан
|
Странно всё это....
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #61 : 22-11-2008 10:20 » |
|
Пока я разбирался у меня возник вопрос как можно определить чётное число или нет(первое задание ) ?? и как найти второй нулевой элимент (второе задание )??
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #62 : 22-11-2008 10:32 » |
|
pokk, Чем отличается четное число от нечетного?
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #63 : 22-11-2008 10:48 » |
|
pokk, Чем отличается четное число от нечетного?
делится на 2 с остатком и без =) int a,c; float b; for (a=0;a<10; a++){ b=a/2-int(a/2); printf("%f\n",b); }
вот что я надумал где int выделяет целую часть и должно выводится 0.5(не чётное ) или 0 (чётное ) вот тока получилось что выводится всё время 0 а понять не могу почему
|
|
« Последнее редактирование: 22-11-2008 10:52 от pokk »
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #64 : 22-11-2008 10:57 » |
|
pokk, int это вообше то целочисленный тип. Никаких дробных частей нет в принципе. Иши более правильный путь с учетом данного утверждения. Ну совсем запутанный способ if (a & 1) { // Тут если число не четно } else { // Тут если число четно }
|
|
« Последнее редактирование: 22-11-2008 11:00 от Finch »
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #65 : 22-11-2008 10:59 » |
|
pokk, int это вообше то целочисленный тип. Никаких дробных частей нет в принципе. Иши более правильный путь с учетом данного утверждения.
то есть если я напишу int(2) он выдаст 2,а если int(1.5) выдаст 1 так ?
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #66 : 22-11-2008 11:01 » |
|
Да так
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #67 : 22-11-2008 11:08 » |
|
Ну совсем запутанный способ if (a & 1) { // Тут если число не четно } else { // Тут если число четно }
(a & 1) это что означает ??
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #68 : 22-11-2008 11:10 » |
|
Ну я думал, что ты поднимеш книжку. И почитаеш булевые функции. В частности & в данном случае это логическое И.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #69 : 22-11-2008 11:18 » |
|
о а почему это работает ?? если (1 и 1 ) это что означает ?
|
|
|
Записан
|
|
|
|
Finch
Спокойный
Администратор
Offline
Пол:
Пролетал мимо
|
|
« Ответ #70 : 22-11-2008 11:31 » |
|
Фокусы булевой алгебры и знание двоичной системы счисления.
|
|
|
Записан
|
Не будите спашяго дракона. Джаффар (Коша)
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #71 : 22-11-2008 11:44 » |
|
pokk,
(1 && 1) равносильно (true && true) == true (булево И) ,
а (1&1) - результат число 1 (побитовое И)
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #72 : 22-11-2008 11:50 » |
|
pokk,
(1 && 1) равносильно (true && true) == true (булево И) ,
а (1&1) - результат число 1 (побитовое И)
оо что-то сильно сложно надо будет вернутся к моему способу =))))) а как на счёт поиска втогоро нулевого элимента ?? break это выход совсем из программы(завершение ) или тока из цикла ??
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #73 : 22-11-2008 11:55 » |
|
да ничего сложного )
поиск второго элемента - начинай с элемента, следующего за первым нулевым , так ? )
break - это выход из цикла do...while , while...do или for (а , наверное кстати, continue - это начать новую итерацию цикла)
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #74 : 22-11-2008 12:00 » |
|
поиск второго элемента - начинай с элемента, следующего за первым нулевым , так ? )
вот 2 задание
|
|
|
Записан
|
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #75 : 22-11-2008 12:03 » |
|
а. Ну тогда тот же самый поиск первого нулевого, только с конца массива )
|
|
|
Записан
|
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #76 : 22-11-2008 12:08 » |
|
а. Ну тогда тот же самый поиск первого нулевого, только с конца массива )
оо точно
|
|
|
Записан
|
|
|
|
Serg79
|
|
« Ответ #77 : 24-11-2008 14:04 » |
|
Пока я разбирался у меня возник вопрос как можно определить чётное число или нет(первое задание ) ?? и как найти второй нулевой элимент (второе задание )??
Классический способ: int digit; ... if (digit % 2) { /* не четное */ } else { /* четное */ }
|
|
|
Записан
|
|
|
|
Вад
|
|
« Ответ #78 : 24-11-2008 14:06 » |
|
Serg79, но неоптимальный Можно что-то вроде (digit & 1) практиковать P.S. Хотя, возможно, компилятор "% 2" на побитовое "и" сам заменит - такое, кажется, видел где-то.
|
|
« Последнее редактирование: 24-11-2008 14:11 от Вад »
|
Записан
|
|
|
|
Serg79
|
|
« Ответ #79 : 24-11-2008 14:22 » |
|
Serg79, но неоптимальный Можно что-то вроде (digit & 1) практиковать P.S. Хотя, возможно, компилятор "% 2" на побитовое "и" сам заменит - такое, кажется, видел где-то. Зависит от платформы и компилятора Но что читается лучше, это факт.
|
|
|
Записан
|
|
|
|
Serg79
|
|
« Ответ #80 : 24-11-2008 14:29 » |
|
Для GCC платформа i386: int test_func_1(int digit) { if (digit % 2) return 0;
return 1; }
int test_func_2(int digit) { if (digit & 1) return 0;
return 1; }
gcc -O2 -fomit-frame-pointer -S main.c дает результат: .globl test_func_1 .type test_func_1, @function test_func_1: movzbl 4(%esp), %eax andl $1, %eax xorl $1, %eax movzbl %al, %eax ret .size test_func_1, .-test_func_1 .p2align 4,,15 .globl test_func_2 .type test_func_2, @function test_func_2: movzbl 4(%esp), %eax andl $1, %eax xorl $1, %eax movzbl %al, %eax ret .size test_func_2, .-test_func_2 .p2align 4,,15
|
|
|
Записан
|
|
|
|
|