argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: Кандидатстудентски изпит 2010 по информатика  (Прочетена 2665 пъти)

Таньо Иванов

  • Модератор
  • *****
  • Неактивен Неактивен
  • Публикации: 81
  • Бъди коректен потребителю!

Ако имате идея как се решават задачите на кандидатстудентските изпити по информатика, пишете тук. Имам няколко затруднения и много ще се радвам да ми помогнете за тяхното разрешаване.
Активен
Блаженството за тялото е здравето, за ума – знанието.

Таньо Иванов

  • Модератор
  • *****
  • Неактивен Неактивен
  • Публикации: 81
  • Бъди коректен потребителю!

Ето например една от задачите давани някога на кандидатстудентски изпит през миналите години:

Кандидатстудентски изпит по информатика, 2003 г. – Пловдивски университет

Да се състави компютърна програма за информационно обслужване на училищна библиотека. В библиотеката има до 5000 различни книги и от всяка книга има до 50 екземпляра.

А) Да се въведе и контролира, броят N на всички книги в библиотеката (3<=N<=5000). За всяка книга да се въведе следната информация:
- сигнатурен номер: 1, 2, 3, ..., N;
- заглавие: низ не по дълъг от 100 знака;
- имена на автора: име, презиме и фамилия в един низ, не по-дълъг от 80 знака, в който имената са разделени с точно един интервал;
- единична цена: реално число в интервала [1.00;99.99] ;
- брой закупени екземпляри: цяло число в интервала [1;50].

Б) Да се изведе списък на всички книги в библиотеката, подреден по сигнатурен номер, като за всяка книга се извежда: сигнатурен номер, заглавие, име на автора във вида: фамилия, инициали на името и презимето, единична цена, брой екземпляри, общата сума заплатена за тези екземпляри, разделени с по един интервал. Инициалите са първата буква на съответното име, последвана от точка. Например за книгата със сигнатурен номер 36, заглавие Под игото, автор Иван Минчов Вазов, единична цена 3.52 лв., от която са закупени 30 екземпляра да се изведе:
36 Под игото Вазов И.М. 3.52 30 105.60

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

Г) Да се пресметне и изведе средно аритметичната единична цена S на книгите от библиотеката (средно-аритметичното число на единичните цени). Да се изведе и списък на всички автори, които имат поне три книги с единични цени по-големи от S.


Имам само няколко проблема които са:
1.) Да разделям стрингове на токени, знам че чарове се разделят с strtok(), но със стрингове не става. Моля ви помогнете, това е най-сериозния ми проблем.

2.)При Г) условие е да се изведе списук с авторите които имат три книги с срдна цена по-голяма от S. S го намирам и нямам преоблем, но самият списък е трудно да се състави.
Активен
Блаженството за тялото е здравето, за ума – знанието.

Таньо Иванов

  • Модератор
  • *****
  • Неактивен Неактивен
  • Публикации: 81
  • Бъди коректен потребителю!

Начинът по който винаги съм решавал тези задачи е такъв:

#include <iostream>
#include <string>
using namespace std;

struct biblioteka
{
   int nomer;
   char title[100];
   char avtor[80];
   double cena;
   int broiki;
};

biblioteka kniga[5000];
int n;
int i;
biblioteka swap;

int broi()
{
   cout<<"Broi na knigite: ";cin>>n;
   if(n<2 ||n>5000)
   {
      cout<<"Greshen broi knigi!"<<endl;
      broi();
   }
}

int kn_nomer(int i)
{
   int nomer;
   cout<<"Signaturen nomer: ";cin>>nomer;
   
   if(nomer<1 || nomer>n)
   {
      cout<<"Greshna cifra za signaturen nomer!"<<endl;
      kn_nomer(i);
   }
   
   kniga.nomer=nomer;
}

void kn_title(int i)
{
   char title[100];
   cout<<"Zaglavie na knigata: ";cin.getline(kniga.title, 100);
   strtok(kniga.title, "\n");
}

void kn_avtor(int i)
{
   char avtor[80];
   cout<<"Avtor: ";cin.getline(kniga.avtor, 80);
   strtok(kniga.avtor, "\n");
}

double kn_cena(int i)
{
   double cena;
   cout<<"Cena: ";cin>>cena;
   
   if(cena<1.00 || cena>99.99)
   {
      cout<<"Greshna cena!"<<endl;
      kn_cena(i);
   }
   
   kniga.cena=cena;
}

int kn_broiki(int i)
{
   int broiki;
   cout<<"Broi ekzempliari: ";cin>>broiki;
   
   if(broiki<1 || broiki>50)
   {
      cout<<"Greshen broi ekzempliari!"<<endl;
      kn_broiki(i);
   }
   
   kniga.broiki=broiki;
}

int main()
{
   broi();
   for(int i=0;i<n;i++)
   {
      kn_nomer(i);
      kn_title(i);
      kn_avtor(i);
      kn_cena(i);
      kn_broiki(i);
      cout<<endl;
   }
   
   cout<<"Podrejdane na knigite po signaturen nomer: "<<endl<<endl;
   biblioteka swap;
   
   for(int i=0;i<n;i++)
   {
      for(int k=0;k<n-i-1;k++)
         if(kniga.nomer>kniga[i+1].nomer)
         {
            swap=kniga;
            kniga=kniga[i+1];
            kniga[i+1]=swap;
         }
      cout<<kniga.nomer<<" "<<kniga.avtor<<" "<<kniga.cena<<" "<<kniga.broiki<<" "<<kniga.broiki * kniga.cena<<endl;
   }
   
   cout<<"Podrejdane na knigite po obshta suma zaplatena za tqh: "<<endl<<endl;
   for(int i=0;i<n;i++)
   {
      for(int k=0;k<n-i-1;k++)
      {
         if((kniga.cena*kniga.broiki)<(kniga[i+1].cena*kniga[i+1].broiki))
         {
            swap=kniga;
            kniga=kniga[i+1];
            kniga[i+1]=swap;
         }
         else if((kniga.cena*kniga.broiki)==(kniga[i+1].cena*kniga[i+1].broiki))
         {
            if(kniga.nomer>kniga[i+1].nomer)
            {
               swap=kniga;
               kniga=kniga[i+1];
               kniga[i+1]=swap;
            }
         }
         
      }
      cout<<kniga.nomer<<" "<<kniga.title<<" "<<kniga.avtor<<" "<<kniga.cena<<" "<<kniga.broiki<<" "<<kniga.cena*kniga.broiki<<endl;
   }
   
   cout<<"Izvejdane na srednata stoinost na knigite: "<<endl<<endl;
   
   double s=0;
   for(int i=0;i<n;i++)
   {
      s=(s+kniga.cena)/n;
   }
   
   cout<<"Sredna stoinost na knigite e: "<<s<<"lv. "<<endl;
   for(int i=0;i<n;i++)
   {
      if(kniga.cena<s)
      {
         cout<<kniga.avtor<<" "<<kniga.title<<" "<<kniga.cena<<endl;
      }
   }
   
   system("pause");
   return true;


}
Активен
Блаженството за тялото е здравето, за ума – знанието.

pennev

  • Неактивен Неактивен
  • Публикации: 43

Аз също не знам как ще стане условие Г), но все пак ще постна моето решение без него...

#include <iostream.h>
#include <string.h>
struct book
{
   char zaglavie[101], imeavtor[81];
   int sign, brekz;
   double cena, ocena;
};
typedef book tbook[5000];
void input(book &a)
{

   cout<<"Vavedete sign. N: ";
   cin>>a.sign;
   cin.ignore();
   cout<<"Vavedete zaglavie: ";
   cin.getline(a.zaglavie,101);
   cout<<"Vavedete avtor: ";
   cin.getline(a.imeavtor,81);
   do{
      cout<<"Vavedete cena: ";
      cin>>a.cena;
   } while(a.cena<1.00 || a.cena>99.99);
   do{
      cout<<"Vavedete br. zakupeni ekzemplqri: ";
      cin>>a.brekz;
   } while (a.brekz<1 || a.brekz>50);
   cin.ignore();
   a.ocena=a.brekz*a.cena;
   cout<<"-----------------------------------------------------"<<endl;
}
void inputall(tbook a, int n)
{
   for(int i=0;i<n;i++)
      input(a);
}
void print(book a)
{
   cout<<"-----------------------------------------------------"<<endl;
   cout<<a.sign<<" "<<a.zaglavie<<" ";
   char *p1,*p2,*p3,ime[81];
   strcpy(ime,a.imeavtor);
   p1=strtok(ime," ");
   p2=strtok(NULL," ");
   p3=strtok(NULL," ");
   cout<<p3<<" "<<p1[0]<<"."<<p2[0]<<" "<<a.cena<<" "<<a.brekz<<" "<<a.ocena<<endl;
}
void printall(tbook a, int n)
{
   for(int i=0;i<n;i++)
      print(a);
   
}
void sortsign(tbook a, int n)
{
   for(int i=0;i<n;i++)
      for(int j=n-1;j>i;j--)
         if(a[j].sign<a[j-1].sign)
         {
            book x=a[j];
            a[j]=a[j-1];
            a[j-1]=x;
         }
}
void sortocena(tbook a, int n)
{
   for(int i=0;i<n;i++)
      for(int j=n-1;j>i;j--)
         if(a[j].ocena>a[j-1].ocena)
         {
            book x=a[j];
            a[j]=a[j-1];
            a[j-1]=x;
         }
}
void scena(tbook a, int n)
{
   double var=0,s=0;
   for(int i=0;i<n;i++)
      var=var+a.cena;
   s=var/n;
   cout<<"Sredna cena na knigite: "<<s<<endl;
   cout<<"-----------------------------------------------------"<<endl;
}
int n; tbook a;
void main()
{
   
   //do
   //{
      cout<<"Vavedete br. knigi: "; cin>>n;
      cin.ignore();
   //} while(n<3 || n>5000);
   inputall(a,n);
   sortsign(a,n);
   printall(a,n);
   cout<<"!-----------------------------------------------------!"<<endl;
   sortocena(a,n);
   printall(a,n);
   cout<<"!-----------------------------------------------------!"<<endl;
   scena(a,n);
}

Ти питаше за strtok-a:

void print(book a)
{
   cout<<"-----------------------------------------------------"<<endl;
   cout<<a.sign<<" "<<a.zaglavie<<" ";
   char *p1,*p2,*p3,ime[81];
   strcpy(ime,a.imeavtor);
   p1=strtok(ime," ");
   p2=strtok(NULL," ");
   p3=strtok(NULL," ");
   cout<<p3<<" "<<p1[0]<<"."<<p2[0]<<" "<<a.cena<<" "<<a.brekz<<" "<<a.ocena<<endl;
}


Активен
"Ама и вие едни въпроси задавате..." - казала базата данни и увиснала.

Светослав Енков

  • Неактивен Неактивен
  • Публикации: 1864
    • Shark's Home Page

Условие Г) може да се направи по следният начин, да се сортира първо по автори, после по цена (2 критерия).
Преди това, защото го има в условието, се намира и извежда средната цена на книгите.

След това се върти външен цикъл по всички сортирани по горния начин книги. При намиране на книга с цена >= на средната, се пуска втори цикъл от текущият елемент напред, докато авторът е същият и цената е >= средната и се броят намерените такива. И ако се достигне до бройка 3 книги с такова условие, се извежда този автор. Тънкостта е в условията за изход от тези цикълчета, за да не се излезе от масива.

Разбира се, има и други възможни начини за решаване на условие Г). Например, да се отметнат в отделен масив отделните автори. Да се броят книгите им с >= средната цена. Но това изисква отделен масив.

Или, ако се съобрази, че автор може да има повече от 1 книга, да се заложи изначално отделен масив с авторите, като в масива с книгите се пази номерът на авторът, а при добавяне на нова книга се проверява има ли го този автор, ако не - се добавя, ако да - не се добавя и тн. И в масива с авторите да има и брояч кой автор колко книги има над средното. Варианти много. Т.е. да си симулираме без да имаме база данни индекси и т.н. благинки.
« Последна редакция: 27.04.2010, 21:10:02 от Светослав Енков »
Активен

Таньо Иванов

  • Модератор
  • *****
  • Неактивен Неактивен
  • Публикации: 81
  • Бъди коректен потребителю!

Благодаря ви много.

По принцип решавах задачите от миналите кандидатстудентски изпити всеки път със стрингове, но сега вече ще използвам чаровете за да мога да използвам и някой други функции, като strtok-a примерно. Благодаря  и за идейте за условие Г), които ми дадохте.
Активен
Блаженството за тялото е здравето, за ума – знанието.

Таньо Иванов

  • Модератор
  • *****
  • Неактивен Неактивен
  • Публикации: 81
  • Бъди коректен потребителю!

Благодаря за помоща ви. Подготвих се добре, явих се на предварителният изпит по информатика и го взех с 6.00. Проблемът ми сега е само да се запиша на 9-ти август  :-)  Ще запиша специалност: Бизнес Информационни Технологий. Въпросът ми е, дали е добра реализацията на завършилите, и какви точно длъжности могат да се заемат? Моля ви помогнете  :wink:
Активен
Блаженството за тялото е здравето, за ума – знанието.

antoniy

  • Управител
  • *
  • Неактивен Неактивен
  • Публикации: 723
    • http://antoniy.net/

Как ще се реализираш си зависи от теб.
Активен
Too short signature limits.

radko87

  • Неактивен Неактивен
  • Публикации: 112
  • Stupid man :D

Аз не бих се записал Бизнес Информационни Технологий, защото е нова специалност и не знам доколко плана е добър. Но това си е мое мнение и не бива да ти влияе, нали казват че съдбата обича смелите.
Иначе  за реализацията ... antony е прав. Само не си мисли, че тази диплома ще ти намери работа.

Активен
Sun Certified Java Programer/OCJP/ - От Sun спомен нема .....

Таньо Иванов

  • Модератор
  • *****
  • Неактивен Неактивен
  • Публикации: 81
  • Бъди коректен потребителю!

На мен специалността ми се вижда доста привлекателна и интересна, но сте прави за това че не може да се разчита само на това, което се изучава. Трябва да се насоча към определена насока и да вървя на там.

Но главният ми въпрос е точно какви Длъжности могат да се заемат с тези неща който се изучават. Мисля че може да се започне като редовен програмист, Бази данни Админ или секретарка  :-D Но не знам какви други длъжности може да се практикуват. Може ли например да се започне нещо като счетоводител, застраховател или банкер? Или за това се изисква да си учил Финанси.
Активен
Блаженството за тялото е здравето, за ума – знанието.

pennev

  • Неактивен Неактивен
  • Публикации: 43
Активен
"Ама и вие едни въпроси задавате..." - казала базата данни и увиснала.

Таньо Иванов

  • Модератор
  • *****
  • Неактивен Неактивен
  • Публикации: 81
  • Бъди коректен потребителю!

Да, кратък и конкретен отговор  :-D :-D Благодаря.
Активен
Блаженството за тялото е здравето, за ума – знанието.

Peps

  • Неактивен Неактивен
  • Публикации: 22

   Счетоводител, застраховател или банкер не мисля, че можеш да станеш, защото там се изисква икономическо образование, а това не е такова.
   Аз лично смятам за по-добър избор специалността информатика, а после магистратура икономика примерно.   :-)  Успех каквото и да решиш  :-)
Активен

Таньо Иванов

  • Модератор
  • *****
  • Неактивен Неактивен
  • Публикации: 81
  • Бъди коректен потребителю!

Благодаря за пожеланието  :wink:  :#1: Иначе след завършване БИТ може ли да се запише такава магистратура? Куде може да се видят ? Благодаря предварително..  :-)
Активен
Блаженството за тялото е здравето, за ума – знанието.

Светослав Енков

  • Неактивен Неактивен
  • Публикации: 1864
    • Shark's Home Page

Всичко можеш! Не го мисли сега.

В сайта на Икономическия факултет (ФИСН).

http://fisn.uni-plovdiv.bg/

Само че нещо не са си направили добре сайта и магистратурите нещо не ги намирам и аз учебните планове за магистратурите, само учебното разписание.

А можеш и магистратура в София или в Свищов икономика.
Активен

Таньо Иванов

  • Модератор
  • *****
  • Неактивен Неактивен
  • Публикации: 81
  • Бъди коректен потребителю!

Така е, има още много време, ще се види с времето.  :-) Благодаря за помоща,. :-)
Активен
Блаженството за тялото е здравето, за ума – знанието.