C/C++

Член од
26 јануари 2007
Мислења
823
Поени од реакции
832
Чим со по будизмов да те просветлам.
(Ако не знаеш за покажувачи време е да научиш.)
Прво и прво големина на низа не може да смениш. Низа има фиксна должина и не може да ја наголемиш ниту пак намалиш. То твојов случај алоцираш низа од 100 броеви на стак. Или пак 400 бајта. Во тие позиции во низата во кој што нема да ставиш број што си го прочитал ќе имаш џанк вредност.

Второ ако сакаш програмата да е поекономична прво читај ја променливата golemina па потоа динамички алоцирај меморија. (Што корист да алоцираш меморија за 100 броеви ако ти се потребни само 3. Или пак ако имаш 500 тогаш во твојов случај ќе имаш Segmentation Fault)

Трето програмата е неефикасна. О(N^3) алгоритам за отстранување дупликати е катастрофа. Сортирајја низата прво. Бидејќи ако имаш елемент x и ако има дупликат тогаш ако x има индекс i дупликатите ќе имаат индекси i + 1, i + 2 .... i + N.

Со тоа добибаш О(N logN) алгоритам.
Доле е кодот знам дека вака ти ги сечам нозете но еве ти пример за како тоа се пишува во Ц без memmory leaks.
PHP:
#include<stdio.h>
#include <stdlib.h>
#include <assert.h>
int compare (const void * a, const void * b) // Ova e funkcija za qsort sto e definirana vo stdlib.
{
    return ( *(int*)a - *(int*)b );
}
int main()
{
    int golemina,i;
    printf("Vnesi golemina\n");
    scanf("%d", &golemina);
    int* niza = (int *)malloc(sizeof(int) * golemina);
    int* bez_duplikati = (int *)malloc(sizeof(int) * golemina);
    assert(niza != NULL); //Alokacija upsesna. Vo slucaj da e neuspesna dobivas ERROR i avtomatski se stopira programata.
    assert(bez_duplikati != NULL);
    printf("Vnesete gi elementite na nizata:\n");
    for(i = 0; i < golemina; i++)
        scanf("%d", &niza[i]);
    qsort (niza, golemina, sizeof(int), compare);
    int len = 0; //len ne e golemina na niza tuku e postavena dolna granica za da ne printame dzank vrednosti.
    bez_duplikati[len] = niza[0];
    len++;
    for(i = 1; i < golemina; i++) //Logikata za ova e vo postot.
        if(niza[i - 1] != niza[i])
        {
            bez_duplikati[len] = niza[i];
            len++;
        }
    for(i = 0; i < len; i++)
        printf("%d ",bez_duplikati[i]);
    free(bez_duplikati); //Ne sakas memmory leak, neli?
    free(niza);
    return 0;
}
Четврто, ставај празни место во кодот да го ебам. Некој треба да ти го чита кодот некој ден а не се збиено да е.
Толку од мене.
Easy Lion....,!!! zadacata se resava O( n )
 

DarkoG

Better then ever before.
Член од
19 август 2008
Мислења
701
Поени од реакции
81
for(i = 0; i < 3; i++); scanf 1
for(j = 1; j < 3; j++); scanf 2
for(i = 0; i < 3; i++); .......
for(j = 2; j < 3; j++); scanf 3

for(i = 1; i < 3; i++); scanf 4
for(j = 1; j < 3; j++); scanf 5
for(i = 1; i < 3; i++); .......
for(j = 2; j < 3; j++); scanf 6

for(i = 2; i < 3; i++); scanf 7
for(j = 1; j < 3; j++); scanf 8
for(i = 2; i < 3; i++); .......
for(j = 2; j < 3; j++); scanf 9

дали на овој начин работат форовите за вчитување на една квадратна матрица 3x3

1 2 3
4 5 6
7 8 9
 
Член од
16 април 2012
Мислења
333
Поени од реакции
217
for(i = 0; i < 3; i++); scanf 1
for(j = 1; j < 3; j++); scanf 2
for(i = 0; i < 3; i++); .......
for(j = 2; j < 3; j++); scanf 3

for(i = 1; i < 3; i++); scanf 4
for(j = 1; j < 3; j++); scanf 5
for(i = 1; i < 3; i++); .......
for(j = 2; j < 3; j++); scanf 6

for(i = 2; i < 3; i++); scanf 7
for(j = 1; j < 3; j++); scanf 8
for(i = 2; i < 3; i++); .......
for(j = 2; j < 3; j++); scanf 9

дали на овој начин работат форовите за вчитување на една квадратна матрица 3x3

1 2 3
4 5 6
7 8 9
j почнува од j=0, иначе да.
 
M

Mr.InF3ction

Гостин
Кога нешто не ти е јасно како и во кој редослед се извршува стави да печати некоја состојба од типот i = %d, j = %d , почеток на функција, крај на функција итн..после ќе научиш да користиш debugger и така..
 

DarkoG

Better then ever before.
Член од
19 август 2008
Мислења
701
Поени од реакции
81
Кога нешто не ти е јасно како и во кој редослед се извршува стави да печати некоја состојба од типот i = %d, j = %d , почеток на функција, крај на функција итн..после ќе научиш да користиш debugger и така..
е ова не сум го знаел, сега може полесно да се ориентирам. Фала бро
 
Член од
15 јануари 2014
Мислења
6
Поени од реакции
0
Да се внесе преку тастатура големината на низа n, елементите на низата од цели броеви a0, a1, …, an-1 (n1)и цел број x. Да се напише програма, која наоѓа колку пати x се содржи во низата. Излезот да биде од облик:

Бројот x во низата a0, a1, …, an-1 се содржи broj пати.
 

Amaterasu

123123113
Член од
17 април 2012
Мислења
1.139
Поени од реакции
1.078
Да се внесе преку тастатура големината на низа n, елементите на низата од цели броеви a0, a1, …, an-1 (n1)и цел број x. Да се напише програма, која наоѓа колку пати x се содржи во низата. Излезот да биде од облик:

Бројот x во низата a0, a1, …, an-1 се содржи broj пати.
Дефинирај низа, наполни ја низата, потоа измини ја низата и постави еден бројач кој ќе брои колку пати се појавил дадениот број...
 

HeRbEs

-WandereR-
Член од
21 јуни 2005
Мислења
766
Поени од реакции
272
Да се внесе преку тастатура големината на низа n, елементите на низата од цели броеви a0, a1, …, an-1 (n1)и цел број x. Да се напише програма, која наоѓа колку пати x се содржи во низата. Излезот да биде од облик:

Бројот x во низата a0, a1, …, an-1 се содржи broj пати.
Код:
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  int i,n,x;
    int niza[100];
    int brojac = 0;
    printf("vnesete go brojot na elementi na nizata:\n");
    scanf("%d",&n);
    printf("vnesi go celiot broj x za prebaruvanje:\n");
    scanf("%d",&x);
    for(i=0;i<n;i++)
    {
    printf("Vnesi go elementot %d na nizata:\n",i);
    scanf("%d",&niza[i]);
    if(x == niza[i])
      {
        brojac++;
      }
    }
printf("Brojot x vo nizata se sodrzi %d pati!",brojac);
  system("PAUSE");   
  return 0;
}
 
Член од
15 јануари 2014
Мислења
6
Поени од реакции
0
Дадена е квадратна матрица Aij, чиј елементи се внесуваат преку тастатура. Да се напише програма која ја пресметува сумата и производот на елементите од главната и споредната дијагонала. Програмата треба да провери која сума е поголема и кој производ е поголем.
 
Член од
15 јануари 2014
Мислења
6
Поени од реакции
0
Fala drugar :)
--- надополнето: 16 јануари 2014 во 20:27 ---
Напишете програма за пресметување инверзна матрица од цели броеви. Матрицата се состои од две колони и две редици. Матрицата треба да се испечати по редови.
Напомена: Инверзанта матрица B на дадена матрица A, B=A-1 , се пресметува според формулата:

Untitled.jpg

Ako moze nekoj da ja resi
 

Amaterasu

123123113
Член од
17 април 2012
Мислења
1.139
Поени од реакции
1.078
Blade, би било убаво да ни дадеш некој код, до кај си стигнал, да пробаш самиот да ја решиш. Ако некој овде ти ги реши задачите и ти им мавнеш само copy/paste нема ништо да научиш. Подобро прашај што не ти е јасно во задачите, да се потрудиме тоа да ти го објасниме...
 
Член од
15 јануари 2014
Мислења
6
Поени од реакции
0
Blade, би било убаво да ни дадеш некој код, до кај си стигнал, да пробаш самиот да ја решиш. Ако некој овде ти ги реши задачите и ти им мавнеш само copy/paste нема ништо да научиш. Подобро прашај што не ти е јасно во задачите, да се потрудиме тоа да ти го објасниме...
Слабо го разбирам C++ а посебно за инверзна матрица :/ ако може некој да помогне нека ја реши оти не планирам да се насочувам на програмирање а моментално ми треба таа задача за семинарска.
 
Член од
7 јануари 2008
Мислења
5.366
Поени од реакции
804
Слабо го разбирам C++ а посебно за инверзна матрица :/ ако може некој да помогне нека ја реши оти не планирам да се насочувам на програмирање а моментално ми треба таа задача за семинарска.

А што студираш ??
 

Kajgana Shop

На врв Bottom