Автор Тема: C++ задача  (Прочетена 7802 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

aliench0

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 42
C++ задача
« -: 30 Декември 2011, 13:58:58 »
Здравейте, уча C++ от две години и не съм на кой знае какво ниво. Сега съм се хванал да решавам задачки и затова в идните дни може малко да ви по тормозя ::) Пиша задачите на Borland C++, защото на олимпиадата която щя ходя(не се смейте много  :-\), това ще е компилатора  (Ще се радвам да ми препоръчате и някой за вкъщи, който прилича на компилатор от 21-ви век, досега не съм попадал на такъв). Та ето задачата която ми дава грешка и не мога да разбера защо... ???

Зад.1) Да се напише програма, която въвежда от клавиатурата цяло число 5<=n<=50 и масив от цели числа а012...,аn-1. Да се  провери дали в масива има поне два последователни елемента равни на нула.
Примерен вход: 5                                             Примерен изход: Yes
                           3 -27 16 0 0
Примерен вход: 5                                             Примерен изход: No
                           3 -27 16 0 1
Ето го и моето решение:
Код: C++
  1. #include<iostream.h>
  2. void main(){
  3. int n,mas[49],index[49],br=0;
  4. char b='no';
  5. cin>>n;
  6.   if(n>=5 && n<=50){
  7.  
  8.          for(int i=0;i<n;i++) cin>>mas[i];
  9.          for(i=0;i<n;i++) if(mas[i]==0){index[br]=i;br++;}
  10.          for(i=0;i<br;i++){
  11.                 if(index[i]==index[i+1]) b='yes';
  12.          }
  13.   cout<<b;
  14.   }
  15.   else cout<<"n trqbva da e m/y 5 i 50.";
  16. }

Дава ми грешка на ред 11. "Character constant must be one or two characters long in function main()", и не разбирам защо...

Drakonov

  • Гост
Re: C++ задача
« Отговор #1 -: 30 Декември 2011, 14:06:50 »
Имаш грешка и то много сериозна! В един байт не можеш да запишеш повече от един символ!
char b='no';и тук
b='yes';
и за стрингове използвай двойни кавички “
« Последна редакция: 30 Декември 2011, 14:09:21 от Kalessin »

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: C++ задача
« Отговор #2 -: 30 Декември 2011, 14:17:03 »
използвай за флаг int и му давай стойност 1 и 0. Накрая сложи един if дето проверява дали стойността на int-а е 1 или 0 и съответно принтира yes/no. Тъпо е да мъкнеш булева стойност като string (дори да знаеше как се прави).

http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express

Edit сега се загледах в решението и то е някво нечовешко. Не мога да преценя на око дали ще работи, но със сигурност е излишно усложнено. Практиката показва, че щом е излишно усложнено няма да работи. Като пишеш if или for слагай тялото на долния ред. Аз лично предпочитам винаги да слагам скобите, но това е въпрос на вкус. Това обаче е грозно според всякакъв вкус:
for(i=0;i<n;i++) if(mas[i]==0){index[br]=i;br++;}
Помисли как може да направиш решението само с 1 цикъл (тоя за въвеждане на елементите не се брои)
« Последна редакция: 30 Декември 2011, 14:24:57 от Stilgar »

aliench0

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 42
Re: C++ задача
« Отговор #3 -: 30 Декември 2011, 14:26:38 »
Мерси, тръгна.. сега остава само да намеря грешката в логиката ми, защото при първия примерен изход ми изкарва "No". Ще пиша ако не успея... и пак мерси много и на двамата :)

Edit: Направих го само с един цикъл (без тоя за въвеждането).
Код: C++
  1. #include<iostream.h>
  2. void main(){
  3. int n,mas[49],out=0;
  4. cin>>n;
  5.   if(n>=5 && n<=50){
  6.          for(int i=0;i<n;i++) cin>>mas[i];
  7.          for(i=0;i<n;i++){
  8.            if(mas[i]==0 && mas[i+1]==0){
  9.               out=1;
  10.            }
  11.         }
  12.   if(out==1) cout<<"Yes";
  13.   else cout<<"No";
  14.   }
  15.   else cout<<"n trqbva da e m/y 5 i 50.";
  16. }
И тръгна..мерси :)
« Последна редакция: 30 Декември 2011, 14:46:40 от aliench0 »

Drakonov

  • Гост
Re: C++ задача
« Отговор #4 -: 30 Декември 2011, 15:16:54 »
Мисля че тук
for(i=0;i<n;i++){трябва да е i< n-1 , защото като достигнеш края на масива долу в if-a ще се опиташ да прочетеш n+1 елемента!
Например ако n = 5,  тук
for(i=0;i<n;i++){когато n стане 4, в този if
if(mas[i]==0 && mas[i+1]==0){
ще се опиташ да прочетеш mas[5], а такъв елемет няма.

aliench0

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 42
Re: C++ задача
« Отговор #5 -: 30 Декември 2011, 15:31:45 »
Да, прав си, неправи проблем, но го направих for(i=0;i<=n;i++){ Същото както при n-1 :)

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: C++ задача
« Отговор #6 -: 30 Декември 2011, 15:38:21 »
Освен това mas[49] ти декларира масив с 49 елемента не с 50.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: C++ задача
« Отговор #7 -: 30 Декември 2011, 15:42:08 »
Освен това mas[49] ти декларира масив с 49 елемента не с 50.
Sorry, обърках  ;D
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

Zealar

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 17
  • Публикации: 152
Re: C++ задача
« Отговор #8 -: 30 Декември 2011, 17:04:46 »
Пробвай да вместиш "bool", промени логиката да свалиш циклите до 1 и може би някое друго съобщение да изкарва тази програма няма да е зле. Потребителя все пак трябва да знае какво се изисква от него в даден момент.
« Последна редакция: 30 Декември 2011, 17:54:30 от Zealar »

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: C++ задача
« Отговор #9 -: 30 Декември 2011, 17:24:24 »
Не му пиши код.

Zealar

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 17
  • Публикации: 152
Re: C++ задача
« Отговор #10 -: 30 Декември 2011, 17:53:00 »
Не му пиши код.
Ще се постарая :(

aliench0

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 42
Re: C++ задача
« Отговор #11 -: 30 Декември 2011, 19:34:11 »
Пробвай да вместиш "bool", промени логиката да свалиш циклите до 1 и може би някое друго съобщение да изкарва тази програма няма да е зле. Потребителя все пак трябва да знае какво се изисква от него в даден момент.
Това е просто задача, най-много да се въведе примерния вход, за да провери дали работи, не е предназначена за потребители :)

borovaka

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 1
  • -Получени: 48
  • Публикации: 906
Re: C++ задача
« Отговор #12 -: 31 Декември 2011, 04:57:45 »
Абе я направи проверката при въвеждането и не му мисли изобщо ;)
Сериозно говоря условието не го забранява, така си спестяваш много циклене по масивите.
Та извода е прост: "Колкото по-големи ла*ната - толкова по-малка щетата! ... моралната де, не материалната"

Zealar

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 17
  • Публикации: 152
Re: C++ задача
« Отговор #13 -: 31 Декември 2011, 14:02:17 »
Не че нещо но ако учиш от 2 години C++ а не знаеш основни неща като как да създаваш масиви, как да правиш правилно проверки и как се използват променливите просто не знам на каква олимпиада ще ходиш. Също така се съмнявам че там ще дадат толкова елементарна задача която се пише за 5 мин заедно с проверките. По-добре не ходи да не се излагаш и вземи смени насоката.

Stilgar

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 42
  • Публикации: 1406
    • The Sietch
Re: C++ задача
« Отговор #14 -: 31 Декември 2011, 14:09:47 »
Под "уча 2 години" сигурно има предвид "преподават го по 1 час седмично в училище"