| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| Айде да решим една задача http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=4231 |
Страница 1 от 2 |
| Автор: | relsys [ Чет Май 24, 2007 8:39 pm ] |
| Заглавие: | Айде да решим една задача |
Наложи ми се да напиша една програмка на С, ма искам да видя как го правят и професионлистите, после ще постна и моя код, ако имате желание ето задачата:
а) Да се направи функция която получава като параметър един байт n размера на масива и го инициализира с байтовете от 0 до n-1 след което да разпечата съдържанието на масива от 0 до n-1 елемент: Пример: при зададен параметър 3 стойностите на масива трябва да са следните: m[0] = 0; m[1] = 1; m[2] = 2; a отпечатване трябва да стане във вида: m[0] = 0 m[1] = 1 m[2] = 2 б) Да се направи функция която получава като параметър един байт размера на масива и разменя стойностите на елементите на масива по двойки симетрично около центъра. Масива трябва преди това да е инициализиран с помощта на функцията описана по-горе със същата или по-голяма стойност на параметъра. Инициализацията е с цел по-лесна проверка на резултата. Ако броя байтове е нечетен (т.е. остава един елемент в центъра) този елемент трябва да стане 255. Да се разпечата съдържанието на масива от 0 до n-1 елемент. Пример: при зададен параметър 3 и начални стойности на масива m[0] = 0; m[1] = 1; m[2] = 2; резултата трябва да е m[0] = 2; m[1] = 255; m[2] = 0; при зададен параметър 4 и начални стойности на масива m[0] = 0; m[1] = 1; m[2] = 2; m[3] = 3; резултата трябва да е m[0] = 3; m[1] = 2; m[2] = 1; m[3] = 0; |
|
| Автор: | BrainStorm [ Чет Май 24, 2007 9:17 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
|
|||||||||||||||||||
| Автор: | ps66 [ Пет Май 25, 2007 8:26 am ] | |||||||||||||||||||||||||||
| Заглавие: | ||||||||||||||||||||||||||||
ще се изненадаш - ама func2: - няма да размества каквото и да е - при нечетно n - ще прави m[1] = 255 |
||||||||||||||||||||||||||||
| Автор: | relsys [ Пет Май 25, 2007 11:42 am ] | |||||||||
| Заглавие: | ||||||||||
Ето го моя код:
Доколкото аз разбрах условието, целта е кодът да е максимално бърз и да се използват колкото може по - малко променливи. Незнам дали съм се справил добре, не познавам добре С, така че очаквам мнения. |
||||||||||
| Автор: | ps66 [ Пет Май 25, 2007 12:03 pm ] |
| Заглавие: | |
в кода: for (i = 0; i <= n/2; i++) { temp = m[i]; m[i] = m[n - i]; m[n - i] = temp; } правиш една доста често срещана грешка при C програмистите провери какво става при i=0 разменяш m[0] и m[n] а масива ти има m[n-1] размерност по-добре инзолзвай кода на @BrainStorm като му оправиш грешките разбира се (n/2) или for (i = 0; i <= n/2; i++) { temp = m[i]; m[i] = m[n - i-1]; m[n - i-1] = temp; } ако търсиш бързина ... може би следния код ще е по-бърз int n2 = n/2; for (i = 0; i <= n2; i++) ... обаче с това: temp = n/2; if ((n - temp) == temp) { m[temp] = 255; } направо ... изтрепваш рибата ... много оригинален начин за проверка на четно число ето няколко по-тривиални решения за "дали n е нечетно" if (n&1) // побитово & ... ако младшия бит е 1 - нечетно ... просто и ясно if (n%2) // остатък от делене на 2 ... i |
|
| Автор: | relsys [ Пет Май 25, 2007 2:13 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
стига де колега, нали съм написал и още една функция, това беше ей така за спорта.......
е ама не гледате кода, аз n още като го подавам е -1, щото ако подам 256, тва е вече 2 байта, а условието е да се подава един байт, или греша нещо, но програмата работи правилно... то сега се сещам че може вместо 256 може да подавам 0 щот тя не се ползва, ама върху такива задачи не се замислям докато пиша, щот в тоя вид няма реално приложение |
|||||||||||||||||||
| Автор: | ps66 [ Пет Май 25, 2007 2:38 pm ] | |||||||||
| Заглавие: | ||||||||||
В грешка си ... ама виждам че не приемаш съвети ... така че успех ! |
||||||||||
| Автор: | HCL [ Пет Май 25, 2007 2:51 pm ] | |||||||||
| Заглавие: | ||||||||||
Още едно предложение за втората функция:
|
||||||||||
| Автор: | relsys [ Пет Май 25, 2007 3:11 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
Размерността на масива е от 1 до 256, n съответно е от 0 до 255, така че при 256 елемента и i=0 се разменят m[0] i m[n-0], което e m[255]. Къде бъркам? |
|||||||||||||||||||
| Автор: | bateAz [ Пет Май 25, 2007 3:41 pm ] | |||||||||
| Заглавие: | ||||||||||
Боже, Боже!
Момче, ти си роден за адвокат или поне за политик. |
||||||||||
| Автор: | relsys [ Пет Май 25, 2007 4:21 pm ] | ||||||||||||||||||
| Заглавие: | |||||||||||||||||||
мда, явно няма да се разберем, няма смисъл от безсмислени спорове, само един последен въпрос: Програмата работи ли? |
|||||||||||||||||||
| Автор: | ps66 [ Пет Май 25, 2007 4:56 pm ] | |||||||||
| Заглавие: | Re: Айде да решим една задача | |||||||||
Абе човек ... ето ти цитат от собственното задание:
кода ти е верен ... само тоя дето ще ползва процедурата ти , се сети да я викне с n=n-1 (n = x-1)! това е най-лошия начин на писане на какъвто и да е език! |
||||||||||
| Автор: | ToHu [ Пет Май 25, 2007 5:04 pm ] |
| Заглавие: | |
Ми който не иска да слуша няма смисъл да му се обяснява. А относно коментара за честата грешка на С програмистите ... може би е по точно да с екаже на начинаещите С програмисти |
|
| Автор: | ps66 [ Пет Май 25, 2007 5:13 pm ] | |||||||||
| Заглавие: | ||||||||||
e ... освен "начинаещи" ....може да се добави и "напреднали, но преминаващи от паскал/басик на C" |
||||||||||
| Автор: | ToHu [ Пет Май 25, 2007 5:43 pm ] |
| Заглавие: | |
Да де, начинаещи със С-то имах в предвид |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|