fentg.com

ФОРУМЪТ на ФЕНОВЕТЕ на НТГ
Дата и час: Пет Май 14, 2021 2:21 pm

Часовете са според зоната UTC + 2 часа [ DST ]


Правила на форума


Натиснете за да видите правилата



Напиши нова тема Отговори на тема  [ 17 мнения ]  Отиди на страница 1, 2  Следваща
Автор Съобщение
 Заглавие: Архив със задачи
МнениеПубликувано на: Пет Яну 02, 2009 9:40 pm 
Offline

Регистриран на: Пон Дек 29, 2008 10:00 pm
Мнения: 42
Предлагам в една тема НАПРИМЕР - ТАЗИ да вкарваме и да събираме само задачи но без никакви други излишни коментари. Нека задачите да се метериализират във следната форма:

УСЛОВИЕ НА ЗАДАЧАТА:
ЕЗИК НА КОИТО ЩЕ БЪДЕ РЕШЕНА : C/C++/Java/Pascal
РЕШЕНИЕ НА ЗАДАЧАТА

Ще старитирам със три задачи които са свързани с масивите взех ги от учебника на Магдалена Тодорова
"C++ първа част " но тъи като сме на вълна "С" ги реших на "С"

УСЛОВИЕ НА ЗАДАЧАТА:
Код:
Да се напише програма, която въвежда последователно n числа, след което ги извежда в обратен ред.   


ЕЗИК НА КОЙТО ЩЕ БЪДЕ РЕШЕНА "С"

РЕШЕНИЕ:
Код:
#include <stdio.h>

int main()
{
   
//Променливи за стоиност   
int n,i;   
//Масив за съхранение
int a[n];
   
//Вавеждач числата в редицата
printf("Vavedete broi na  chislata v redicata  : ");
scanf("%d",&n);

printf("Vavedete chislata ot redicata   ");
for(i=1;i<=n;i++)
{
   scanf("%d",&a[i]);
   
}

//Обръщам цикъла обратно за да изведа числата от масива но в обратен ред

printf("A sega chislata v obraten red   : ");
for(i=n;i>0;i--)
{
  printf(" %d ",a[i]);
}

getch();

}



УСЛОВИЕ НА ЗАДАЧАТА
Код:
Дадени са редицата от цели числа a0, a1, …, an-1 (n ≥ 1) и цялото число x. Да се напише програма, която намира колко пъти x се съдържа в редицата


ЕЗИК С

РЕШЕНИЕ

Код:
int main()
{
int x,n,i;
int broika=0;
int a[n];
 
  //вавеждам числата в редицата
  printf("Kolko chisla shte ima v redicata ");
      scanf("%d",&n);
     
      printf("Vavedete chislata v redicata");
 
  for(i=1;i<=n;i++)
  {
 
  scanf("%d",&a[i]);
 
  }
//Вавеждам числото което ще търся дали се намира в редицата

  printf(" Vavedete chisloto X ");
  scanf("%d",&x);
 
// В този цикъл ще видя проверявам дали търсеното число се среща ако го намеря ще инкрементирам променливата broika
  printf(" Da vidim imame li savpadenie : ");
  for(i=0;i<=n;i++)
  {
   if(x == a[i])
   {
    broika++;
    }
   
   }
   
   //Ако имам поне едно число в променливата ще ми каже че чеслото се среща
  if(broika>0)
   {
    printf("DA");
    }
   else printf("NE");


getch();

}


УСЛОВИЕ
Код:
Дадени са редицата от цели числа a0, a1, …, an-1 (n ≥ 1) и цялото число x. Да се напише програма, която проверява дали x се съдържа в редицата.



ЕЗИК С

РЕШЕНИЕ

Код:
include <stdio.h>

int main()
{
//Променливи за стоиности
int x,n,i;
//изчисляваща променлива
int broika=0;
//Масив в който се сортират числата
int a[n];
 
 
  //Задавам брои числа на редицата и после и самите числа
 
  printf("Kolko chisla shte ima v redicata ");
      scanf("%d",&n);
     
      printf("Vavedete chislata v redicata");
 
  for(i=1;i<=n;i++)
  {
 
  scanf("%d",&a[i]);
 
  }

  // Тука въвеждам числото  което ще го проверявам колко пъти се среща
 
  printf(" Vavedete chisloto X ");
  scanf("%d",&x);
 
  //В този цикъл при всяка итерация ще проверявам дали има съвпадение ако име ще инкрементира променливата broika и ще дава резултат
 
  printf(" Da vidim kolko pati chisloto se sreshta v tazi redica : ");
  for(i=0;i<=n;i++)
  {
   if(x == a[i])
   {
    broika++;
    }
   
   }
printf("  Chislot %d\n go ima  %d\n " ,x,broika);


getch();

}


Всяка рационализация е добре дошла

Решенията са тествани и работят с компилатор Dev C++


Върнете се в началото
 Профил  
 
 Заглавие: Re: Архив със задачи
МнениеПубликувано на: Пет Яну 02, 2009 9:57 pm 
Offline
Администратор
Аватар

Регистриран на: Нед Ное 02, 2008 5:30 pm
Мнения: 3550
Радваща тема!

Искам в старата или в нова тема - сортировки да обсъдим малко някои методи - нека да почнем с "мехурчето". То има вариации и рационализации! Но нека започнем със словесното описание на алгоритъма!

Бих го започнал разсредоточено така:
Разглежда се всяка двойка съседни елементи: а[0],a[1] ; a[1],a[2] и т.н. докога?
При необходимост (познайте каква) се разменят ст-стите на елементите.

Познайте какво става след едно преминаване през масива?

Колко такива преминавания са необходими? Знае ли се отговора или зависи?

_________________
Изображение


Върнете се в началото
 Профил  
 
 Заглавие: Re: Архив със задачи
МнениеПубликувано на: Пет Яну 02, 2009 10:12 pm 
Offline

Регистриран на: Пон Дек 29, 2008 10:00 pm
Мнения: 42
Цитат:
Познайте какво става след едно преминаване през масива?


Разменят се стоиностите на наи краините елементи в масива

Цитат:
Колко такива преминавания са необходими? Знае ли се отговора или зависи?


Зависи от зависи разбирасе трябва да се вземе в предвид "хаотичността" на масива при всяко преминаване ще разменяме по една стоиност и ще обхождаме масива n но брои пъти
Примерно в един масив може да имаме редицата от числа

*1*2*3*4*5*10*6 редицата се състои от 7 елемента за да ги сортираме ни е необходимо само едно преминаване
през масива и промяна на краините позиции
този масив не е хаотично подреден но ако обаче имаме нещо от сорта на

*3*6*10*1*5*2*4 същите числа но редицата е подредена по много по зловещ начин

При първото обхождане няма да сменяме позициите при второто ще разменим местата на 2 и 5 и така до пълното сортиране това значи че ще правим доста итерации


Върнете се в началото
 Профил  
 
 Заглавие: Re: Архив със задачи
МнениеПубликувано на: Пет Яну 02, 2009 10:51 pm 
Offline
Администратор
Аватар

Регистриран на: Нед Ное 02, 2008 5:30 pm
Мнения: 3550
да припомня - при метода на мехурчето се разменят съседни, а не крайни ст-сти!

за едно обхождане имам предвид пълното обхождане от a[0] до a[n-1] при бройка n

пак питам ако обходим масива само един цял път с размяна на двойки съседни елементи - където е необходимо? (където има инверсия - ако искаме елементите да растат от ляво на дясно -> ако a[i-1]>a[i] т.е. има инверсия, защото подредбата на a[i-1],a[i] е инверсна, обратна на желаната от нас)
какво ще се случи спрямо първоначалната подредба? размяна на крайните не се случва точно - подсказвам - може да пробвате с пулчета от табла, надписани, но с неперманентен фулмастър /за да може да се изтрият после/
Надписват се стойностите - нареждат се в първоначалното положение на масива и им се бае - т.е. прилага им се метода...

та какво се случва при преминаването - един път? ако не сте сигурни в отговора - пробвайте с пулчетата и тогава пишете!

_________________
Изображение


Върнете се в началото
 Профил  
 
 Заглавие: Re: Архив със задачи
МнениеПубликувано на: Съб Яну 03, 2009 11:12 pm 
Offline

Регистриран на: Пон Дек 29, 2008 10:00 pm
Мнения: 42
За всички които се интересуват от задачи за Олимпиади да проверят този саит http://infoman.musala.com/ има задачи от всички национални и международни олимпиади

Ако тази година се хвана да изуча C++ може и да прецапам до нещо като Пполетен турнир по информатика и да видя какви са задачите

Един директен въпрос
Във нашето училище може ли да се проведе ОЛИМПИАДА ПО ИНФОРМАТИКА първи кръг и прочие които се залегнали в календара на МОН мися че Февруари но може и да греша се организираше по училищата този тип олимпяда


Върнете се в началото
 Профил  
 
 Заглавие: Re: Архив със задачи
МнениеПубликувано на: Съб Яну 03, 2009 11:26 pm 
Offline
Администратор
Аватар

Регистриран на: Нед Ное 02, 2008 5:30 pm
Мнения: 3550
Ще видим какво може да се направи.

Първо C, след него C++...

Успешно учене

_________________
Изображение


Върнете се в началото
 Профил  
 
 Заглавие: Re: Архив със задачи
МнениеПубликувано на: Нед Яну 04, 2009 2:54 pm 
Offline
Администратор
Аватар

Регистриран на: Нед Ное 02, 2008 5:30 pm
Мнения: 3550
Какъв е този фрагмент?

Код:
.....
    for(i = 0; i < size; i++)
      for(j = size - 1; j > i; j--)
       if (arr[j] > arr[j-1])
          swap(&arr[j], &arr[j-1]);
.....

_________________
Изображение


Върнете се в началото
 Профил  
 
 Заглавие: Re: Архив със задачи
МнениеПубликувано на: Пон Яну 05, 2009 12:28 am 
Offline
Аватар

Регистриран на: Чет Дек 04, 2008 9:45 pm
Мнения: 97
Местоположение: България
Ако не се лъжа от количеството алкохол в късния час - това чист swap - мисля че разменя стойности :rolleys: но не съм сигурен на 100% де - мисля, че "балонизира" тоест ако едното е по-голямо от другото - просто ги разменя за да им издокара някаква временна нова подреба...

_________________
...А когато всички се помислите за големи звезди, не забравяйте, кой е вашият небосклон
DJ Nifanta


Върнете се в началото
 Профил  
 
 Заглавие: Re: Архив със задачи
МнениеПубликувано на: Пон Яну 12, 2009 9:20 pm 
Offline

Регистриран на: Сря Ное 19, 2008 5:48 pm
Мнения: 513
При въведени естествени числа n и k да се пресметне произведението n(n-k)*(n-2*k)...(n-k*k)
Тази задача е от книгата на Христо Крушков, която ми дадохте да чета, направи ми впечатление че беше при задачите при които трябва и вътрешен фор, но я реших и с 1 фор. Пробвах я с няколко числа и бачка нормално. Повечето от другите задачи, са с някакви нещица, дето не сме ги учили още по математика.
Код:
#include<stdio.h>
#include<conio.h>

main()
{
int n,k,j,p=1;
   printf("Enter A:");
  scanf("%d",&n);
    printf("Enter B:");
  scanf("%d",&k);

for(j=1;j<k;j++)
p*=(n-j*k);
n*=p;
printf("otgovor : %d",n);
getch();
}

_________________
Toва което не може да се опише с думи, се описва с музика.


Върнете се в началото
 Профил  
 
 Заглавие: Re: Архив със задачи
МнениеПубликувано на: Нед Яну 18, 2009 11:16 am 
Offline
Администратор
Аватар

Регистриран на: Нед Ное 02, 2008 5:30 pm
Мнения: 3550
Компилирайте и проверете за "гърмежи" следните кодове:

Приложение на функцията w2d (или как да си пишем собствени ф-ции) да "усеща" числата от тип int - програмата я ползва макар и само на едно място - но така main е по-четивна...
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

int w2d(char *w)
{int n; char *ww;
  n=atoi(w);
  itoa(n,ww,10);
  return strcmp(w,ww);
}

void main()
{char *t;

while(1)
{
  gets(t);
  if(w2d(t))puts("err");
  else puts(t);
}

}


Това е програмата, върху която се "борихме" вчера. Реализацията е без собствена функция... Също така и не отчита данните по позиция... Но работи... Идеята за w2d (word to data) се роди в момента, в който се видя, че един и същи код тр. да се използва два пъти в main... (заради двойния начин на употреба на strtok...)
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

void main()
{FILE *fpi, *fpo;
int dat;
char rd[1000], *wrd, *wrdd;

fpi=fopen("inpdata.dat","r");
fpo=fopen("outdata.dat","w");

  while(!feof(fpi))
    {
      fgets(rd,1000,fpi);

      wrd=strtok(rd," ,;\t\n");
      if(wrd)
       {
        dat=atoi(wrd);
        itoa(dat,wrdd,10);
        if(strcmp(wrd,wrdd))printf("Data error: %s\n",wrd);
        else fprintf(fpo,"%s\n",wrd);
       }

      for(;wrd;)
       {
   wrd=strtok(NULL," ,;\t\n");
   if(wrd)
         {
          dat=atoi(wrd);
          itoa(dat,wrdd,10);
          if(strcmp(wrd,wrdd))printf("Data error: %s\n",wrd);
          else fprintf(fpo,"%s\n",wrd);
         }
       }
    }
fclose(fpi);
fclose(fpo);
getch();
}
Ако трябва да се дефинира условие на задачата от вчера, то би изглеждало така:
Да се напише програма, която чете данни от текстов файл. Валидните (от тип int) данни прехвърля в друг текстов файл а за невалидните съобщава в конзолата...
Екстри: Да отчита и поредния номер на невалидните данни...

Ето и реализацията чрез ползване на w2d:
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>

int w2d(char *w)
{int n; char ww[10];
  n=atoi(w);
  itoa(n,ww,10);
  return strcmp(w,ww);
}

int main()
{FILE *fpi, *fpo;
  char rd[1000], *wrd;
  int cnt=1;

  fpi=fopen("yyy.txt","r");
  fpo=fopen("zzz.txt","w");

  while(!feof(fpi))
   {fgets(rd,1000,fpi);
    wrd=strtok(rd," ,;\t\n");
    if(wrd)
     {if(w2d(wrd))
      {printf("Over Data %d Error: ",cnt); puts(wrd);}
      else {fputs(wrd,fpo); fputs("\n",fpo);}
      cnt++;}
      while(wrd)
       {wrd=strtok(NULL," ,;\t\n");
        if(wrd)
         {if(w2d(wrd))
          {printf("Over Data %d Error: ",cnt); puts(wrd);}
         else {fputs(wrd,fpo); fputs("\n",fpo);}
         cnt++;}
       }
    }

  fclose(fpi);
  fclose(fpo);

getch();

return 0;
}
Заради двойния характер на strtok отново има повторение на код, но не е толкова много.
Хайде, нека някой се опита да опише с думи принципът на работа на w2d да видим дали е разбран правилно и изобщо...
Един проблем възникна в последната програма: Във w2d от char *ww; промених на char ww[10];
Иначе гърмеше здраво, че и със Send Error, на което давах Don't Send...

_________________
Изображение


Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 17 мнения ]  Отиди на страница 1, 2  Следваща

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

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


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Превод: Ioan Filipov