C/C++

  • Креатор на темата Креатор на темата Драган
  • Време на започнување Време на започнување
Можно ли е од Visual C++ да се направи андроид апликација и да се користи на мобилни така и доколку може како е изводливо?
 
Дали може некој да ми каже кај ми е грешката?
Код:
#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.
 
Дали може некој да ми каже кај ми е грешката?
Задачата ти е супер решена, наоѓањето на колоните ти точно, но грешката ти е во префрлувањето. Овој дел од кодот.
Код:
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;
}
 
Задачата ти е супер решена, наоѓањето на колоните ти точно, но грешката ти е во префрлувањето. Овој дел од кодот.
Код:
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
 
Емкаа

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

Инаку симни ја најновата верзија на CodeBlocks за секој случај и при креирање на проект одбери GNU GCC компајлер и тоа е..секаде е исто :)
 
^^ Фала :) .
Ама програмата пак не работи,т.е го менува бројот на редици со бројот на колони, а не колоната со мах сума со колоната со мин сума.

А овај дел

Код:
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 и испаѓаше точно. Вчера седнав исто ја решив ми дава грешен резултат.
 
ти е грешен,novo_j1 и novo_j добиле вредност во претходниот циклус, i е тоа кое треба да се менува..

Кога те цитирав со copy-paste го префрлав кодот, и место внатрешниот сум го избришал надворешниот циклус. Ненамерна грешка. Очигледно е дека циклусот е за i и програмата си лета. :) Незнам што се мачиш толку, задачата си работи супер сега ја пробав. Колони со колони менува
 
Имам една функција за определување на должината на низа од знаци со помош на покажувачи, еве ја
Код:
int dolzina(char *s,int i)
{
    char *p=s;
      while(*p!='\0')
            p++;
            return ((p-s)==i)? i:0;
}

Делот со return не ми е јасен, знам дека ја враќа должината на текстот, ама има некаков поинаков начин на негово запишување?
 
Емкаа


Оваа функција поточно потврдува дали некоја низа е со должина "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...
 
Да се напише програма која ќе определи и испише на екран дали збирот на парните елементи под главната дијагонала е еднаков со збирот на непарните елементи над споредната дијагонала кои се наоѓаат во една квадратна матрица.

Еве го кодот, ама кај елементите над споредната не ми дава точен резултат, пробав и во два посебни циклуси пак не испаѓа.
Код:
#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;
          }
 
Емкаа

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];
            }

Условите напиши ги вака пошто во начинот како што си пишала ти не ги вклучува тие елементи што се заеднички под главна дијагонала и над споредна..и затоа не ти дава точен резултат.
 
Емкаа исто така можиш и да го избишиш во твојот код само тоа else па да остане само if . мислам дека така ке работи пак ако што треба.
Друго решение би било од почеток да ги поделиш на парни или непарни броеви па ако е парен ке ставиш услов за под главна дијагонала , ако е непарен ке ставиш услов за над споредна дијагонала.
 
Ај пак јас :D
Дали може во една рекурзивна функција да се најде обратен број на даден број или мора уште една функција за формирање на број?
 
Ај пак јас :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

Back
На врв Bottom