|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:09 am
Айде да решим една задача
| Автор |
Съобщение |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
 Айде да решим една задача
Наложи ми се да напиша една програмка на С, ма искам да видя как го правят и професионлистите, после ще постна и моя код, ако имате желание ето задачата:
1. Имаме едномерен глобален масив от байтове (unsigned char) с 256 елемента. а) Да се направи функция която получава като параметър един байт 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;
|
| Чет Май 24, 2007 8:39 pm |
|
 |
|
BrainStorm
Ранг: Почетен член
Регистриран на: Пон Юли 04, 2005 11:51 pm Мнения: 651 Местоположение: София
|
_________________ От наше село са види връо, ама от връо се невиди наше село ... що така и я незнам .. ?!?
Последна промяна BrainStorm на Пет Май 25, 2007 3:25 pm, променена общо 1 път
|
| Чет Май 24, 2007 9:17 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
ще се изненадаш - ама func2:
- няма да размества каквото и да е
- при нечетно n - ще прави m[1] = 255

|
| Пет Май 25, 2007 8:26 am |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
Ето го моя код:
Доколкото аз разбрах условието, целта е кодът да е максимално бърз и да се използват колкото може по - малко променливи. Незнам дали съм се справил добре, не познавам добре С, така че очаквам мнения.
|
| Пет Май 25, 2007 11:42 am |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
в кода:
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
|
| Пет Май 25, 2007 12:03 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
стига де колега, нали съм написал и още една функция, това беше ей така за спорта.......
е ама не гледате кода, аз n още като го подавам е -1, щото ако подам 256, тва е вече 2 байта, а условието е да се подава един байт, или греша нещо, но програмата работи правилно...
то сега се сещам че може вместо 256 може да подавам 0 щот тя не се ползва, ама върху такива задачи не се замислям докато пиша, щот в тоя вид няма реално приложение
|
| Пет Май 25, 2007 2:13 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
В грешка си ... ама виждам че не приемаш съвети ... така че успех !
|
| Пет Май 25, 2007 2:38 pm |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Още едно предложение за втората функция:
|
| Пет Май 25, 2007 2:51 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
Размерността на масива е от 1 до 256, n съответно е от 0 до 255, така че при 256 елемента и i=0 се разменят m[0] i m[n-0], което e m[255]. Къде бъркам?
|
| Пет Май 25, 2007 3:11 pm |
|
 |
|
bateAz
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 4:11 pm Мнения: 3750 Местоположение: София
|
Боже, Боже!
Момче, ти си роден за адвокат или поне за политик.
|
| Пет Май 25, 2007 3:41 pm |
|
 |
|
relsys
Ранг: Форумен бог
Регистриран на: Пет Ное 25, 2005 11:41 am Мнения: 1680
|
мда, явно няма да се разберем, няма смисъл от безсмислени спорове, само един последен въпрос:
Програмата работи ли?
|
| Пет Май 25, 2007 4:21 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
 Re: Айде да решим една задача
Абе човек ... ето ти цитат от собственното задание:
кода ти е верен ... само тоя дето ще ползва процедурата ти , се сети да я викне с n=n-1 (n = x-1)!
това е най-лошия начин на писане на какъвто и да е език!
|
| Пет Май 25, 2007 4:56 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Ми който не иска да слуша няма смисъл да му се обяснява.
А относно коментара за честата грешка на С програмистите ... може би е по точно да с екаже на начинаещите С програмисти 
|
| Пет Май 25, 2007 5:04 pm |
|
 |
|
ps66
Ранг: Форумен бог
Регистриран на: Пет Яну 19, 2007 9:16 am Мнения: 1063 Местоположение: путинофили: "иди н***й"
|
e ... освен "начинаещи" ....може да се добави и "напреднали, но преминаващи от паскал/басик на C" 
|
| Пет Май 25, 2007 5:13 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Да де, начинаещи със С-то имах в предвид
|
| Пет Май 25, 2007 5:43 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 5 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|