C/C++

M

Mr.InF3ction

Гостин
Нареден пат ако постирате :
-Опишете го проблемот јасно
-Користете го "код" тагот
-Пишувајте кирилица
-ОБАВЕЗНО постирајте ваше решение од задачата за тие што сакаат да ви помогнат да ви кажат каде грешите, да поправат нешто а не да куцаат цели задачи за вас ( ако се работи за цела задача ), за некоја функција или некој алгоритам може и само прашање.
-Кога цитирате некој што веќе во мислењето има код не мора да цитирате СЕ туку само тоа што ви треба или избришете го кодот од цитатот.


Постовите што не ги исполнуваат овие услови ќе бидат избришани.
 
Член од
15 октомври 2012
Мислења
2
Поени од реакции
0
Дали ке може некој да ми ја објасни задачава како работи?
За два дена ке имам колоквиум а ваква задача 100% ке има.
Код:
int main () {
char c, prev , maxChar ;
int first = 1;
int max = 0, n = 1;
while (1) {
scanf ("%c", &c);
if (c == ’.’) {
break ;
}
if ( first ) {
first = 0;
} else {
if (c == prev ) {
n ++;
} else {
if (n > max ) {
max = n;
maxChar = prev ;
}n
= 1;
}
}
prev = c;
}
if (n > max) {
max = n;
maxChar = prev ;
}
printf ("%c %d\n", maxChar , max );
return 0;
}
 
T

TheThinker

Гостин
Дечки, треба да напишам програма која ќе ги испише простите делители на одреден број. Значи не прости броеви, туку делители. Ја немам ниту идеја како да почнам, а камо ли да поставам некаков почетен код. Помош?
 
M

Mr.InF3ction

Гостин
Знаеш да напишеш програма што ќе ги печати сите прости броеви од 1 до тој број што ќе го внесеш од тастатура?
 
T

TheThinker

Гостин
Да. Како може да го искомбинирам тоа со простиве делители?
 
M

Mr.InF3ction

Гостин
Епа пред да го печатиш бројот што е прост, ќе провериш дали се дели со тој број, ако се дели печатиш :)
 
Член од
2 август 2009
Мислења
975
Поени од реакции
380
имам задача математички израз во задачата треба да се направи:
5+4*9+6+2*3 првен предност нели има множењето да се помножи и после тоа цело да се собере
треба да се реши со стек
ова е мојот код ама се работи со листи и ми дава грешка у стекПоп.
ај ако има некој што знае ако може некој нека ми помогне оти во аудиториски немам ни пример од кај да видам:mad:
Код:
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>
#define    MEMCHECK(x) if(x==NULL) { printf("Nema memorija!\n"); exit(-1); }
 
typedef int stackElementT;
 
typedef struct stackTag
{
    stackElementT element;
    struct stackTag *next;
} stackNodeT;
 
typedef struct
{
    stackNodeT *top;
} stackT;
 
stackT mnozenje;
 
void Inicijalizacija(stackT *Mag)
{
    (*Mag).top = -1;    //oznaci deka magacinot e prazen
}
void stackInit(stackT *stackPtr)
{
    (*stackPtr).top = NULL;
 
}
void stackDestroy(stackT *stackPtr)
{
    stackNodeT *t;
 
    while ((*stackPtr).top != NULL)
    {
        (*stackPtr).top = (t = (*stackPtr).top)-> next;
        free(t);
    }
}
void stackPush(stackT *stackPtr, stackElementT element1)
{
    stackNodeT *t;
    t = (stackNodeT *) malloc(sizeof(stackNodeT));
    MEMCHECK(t);
    t -> element = element1;
    t -> next = (*stackPtr).top;
    (*stackPtr).top = t;
}
void stackPop(stackT *stackPtr)
{
    stackNodeT *t;
    t = (*stackPtr).top;
    (*stackPtr).top = (*stackPtr).top ->next;
    free(t);
}
stackElementT stackTop(stackT *stackPtr)
{
    return ((*stackPtr).top -> element);
 
}
int stackEmpty(stackT stack)
{
    return (stack.top == NULL);
}
int pretvoranje(char *a)
{
    if(a=='0') return 0;
    if(a=='1') return 1;
    if(a=='2') return 2;
    if(a=='3') return 3;
    if(a=='4') return 4;
    if(a=='5') return 5;
    if(a=='6') return 6;
    if(a=='7') return 7;
    if(a=='8') return 8;
    if(a=='9') return 9;
}
int evaluate_expression(char * expression){
    int  i,j,p,n,brojac=0;
    stackNodeT prv,vtor;
    prv.element=0;
    n=strlen(expression);
    for(i=0;i<n;i++)
    {
        prv.element=0;
        if(isdigit(expression[i]))
        {
            j=i;
            while(isdigit(expression[j]))
            {
                p=pretvoranje(expression[j]);
                prv.element=prv.element*10+p;
                j++;
            }
            i=j;
            stackPush(&mnozenje,prv.element);
            brojac++;
        }
        if(expression[i]=='*')
        {
            j=i+1;
            while(isdigit(expression[j]))
            {
                p=pretvoranje(expression[j]);
                prv.element=prv.element*10+p;
                j++;
            }
            i=j;
            stackPush(&mnozenje,prv.element);
            brojac++;
            stackPop(&mnozenje);
            stackPop(&mnozenje);
            mnozenje.prv.element=prv.element*vtor.element;
            stackPush(&mnozenje,prv.element);
            brojac--;
        }
    }
    for(i=0;i<brojac;i++)
    {
        stackPop(&prv);
        stackPop(&vtor);
        prv.element+=vtor.element;
        stackPush(&mnozenje,prv.element);
    }
    return prv.element;
}
int main()
{
 
    char expression[100];
    scanf("%s",expression);
    printf("%d",evaluate_expression(expression));
    return 0;
}
мојата идеја е бројките ги ставам во стек кога ке дојде множенње да се помножи и да се стави пак во стек и после само сите работи што се во стек ги собирам
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
имам задача математички израз во задачата треба да се направи:
5+4*9+6+2*3 првен предност нели има множењето да се помножи и после тоа цело да се собере
треба да се реши со стек
...
мојата идеја е бројките ги ставам во стек кога ке дојде множенње да се помножи и да се стави пак во стек и после само сите работи што се во стек ги собирам
Сигурен си дека не треба прво да се направи во инфиксен или постфиксен запис, па после да се реши, зошто иначе ќе ти требаат барем 2 различи стека, освен ако имаш само собирање и множење. Ако е така начинот што го кажа си е супер.
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
имам само собирање и множење
Напишано е по твојата идеја. Ги ставаш сите бројки во стек, кога ќе дојдеш до знак множење, вадиш една бројка од стекот и ја множиш со наредната после знакот за множење, и ја враќаш во стекот. Останува само да се најде сума на елементите во стекот. Но ќе работи само со точно напишани изрази и едноцифрени бројки.

Незнам што си се мачел толку за фукнцијата претварање:
Код:
int pretvoranje(char a)
{
    return a - '0';
}
Имаш некој мали грешки во кодот, ќе треба да си ги поправиш. Иначе се што ти треба ти е функцијата за пресметување.

Код:
int eval(char* exp)
{
    int res = 0;
    stackT *S = (stackT*)malloc(sizeof(stackT));
    stackInit(S);
 
    while(*exp != '\0')
    {
        if(isdigit(*exp))
        {
            stackPush(S, pretvoranje(*exp));
 
        }
        else if(*exp == '*' && *(exp + 1) != '\0')
        {
            int temp = stackTop(S);
            stackPop(S);
            temp *= pretvoranje(*(++exp));
            push(S, temp);
        }
        exp++;
    }
 
    while(!stackEmpty(S))
    {
        res += stackTop(S);
        stackPop(S);
    }
   
    return res;
}
 
int main()
{
    char *e = "2+4*9+6+2*3";
    int t = eval(e);
    printf("%d\n", t);
}
 
Член од
2 август 2009
Мислења
975
Поени од реакции
380
^фала мн се утепав од дебагирање и никако не ја управив задачава.сега е океу
 
Член од
15 јуни 2012
Мислења
56
Поени од реакции
4
Ми треба помош во Вижуал Ц++ ...
Проблемот е во тоа што кога го пишувам кодот не ми дава (како да кажам предлози), туку така само насуво го пишувам (нз дали ме сваќате
пр.
пишуваш 'W' и под тоа ти дава 'WindowState.. ова она')
да не има некоја опција која што ми е одштиклирана или што е проблемот??
 

Xibalba

Corona Australis
Член од
24 јануари 2012
Мислења
6.092
Поени од реакции
11.497
Ми треба помош во Вижуал Ц++ ...
Проблемот е во тоа што кога го пишувам кодот не ми дава (како да кажам предлози), туку така само насуво го пишувам (нз дали ме сваќате
пр.
пишуваш 'W' и под тоа ти дава 'WindowState.. ова она')
да не има некоја опција која што ми е одштиклирана или што е проблемот??
Тебе ти фали Intellisense. Кажи која развојна околина ја користиш?
 

Boomerang

Немој CTRL+W.
Член од
18 јуни 2006
Мислења
3.709
Поени од реакции
809
1. Да се напише програма која за даден бинарен број ќе пресмета бит за парна парност. Бинарниот број се внесува од тастатура (како цел број). Битот за парна парност се пресметува така што доколку бинарниот број има непарен број единици, на крајот се додава 1. Доколку пак бинарниот број има парен број единици, тогаш на крајот од бројот се додава 0. Новоформираниот број да се испечати на екран. Проверката за бројот на единици во бројот да се прави со помош на рекурзивна функција.

Пример: 1101 = 11011
1001 = 10010

Код:
#include <stdio.h>
#include <stdlib.h>
 
int brojnaedinici(int n)
{
    if(n==0)
    return 0;
    else if(n==1)
    return 1;
    else
    return brojnaedinici(n%10) + brojnaedinici(n/10);
}
 
int main()
{
    int binaren;
    printf("Vnesi go binarniot broj:\n");
    scanf("%d", &binaren);
    printf("Binarniot broj %d ima %d edinici\n", binaren, brojnaedinici(binaren));
    system("PAUSE");
    return 0;
}
Не знам како да го направам додавањето на крајот од бројот. Помош :)?
 

Kajgana Shop

На врв Bottom