Имам нужда от помощ за една задача на Паскал

На братчеда на леля му на зетя й брат му се жени, не мога да избера с какъв цвят обувки да ходя на сватбата?? Помагайте!

Модератор: Общи модератори

УмНаТа КаКа с чЕрпАка :)
Аватар
Мнения: 1055
Регистриран на: 25.08.2006
Местоположение: Stara Zagora
Пол: Жена
Кара: '96 BMW318 cabrio

Мнение от Eliana » 09 Мар 2007, 13:05

:clap:
SummonedToDIe и да почерпиш Tosh :)
Изображение

старши ентусиаст
Аватар
Мнения: 2068
Регистриран на: 1.11.2004
Местоположение: София
Пол: Мъж

Мнение от SummonedToDIe » 09 Мар 2007, 13:11

Някой ще напише ли програмата като цяло, че не разбрах това дето го написа коелгата Тош от къде точно е :roll: :help:

старши ентусиаст
Аватар
Мнения: 1599
Регистриран на: 29.10.2005
Местоположение: фар-ийст ъв София
Пол: Мъж
Кара: KiA, Volvo, Ford
Мечтае да кара: Болид от F1
Детайли за колата: Picanto 2008, V70 2001, Puma 2021

Мнение от logout » 09 Мар 2007, 13:13

Eliana написа:Ти не можеш ли да помогнеш? След като си програмист значи имаш представа как е решението :)


За съжаление Паскала го учих само за оценката :mhihi: Цял живот пиша на C и ако беше за C, щях да я нащракам за 5 минути... Вход/изход на Паскал са ми тъмна Индия :( Иначе дадената от мен процедура върши основните пресмятания в задачата. Само трябва да се напише и една елементарна процедура за намиране на минималната стойност на дадения ред. И понеже се изприщвам, като пиша на паскал, ей я на C:

Код: Избери целия код
int min(int row)
{
   int i, min_val;
   
   min_val = B[row][0];
   for(i=1; i<N; i++)
     if(min_val < B[row][i])
       min_val = B[row][i];

   return min_val;
}


Поне идеята трябва да е ясна...
It's not who You are, it's who You know...

старши ентусиаст
Аватар
Мнения: 2184
Регистриран на: 7.08.2006
Местоположение: София / ghetto+
Пол: Мъж
Кара: m52 e36
Мечтае да кара: е38 ;)
Детайли за колата: е36

Мнение от t0sh » 09 Мар 2007, 13:19

ей summoned, процедурата е zeroing, а ако идея си нямаш какво представлява значи и да минеш не си научил нищо.

та аз предлагам вземи разгледай какво ти е пускано и го сглоби сам, паскала се чете като новините, не е са сме ти пуснали пойнтери на С и да се чудиш на кой свят си ;)

даже съм ти сложил елементарен ред с =1000 и коментари между редовете...

аз отказвам да ти го напиша цялото и да го копираш без да имаш идея кво правиш :)


p.s. ей ти пример пуснат без коментар от една моя програма, на който според мен и логаут колегата ще се поозори :mhihi:

Код: Избери целия код
unsigned char ** decay_tab;

void init_decay_tab()
{
   int i, j;

   //dimension of simulationfield
   decay_tab=(unsigned char**)new void* [nr_x_lmnts * nr_y_lmnts ];
   assert(decay_tab != NULL);

   for (i=0; i< nr_x_lmnts * nr_y_lmnts; i++)
   {
       decay_tab[i] = new unsigned char [nr_x_lmnts * nr_y_lmnts];
       assert(decay_tab[i] != NULL);

       for (j=0; j<nr_x_lmnts * nr_y_lmnts; j++)
       {
           decay_tab[i][j] = 0;
       }
   }
}

старши ентусиаст
Аватар
Мнения: 2068
Регистриран на: 1.11.2004
Местоположение: София
Пол: Мъж

Мнение от SummonedToDIe » 09 Мар 2007, 13:29

t0sh написа:...

Разбирам те, баце, наготово всеки може :winky:
Идеята ми е, че трябва да предам дадената задача в сряда(независимо дали я разбирам или не), като дотогава трябва да науча и теорията за процедури, масиви и всичко от което имам нужда за да я реша ;)
И тримата имате по едно черпене :winky:
Дано успея да я сглобя :roll:

старши ентусиаст
Аватар
Мнения: 1599
Регистриран на: 29.10.2005
Местоположение: фар-ийст ъв София
Пол: Мъж
Кара: KiA, Volvo, Ford
Мечтае да кара: Болид от F1
Детайли за колата: Picanto 2008, V70 2001, Puma 2021

Мнение от logout » 09 Мар 2007, 13:37

ОТ: :mhihi: Е, при двумерен масив много ясно, че се ползва двоен пойнтер. Само за една оптимизацийка да те светна: това nr_x_lmnts * nr_y_lmnts може да се изчисли веднъж само в началото, а не да се смята на всяка итерация на цикъла по-долу... После защо 3GHz процесорите под виндовс работят бавно :mhihi:
It's not who You are, it's who You know...

старши ентусиаст
Аватар
Мнения: 2184
Регистриран на: 7.08.2006
Местоположение: София / ghetto+
Пол: Мъж
Кара: m52 e36
Мечтае да кара: е38 ;)
Детайли за колата: е36

Мнение от t0sh » 09 Мар 2007, 13:39

че тя ти е готова написана, а ако не разбираш - що не пробваш гугъл за

'pascal tutorial'

и не че не искам защото ще те гърча да се мъчиш, а защото изпуснеш ли основите, цялото ти обучение което се основава на тях ще го караш с мъки. елементарно е, много силно те съветвам го разрови и разбери ;)

успех :)

п.с. логоут: има обаче на кантар едно нещо 'прегледност', и когато тежи срещу едно умножение на цели числа, мисля че единственото нещо което бих ускорил е може би първата елка на света :mhihi:

п.с.2. функцийката както я виждаш, съм я чистил и оптимизирал сигурно 4 часа - заради реда с new - може да се напише и с 20 реда :) ако ти е елементарно - евалата :)

Вече кара БМВ
Вече кара БМВ
Аватар
Мнения: 1188
Регистриран на: 18.10.2002
Местоположение: Козлодуй
Кара: Миксер. BMW i4 M50

Мнение от Един » 09 Мар 2007, 13:46

Най-обичам някой татко (или майка) да ми донеси подобно на това условие щото студента/студентката/ученика/ученичката не може да се справи. Взимам листчето, чета го задълбочено и им казвам:
"Да може да се направи, но ще ви струва 250лв."
Обикновено тук разговора приключва. Но съм имал и случай да продължи:
"Амии, добре кога ще е готово? Другата седмица ли?"
"НЕ! Елате с парите след половин час."
Отсреща : :shock: и :++ и след пауза "ама като е толкова просто защо искате толкова пари?"
"ами ако сина/дъщеря ви няма да има полза от тази задача, поне аз да имам някаква."



t0sh написа:
Код: Избери целия код
unsigned char ** decay_tab;

void init_decay_tab()
{
   int i, j;

   //dimension of simulationfield
   decay_tab=(unsigned char**)new void* [nr_x_lmnts * nr_y_lmnts ];
   assert(decay_tab != NULL);

   for (i=0; i< nr_x_lmnts * nr_y_lmnts; i++)
   {
       decay_tab[i] = new unsigned char [nr_x_lmnts * nr_y_lmnts];
       assert(decay_tab[i] != NULL);

       for (j=0; j<nr_x_lmnts * nr_y_lmnts; j++)
       {
           decay_tab[i][j] = 0;
       }
   }
}


Един двумерен масив от байтове се пълни с нули. Мразя Ц, та може и да не съм прав.

И накрая да оптимизираме малко мехурчето на Eliana :

For i := 2 to N
For J := 1 to N-i
Последна промяна Един на 09 Мар 2007, 13:49, променена общо 1 път
Преди да монтирате нещо "спортно" на автомобила си, поинтересувайте се поне за какъв спорт е.

старши ентусиаст
Аватар
Мнения: 2184
Регистриран на: 7.08.2006
Местоположение: София / ghetto+
Пол: Мъж
Кара: m52 e36
Мечтае да кара: е38 ;)
Детайли за колата: е36

Мнение от t0sh » 09 Мар 2007, 13:49

айде последен оффтопик:
ясно е какво рпави, въпроса е че е днамичен 2д масив, и този ред беше закачка за логаут колегата и пример за съммонед какво е неясен за начинаещи (и не само) код :)
decay_tab=(unsigned char**)new void* [nr_x_lmnts * nr_y_lmnts ];


за моите критерии си е велик реда ;)


и един поздрав за съммонд :)

PROGRAMMERS' DRINKING SONG

100 little bugs in the code,
100 bugs in the code,
fix one bug, compile it again,
101 little bugs in the code.

101 little bugs in the code.....
(Repeat until BUGS = 0)


p.s. 2 - че нещо рядко има програмиране :mhihi:
ако говориме за оптимизиране, може да ползва и quick-sort който е със скоротст O(n log n) докато бабъла е n^2

за сметка на сложността ;)

Код: Избери целия код
void quickSort(int numbers[], int array_size)
{
  q_sort(numbers, 0, array_size - 1);
}


void q_sort(int numbers[], int left, int right)
{
  int pivot, l_hold, r_hold;

  l_hold = left;
  r_hold = right;
  pivot = numbers[left];
  while (left < right)
  {
    while ((numbers[right] >= pivot) && (left < right))
      right--;
    if (left != right)
    {
      numbers[left] = numbers[right];
      left++;
    }
    while ((numbers[left] <= pivot) && (left < right))
      left++;
    if (left != right)
    {
      numbers[right] = numbers[left];
      right--;
    }
  }
  numbers[left] = pivot;
  pivot = left;
  left = l_hold;
  right = r_hold;
  if (left < pivot)
    q_sort(numbers, left, pivot-1);
  if (right > pivot)
    q_sort(numbers, pivot+1, right);
}


и на паскал by google :mhihi:
http://sandbox.mc.edu/~bennet/cs404/doc/qsort_pas.html

старши ентусиаст
Аватар
Мнения: 1599
Регистриран на: 29.10.2005
Местоположение: фар-ийст ъв София
Пол: Мъж
Кара: KiA, Volvo, Ford
Мечтае да кара: Болид от F1
Детайли за колата: Picanto 2008, V70 2001, Puma 2021

Мнение от logout » 09 Мар 2007, 14:07

Пак OT: Tosh, да те питам, защо не използваш malloc, която директно нулира заделената памет... Аз тоя new не го харесвам...
It's not who You are, it's who You know...

Вече кара БМВ
Вече кара БМВ
Аватар
Мнения: 1188
Регистриран на: 18.10.2002
Местоположение: Козлодуй
Кара: Миксер. BMW i4 M50

Мнение от Един » 09 Мар 2007, 14:53

t0sh написа:въпроса е че е днамичен 2д масив


Като е динамичен можеш ли да го resize-ваш динамично? интересно ми е как изглежда това на Ц.

P.S Не случайно написах "да оптимизираме мехурчето".

P.P.S трябва да накараме Админите да ни направят отделен форум за програмиране :)
Преди да монтирате нещо "спортно" на автомобила си, поинтересувайте се поне за какъв спорт е.

старши ентусиаст
Аватар
Мнения: 1599
Регистриран на: 29.10.2005
Местоположение: фар-ийст ъв София
Пол: Мъж
Кара: KiA, Volvo, Ford
Мечтае да кара: Болид от F1
Детайли за колата: Picanto 2008, V70 2001, Puma 2021

Мнение от logout » 09 Мар 2007, 15:52

Един написа:Като е динамичен можеш ли да го resize-ваш динамично? интересно ми е как изглежда това на Ц.


Сложно :mhihi: . В книгата на Биорне Строуструп "C++ в примери" имаше код за динамичен масив... мани-мани.

Един написа:P.P.S трябва да накараме Админите да ни направят отделен форум за програмиране :)
:yes: :mhihi:
It's not who You are, it's who You know...

старши ентусиаст
Аватар
Мнения: 2184
Регистриран на: 7.08.2006
Местоположение: София / ghetto+
Пол: Мъж
Кара: m52 e36
Мечтае да кара: е38 ;)
Детайли за колата: е36

Мнение от t0sh » 09 Мар 2007, 21:35

ми логаут, айде напищи ми го с malloc, двумерен, динамичен т.е. задава се от файл примерно, x/y координати размер x*y и двете посоки, занулен и готов.

а за run-time динамичен оп всяко време (не ми трябваше това) - общо взето или си адски смел с почти асемблерски код и брутално непрегледно (незнам дали бачка, от сорта да смениш на 2 integera стойностите без да ползваш 3-ти времене :mhihi:), или просто правиш нов по-голям и копираш от стария.

или ползваш 'linked lists', и всеки сочи към колкото други искаш и както искаш и си ги шириш.

друг начин ненам :)

п.с. по темата - ако има закъсване тип 'изчетох пробвам но не разбирам' ще се помага :)

Предишна

Назад към Извън Темата

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани

Последни теми
Facebook