Премини към съдържанието

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

Никола Стоянов

Помощ за С/С++

Препоръчан отговор


Извинявай но това само прилича на програма, ама на практика си е една каша, как очакваш да работи?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

...

Коментарите ми са вътре.
#include <iostream>#include <math.h>using namespace std;int main(){    int redica[999];    int element=76;    int index;    int i;    int s=0;	int A;    cout<<"vyvedete A = ";    cin>>A;    for(i=0;i<20;i++){        cout<<"redica["<<i<<"]=";        cin>>redica[i];// Тука защо смяташ сумата на редицата?// Вметка: Макар, че може и тука да си сметнеш до кой елемент сумата е по-малка и после да караш както 1 и 2.// Ако искаш може да си го направиш сам така (даже ще се получи и по-добре), но засега карам по първоначалното предложение.        //s += redica[i];	}    i = 0;    // В тази точка условието за край е сума от елементите, не броя им.    //А случайно да се сети да увеличаваш сумата? Увеличавам я предварително, защото може още първия елемент да е >176    // тогава нямаме решение.    s += redica[i];    while ((redica[i] > A) && (s<=176)) {        i++;        s += redica[i];    }    // Условието за липса на решение се променя:    if(с > 176) {        printf("Nqma reshenie");    } else {        index = i;        // Аргументът тука е същия: може следващият елемент да прескочи границата        s += redica[i];        // Вече и тука трябва да е while - защото не знаем кога свършваме.        while(s <= 176){            if((redica[i] <= A) && (redica[i] > redica[index]))                index = i;            i++;            s += redica[i];        }            printf("Reshenieto e v red [%d] = %dn", index+0, redica[index]);    }    system ("pause");    return 0;}

Абе то си работи без това сумиране.

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

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Явно не си разбрал условието.Редицата ще получава възможност да въвежда елементи докато сумата от стойностите на елементите стане по голяма от 176.Тогава цикълът спира и извежда решението.Извинявай,разбрал си го,аз се обърках.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Явно не си разбрал условието.Редицата ще получава възможност да въвежда елементи докато сумата от стойностите на елементите стане по голяма от 176.Тогава цикълът спира и извежда решението.

Тогава, толкова по-добре. Махаш всички модификации спрямо последното работещо. Въвеждаш си елементи с цикъл while.Навсякъде надолу заменяш 76 със променлива в която е броя елементи, който си въвел.

цикълът за въвеждането:

    s = 0;    i = 0;    while (s <= 176) {        cout<<"redica["<<i<<"]=";        cin>>redica[i];        s += redica[i];        i++;    }    element = i;

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

имаш предвид да махна масива ли ? Не можах да разбера какво имаш предвид.

Е, не се ли опитваш малко да помислиш. Коментарите в кода опреди не ги ли чете:
// Вметка: Макар, че може и тука да си сметнеш до кой елемент сумата е по-малка и после да караш както 1 и 2.// Ако искаш може да си го направиш сам така (даже ще се получи и по-добре), но засега карам по първоначалното предложение.
Iмам предвид да махнеш каквито промени си правил спрямо решението за точка 1 и 2. Само заменяш въвеждането на редицата с това което ти постнах най-последно и готово. (и да си съвсем сигурен че числото 76 навсякъде е заменено с element).

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
#include <iostream>#include <math.h>using namespace std;int main(){    int redica[999];    int element=76;    int index;    int i;    int s;	int A;    cout<<"vyvedete A = ";    cin>>A;    for(i=0;i<element;i++){        cout<<"redica["<<i<<"]=";        cin>>redica[i];    }    s = 0;    i = 0;    while (s <= 176) {        cout<<"redica["<<i<<"]=";        cin>>redica[i];        s += redica[i];        i++;    }    element = i;    if(i == element) {        printf("Nqma reshenie");    } else {        index = i;        for(i++; i < element; i++)            if((redica[i] <= A) && (redica[i] > redica[index]))                index = i;        printf("Reshenieto e v red [%d] = %dn", index+0, redica[index]);    }    system ("pause");    return 0;}

Така ли имаш предвид?

#include <iostream>#include <math.h>using namespace std;int main(){    int redica[999];    int element=76;    int index;    int i;    int s;	int A;    cout<<"vyvedete A = ";    cin>>A;     s = 0;    i = 0;    while (s <= 176) {        cout<<"redica["<<i<<"]=";        cin>>redica[i];        s += redica[i];        i++;    }           element = i;    if(i == element) {        printf("Nqma reshenie");    } else {        index = i;        for(i++; i <= element; i++)            if((redica[i] <= A) && (redica[i] > redica[index]))                index = i;        printf("Reshenieto e v red [%d] = %dn", index+0, redica[index]);    }    system ("pause");    return 0;}

Мисля ,че стана само трябва да се доискусури

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Така ли имаш предвид?Мисля ,че стана само трябва да се доискусури

Ще ме умориш...Не нямах предвид това и не е "станало".Аз се отказвам, наистина... Не виждам защо трябва да ти помагам, след като дори не се опитваш да направиш нещо сам. Просто ако беше пуснал това, дето го публикува, само да го видиш дали работи... А то...

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ами аз го пуснах и то спря когато сумата стана повече от 176,но ми излизаше ,че няма решение.Как реши,че не се опитвам да го направя сам.Защо не е така ?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Как реши,че не се опитвам да го направя сам.

Мисля ,че стана само трябва да се доискусури

Ми ей така реших - как пък ще е станало, като пък е съвсем очевидно, че няма да работи. (ако само си погледнеш кода естествено). Тоест реших че тъй като казваш че е станало - не си я пробвал. Сега е по-лошо - сега решавам, че се опитваш да ме накараш да ти пиша целия код.

Върни се и прочети пак какво ти писах тук.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
#include <iostream>#include <math.h>using namespace std;int main(){    int redica[999];    int element=20;    int index;    int i;    int A;    int s;cout<<"vyvedete A = ";    cin>>A;    for(i=0;i<10;i++){        cout<<"redica["<<i<<"]=";        cin>>redica[i];    }    s = 0;    i = 0;    while (s <= 176) {        cout<<"redica["<<i<<"]=";        cin>>redica[i];        s +=redica[i];        i++;    }    element = i;    if(i == 10) {        printf("Nqma reshenie");    } else {        index = i;        for(i++; i < 10; i++)            if((redica[i] <= A) && (redica[i] > redica[index]))                index = i;        printf("Reshenieto e v red [%d] = %dn", index+0, redica[index]);    }    system ("pause");    return 0;}

Ето го така,но не се получава.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Върни се и прочети пак какво ти писах тук.

Друг отговор не ти трябва, няма и да получиш, поне не и от мен. (все пак редактирах една дума).П.П. Това с 10 много ме накефи, честно.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове
#include <iostream>#include <math.h>using namespace std;int main(){    int redica[999];    int element=10;    int index;    int i;    int A;    int s;cout<<"vyvedete A = ";    cin>>A;       s = 0;    i = 0;    while (s <= 176) {        cout<<"redica["<<i<<"]=";        cin>>redica[i];        s = s+redica[i];        i++;    }    element = i;    if(i == element) {        printf("Nqma reshenie");    } else {        index = i;        for(i++; i < element; i++)            if((redica[i] <= A) && (redica[i] > redica[index]))                index = i;        printf("Reshenieto e v red [%d] = %dn", index+0, redica[index]);    }    system ("pause");    return 0;}

Ето вече работи,пуснах го и когато сумата стане повече от 176,спира.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Ето вече работи,пуснах го и когато сумата стане повече от 176,спира.

Да бе...

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Да бе...

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Явно не си разбрал условието.Редицата ще получава възможност да въвежда елементи докато сумата от стойностите на елементите стане по голяма от 176.Тогава цикълът спира и извежда решението.

Извинявай,разбрал си го,аз се обърках.

Ще го докараш  flare до инфаркт. На практика условието е да напишеш 4 (четири) различни програми за всяка подточка:

а/редицата е с 76 елемента; 

б/редицата е с предварително зададен брой елементи; 

в/редицата е с последен елемент 0; 

г/редицата е с елементи,докато сумата им стане по голяма от 176 

 

още вчера  - в пост #3 ти е написал какво трябва да направиш,

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

 

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

 

ето ти за точка г) другите програми си ги напиши сам.

#include <iostream.h>#include <limits.h>using namespace std;int main(){    int i, x, ix, max;    int sum=0;    int A;	    cout<<"vyvedete A = ";    cin>>A;        i = ix = 0;    max = INT_MIN;        do {        i++;        cout<<"redica["<<i<<"]=";        cin>> x;        sum += x;                if ((x>max) && (x <= A)) {              ix = i;             max = x;        }    } while (sum <= 176);        if (ix==0) cout <<"no solutionn";    else cout << "Reshenieto e v red [" << ix <<  "] = " << max << "n";        system ("pause");    return 0;}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Благодаря много ! flare Би ли ми написал сега кода с масива за да видя как е трябвало да стане защото навсякъде го слагах тоя while и така и не можах да го направя.Сега ще се мъча с последната под точка.Надявам се,че ще ме изтърпите още малко  :wub:

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

#include <iostream>#include <limits.h>using namespace std;int main(){    int i, x, ix, max;    int sum=0;    int A;	    cout<<"vyvedete A = ";    cin>>A;        i = ix = 0;    max = INT_MIN;        do {        i++;        cout<<"redica["<<i<<"]=";        cin>> x;        sum += x;                if ((x>max) && (x <= A)) {              ix = i;             max = x;        }    } while (x != 0);        if (ix==0) cout <<"Nqma reshenien";    else cout << "Vie vyvedohte 0!!!Reshenieto e v red [" << ix <<  "] = " << max << "n";    cout<<"Sumata ot chislata koito vyvedohte beshe :"<<sum<<endl;    system ("pause");    return 0;}

Ето да покажа,че все пак нещо мога да направя :) Направих си под точка В) сам.Благодаря много за помоща на flare и ined.Извинявам се за нервите които Ви създадох . Благодаря отново!

Да се определи най-голямото число от редица,което не е по-голямо от дадено число А и поредния номер на първия елемент с такава стойност,ако: 

а/редицата е с 76 елемента; 

б/редицата е с предварително зададен брой елементи; 

в/редицата е с последен елемент 0; 

г/редицата е с елементи,докато сумата им стане по голяма от 176 

Ето и цялостното решение на задачата:

 

#include <iostream>#include <math.h>#include <limits.h>using namespace std;double optionA(){    int redica[999];    int element=76;    int index;    int i;    int A;    cout<<"vyvedete A = ";    cin>>A;    for(i=0;i<76;i++){        cout<<"redica["<<i<<"]=";        cin>>redica[i];    }    i = 0;    while ((i < element) && (redica[i] > A))        i++;    if(i == element) {        printf("Nqma reshenie");    } else {        index = i;        for(i++; i < element; i++)            if((redica[i] <= A) && (redica[i] > redica[index]))                index = i;        printf("Reshenieto e v red [%d] = %dn", index+0, redica[index]);    }    system ("pause");    return 0;}	double optionB(){    	int redica[50];    int element=50;    int index;    int i;    int A;    cout<<"Predvaritelniq broi zadadeni elementi e 50"<<endl;	cout<<"vyvedete A = ";    cin>>A;    for(i=0;i<50;i++){        cout<<"redica["<<i<<"]=";        cin>>redica[i];    }    i = 0;    while ((i < element) && (redica[i] > A))        i++;    if(i == element) {        printf("Nqma reshenie");    } else {        index = i;        for(i++; i < element; i++)            if((redica[i] <= A) && (redica[i] > redica[index]))                index = i;        printf("Reshenieto e v red [%d] = %dn", index+0, redica[index]);    }    system ("pause");    return 0;}double optionV(){    int i, x, ix, max;    int sum=0;    int A;	    cout<<"vyvedete A = ";    cin>>A;        i = ix = 0;    max = INT_MIN;        do {        i++;        cout<<"redica["<<i<<"]=";        cin>> x;        sum += x;                if ((x>max) && (x <= A)) {              ix = i;             max = x;        }    } while (x != 0);        if (ix==0) cout <<"Nqma reshenien";    else cout << "Vie vyvedohte 0!!!Reshenieto e v red [" << ix <<  "] = " << max << "n";    cout<<"Sumata ot chislata koito vyvedohte beshe :"<<sum<<endl;    system ("pause");    return 0;}double optionG(){	int i, x, ix, max;    int sum=0;	int A;	    cout<<"vyvedete A = ";    cin>>A;        i = ix = 0;    max = INT_MIN;        do {        i++;        cout<<"redica["<<i<<"]=";        cin>> x;        sum += x;                if ((x>max) && (x <= A)) {              ix = i;             max = x;        }    } while (sum <= 176);    if (ix==0) cout <<"Nqma reshenie"<<endl;    else 	cout<<"Reshenieto e v red [" << ix <<  "] = " << max <<endl;   cout<<"Sumata ot 176 e nadvishena!!!Sumata ot chislata e : "<<sum<<endl; 	system ("pause");    return 0;}int main(){	char izbor;	cout << "Molq izberete pod tochka ot zadachata:" << endl;	cout << "A) Ako redicata e s 76 elementa" << endl;	cout << "B) Ako redicata e s predvaritelno zadaden broi elementi " << endl;	cout << "V) Ako redicata e s posleden element 0" << endl;	cout << "G) Ako redicata e s elementi,dokato sumata im stane po-golqma ot 176" << endl;		cout << "Ochakvam vashiqt izbor : ";	cin >> izbor;	switch(izbor)	{		case 'a':			optionA();			break;		case 'b':			optionB();			break;		case 'v':			optionV();			break;		case 'g':			optionG();			break;				default:			break;	}	return 0;}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не съм я проверявал, може и да работи, но като код изобщо не ми харесва.

4-те подточки са прекалено еднакви, че може да се мине и без разделяне програмата на функции

и то функции реализирани по толкова различен начин, че даскалицата ви няма как да не заподозре

че не е писана от един човек.

#include <iostream.h>#include <limits.h>using namespace std;int main(){    int i, x, ix, max;    int sum=0;    int A, BR, OP; cout << "Molq izberete pod tochka ot zadachata:" << endl;cout << "1) Ako redicata e s 76 elementa" << endl;cout << "2) Ako redicata e s predvaritelno zadaden broi elementi " << endl;cout << "3) Ako redicata e s posleden element 0" << endl;cout << "4) Ako redicata e s elementi,dokato sumata im stane po-golqma ot 176" << endl;     do {        cout << "Ochakvam vashiqt izbor [1..4]: ";        cin >> OP;    } while ((OP < 1) || (OP > 4));        if (OP == 2) {        cout << "Broi elementi = ";        cin >> BR;    }        if (OP == 1) {        BR = 76;        OP = 2;    }     cout<<"vyvedete A = ";    cin>>A;        i = ix = 0;    max = INT_MIN;        do {        i++;        cout<<"red ["<<i<<"] = ";        cin>> x;        if (OP == 4) sum += x;                if ((x>max) && (x <= A)) {              ix = i;             max = x;        }    } while (((OP == 2) && (i < BR)) ||             ((OP == 3) && (x != 0)) ||             ((OP == 4) && (sum <= 176))) ;                 if (ix==0) cout <<"no solutionn";    else cout << "Reshenieto e v red [" << ix <<  "] = " << max << endl;    system ("pause");    return 0;}

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Не съм я проверявал, може и да работи, но като код изобщо не ми харесва.4-те подточки са прекалено еднакви, че може да се мине и без разделяне програмата на функциии то функции реализирани по толкова различен начин, че даскалицата ви няма как да не заподозрече не е писана от един човек.

Всъщност, ined, ако даскалицата се пише тарикат, ще въведе няколко числа MIN_INT, и останалите по-големи от А и програмата винаги ще връща, че няма решение. Трябва да проверяваш за това или да е, както почнах аз на две части - намираш първото число, което отговаря на условието и после търсиш такива по-големи от него.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

 

Тогава, толкова по-добре. Махаш всички модификации спрямо последното работещо. Въвеждаш си елементи с цикъл while.Навсякъде надолу заменяш 76 със променлива в която е броя елементи, който си въвел.

цикълът за въвеждането:

    s = 0;    i = 0;    while (s <= 176) {        cout<<"redica["<<i<<"]=";        cin>>redica[i];        s += redica[i];        i++;    }    element = i;

flare ще ми дадеш ли това решение ?

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Всъщност, ined, ако даскалицата се пише тарикат, ще въведе няколко числа MIN_INT, и останалите по-големи от А и програмата винаги ще връща, че няма решение. Трябва да проверяваш за това или да е, както почнах аз на две части - намираш първото число, което отговаря на условието и после търсиш такива по-големи от него.

Знам, работи за числа по-големи от INT_MIN,  но само ако даскалицата може да ми цитира по памет колко точно е INT_MIN ще си поправя програмата.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Знам, работи за числа по-големи от INT_MIN,  но само ако даскалицата може да ми цитира по памет колко точно е INT_MIN ще си поправя програмата.

:D Предлагам, Никола да не ѝ го казва така, ако иска да мине предмета.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване