C/C++

Член од
15 јуни 2012
Мислења
56
Поени од реакции
4
Можно ли е од Visual C++ да се направи андроид апликација и да се користи на мобилни така и доколку може како е изводливо?
 
Член од
6 февруари 2013
Мислења
40
Поени од реакции
2
Дали може некој да ми каже кај ми е грешката?
Код:
#include<stdio.h>
#define MAX 10
int main ()
{
    int a[MAX][MAX],i,j,m,n,suma,max_suma,min_suma,novo_j,novo_j1,pom;
    printf("Vnesi go brojot na redici na matricata:\n");
    scanf("%d",&m);
    printf("Vnesi go brojot na koloni na matricata:\n");
    scanf("%d",&n);
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            printf("a[%d][%d]=",i,j);
            scanf("%d",&a[i][j]);
        }
    }
    for(j=0;j<n;j++)
    {
        suma=0;
        for(i=0;i<m;i++)
        {
            suma+=a[i][j];
        }
        if(j==0)
        {
            min_suma=suma;
            max_suma=suma;
            novo_j=j;
            novo_j1=j;
        }
        if(suma>max_suma)
        {
            max_suma=suma;
            novo_j=j;
        }
        if(suma<min_suma)
        {
            min_suma=suma;
            novo_j1=j;
        }
    }
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            pom=a[i][novo_j1];
            a[i][novo_j1]=a[i][novo_j];
            a[i][novo_j]=pom;
        }
    }
    for(i=0;i<m;i++)
    {
        printf("\n");
        for(j=0;j<n;j++)
        {
            printf("%d\t",a[i][j]);
        }
    }
    return 0;
}
Текстот на задачата е :

Да се состави програма која ќе им ги промени местата на колоната со минимална сума на елементи и колоната со максимална сума на елементи во дадена целобројна матрица.Елементите на почетната матрица се внесуваат од тастатура, а елементите на променетата матрица да се испечатат на екран.Максималните димензии на матрицата се 10×10.
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
Дали може некој да ми каже кај ми е грешката?
Задачата ти е супер решена, наоѓањето на колоните ти точно, но грешката ти е во префрлувањето. Овој дел од кодот.
Код:
for(i=0;i<m;i++)
{
    for(j=0;j<n;j++)
    {
        pom=a[i][novo_j1];
        a[i][novo_j1]=a[i][novo_j];
        a[i][novo_j]=pom;
        }
}
Тука треба, за веќе најдените две колони да им ги замениш елементите. Прв со прв.... до н-ти елемент од едната со н-ти од другата колона. Тоа го правиш со еден for циклус.
Ако истата постапка ја повториш уште еднаш, секој елемент ќе го вратиш на истото место. А ти во случајов го повторуваш ова m пати, а m ти е бројот на редици, фактички задачата нема да ти работи за матрици што имаат парен број редици, а за со непарен ќе работи :icon_lol:. А за да работи како по условот треба да го тргнеш првиот циклус и тогаш е ок. Кодот горе го заменуваш со
Код:
for(j=0;j<n;j++)
{
    pom=a[i][novo_j1];
    a[i][novo_j1]=a[i][novo_j];
    a[i][novo_j]=pom;
}
 

Емкаа

the worst thing about prison was the dementors.
Член од
14 мај 2008
Мислења
4.980
Поени од реакции
12.532
Задачата ти е супер решена, наоѓањето на колоните ти точно, но грешката ти е во префрлувањето. Овој дел од кодот.
Код:
for(i=0;i<m;i++)
{
    for(j=0;j<n;j++)
    {
        pom=a[i][novo_j1];
        a[i][novo_j1]=a[i][novo_j];
        a[i][novo_j]=pom;
        }
}
Тука треба, за веќе најдените две колони да им ги замениш елементите. Прв со прв.... до н-ти елемент од едната со н-ти од другата колона. Тоа го правиш со еден for циклус.
Ако истата постапка ја повториш уште еднаш, секој елемент ќе го вратиш на истото место. А ти во случајов го повторуваш ова m пати, а m ти е бројот на редици, фактички задачата нема да ти работи за матрици што имаат парен број редици, а за со непарен ќе работи :icon_lol:. А за да работи како по условот треба да го тргнеш првиот циклус и тогаш е ок. Кодот горе го заменуваш со
Код:
for(j=0;j<n;j++)
{
    pom=a[i][novo_j1];
    a[i][novo_j1]=a[i][novo_j];
    a[i][novo_j]=pom;
}
Истава задача ја решавам и јас, ама на крај ми го менува бројот на редици со бројот на колони. Ако внесам квадратна матрица работи ок. Незнам дали е до CodeBloks, пошо во тој компајлер работам...Ај некој нека проба во друг компајлер, пошо логиката е таа на задачата :D
 
M

Mr.InF3ction

Гостин
Емкаа

Чисто информативно CodeBlocks не е комапјлер туку IDE т.е развојна околина каде што има комајлер, дебагер, текст едитор и еден куп чуда..

Инаку симни ја најновата верзија на CodeBlocks за секој случај и при креирање на проект одбери GNU GCC компајлер и тоа е..секаде е исто :)
 

Емкаа

the worst thing about prison was the dementors.
Член од
14 мај 2008
Мислења
4.980
Поени од реакции
12.532
^^ Фала :) .
Ама програмата пак не работи,т.е го менува бројот на редици со бројот на колони, а не колоната со мах сума со колоната со мин сума.

А овај дел

Код:
for(j=0;j<n;j++)
{
    pom=a[i][novo_j1];
    a[i][novo_j1]=a[i][novo_j];
    a[i][novo_j]=pom;
}
ти е грешен,novo_j1 и novo_j добиле вредност во претходниот циклус, i е тоа кое треба да се менува.
Ја решавав пред две недели задачава како елена што ја решила само со една разлика кај циклусот за промена, немав 2 циклуси еден со i еден со j, туку само еден со i и испаѓаше точно. Вчера седнав исто ја решив ми дава грешен резултат.
 
Член од
10 јули 2012
Мислења
87
Поени од реакции
54
ти е грешен,novo_j1 и novo_j добиле вредност во претходниот циклус, i е тоа кое треба да се менува..
Кога те цитирав со copy-paste го префрлав кодот, и место внатрешниот сум го избришал надворешниот циклус. Ненамерна грешка. Очигледно е дека циклусот е за i и програмата си лета. :) Незнам што се мачиш толку, задачата си работи супер сега ја пробав. Колони со колони менува
 

Емкаа

the worst thing about prison was the dementors.
Член од
14 мај 2008
Мислења
4.980
Поени од реакции
12.532
Имам една функција за определување на должината на низа од знаци со помош на покажувачи, еве ја
Код:
int dolzina(char *s,int i)
{
    char *p=s;
      while(*p!='\0')
            p++;
            return ((p-s)==i)? i:0;
}
Делот со return не ми е јасен, знам дека ја враќа должината на текстот, ама има некаков поинаков начин на негово запишување?
 
M

Mr.InF3ction

Гостин
Емкаа


Оваа функција поточно потврдува дали некоја низа е со должина "i" па ако е така ја враќа таа должина ако не враќа 0.
Иначе кај делот со return најверојатно не ти е јасен p-s ( пошто нели покажувачи ) ..епа тоа е аритмерички операции со покажувачи, пр лупам низата се наоѓа во меморија на адреса 502 и p покажува на таа иста меморија ( p=s )...и сеа кога ќе се изврши p++ во позадина се извршува p = p + 1; ( тоа + 1 е бидејќи char = 1 byte во меморија, ако беше int тогаш +2 или +4, float +4, double + 8 места затоа што следниот податок се наоѓа толку бајти подоле ) значи p ќе има адреса 503..и сега ќе провери дали 503 адресата во меморија означува крај на низа ("\0") ако не иди на следиот и така ќе иде до некаде...и да речеме после 8 извршувања на циклусот ќе дојде до 510 и тоа е крај на низата. и сеа покажувачот s покажува на 502 ( почетокот на низата ) и p покажува на крајот на низата т.е 510...и тоа 510-502 ќе ја врати должината на низата и тоа ќе се провери дали е еднакво со i, ако е ќе врати тоа.. ако не ќе врати 0...
 

Емкаа

the worst thing about prison was the dementors.
Член од
14 мај 2008
Мислења
4.980
Поени од реакции
12.532
Да се напише програма која ќе определи и испише на екран дали збирот на парните елементи под главната дијагонала е еднаков со збирот на непарните елементи над споредната дијагонала кои се наоѓаат во една квадратна матрица.

Еве го кодот, ама кај елементите над споредната не ми дава точен резултат, пробав и во два посебни циклуси пак не испаѓа.
Код:
#include<stdio.h>
int main ()
{
    int a[100][100],i,j,n,zbirP=0,zbirN=0;
    printf("Vnesete ja goleminata na matricata\n");
    scanf("%d",&n);
    printf("Vnesete gi elementite na matricata\n");
    for(i=0;i<n;i++)
    for(j=0;j<n;j++)
    scanf("%d",&a[i][j]);
 
    for(i=0;i<n;i++)
    for(j=0;j<n;j++)
    {
        if(i>j)
        {
            if(a[i][j]%2==0)
           
                zbirP+=a[i][j];
                }
        else if(i<(n-j-1))
        {
            if(a[i][j]%2!=0)
           
                zbirN+=a[i][j];
                }
        }
        printf("Parni zbir %d\n",zbirP);
        printf("Neparni zbir %d\n",zbirN);
 
return 0;
          }
 
M

Mr.InF3ction

Гостин
Емкаа

PHP:
            if(j<i && a[i][j]%2==0)
            {
                  zbirP+=a[i][j];
            }
            else if(i < n-j-1 && a[i][j]%2==1)
            {
                    zbirN+=a[i][j];
            }
Условите напиши ги вака пошто во начинот како што си пишала ти не ги вклучува тие елементи што се заеднички под главна дијагонала и над споредна..и затоа не ти дава точен резултат.
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
Емкаа исто така можиш и да го избишиш во твојот код само тоа else па да остане само if . мислам дека така ке работи пак ако што треба.
Друго решение би било од почеток да ги поделиш на парни или непарни броеви па ако е парен ке ставиш услов за под главна дијагонала , ако е непарен ке ставиш услов за над споредна дијагонала.
 

Емкаа

the worst thing about prison was the dementors.
Член од
14 мај 2008
Мислења
4.980
Поени од реакции
12.532
Ај пак јас :D
Дали може во една рекурзивна функција да се најде обратен број на даден број или мора уште една функција за формирање на број?
 
Член од
20 јуни 2012
Мислења
147
Поени од реакции
40
Ај пак јас :D
Дали може во една рекурзивна функција да се најде обратен број на даден број или мора уште една функција за формирање на број?
Moze so edna funcija. Ovoj kod ti treba ?

PHP:
int rek (int n,int p)  // p=0 vo main funkcijata
{
   
    if (n==0) return p;
   
    return rek(n/10,p*10 + (n%10) )
 
}
 

Kajgana Shop

На врв Bottom