argon bulletin board

Експертно търсене  

Новини:

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

Автор Тема: задача на C++,HELP MEE  (Прочетена 9440 пъти)

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: задача на C++,HELP MEE
« Отговор #20 -: 14.04.2008, 15:16:32 »

ти си влезнала в ФМИ/ПУ за да завършиш или да научиш нещо ?
ако си влезнала за да завършиш само по добре записвай няква тъпа икономика щото няма да стане така в ФМИ .. кел файда че го завършиш
ако си влезнала да учиш стига пита ами прочети нещо и си я направи сам ДОРИ да ти я ПОКАЖАТ дори да я РАЗБЕРЕШ ще научиш много по малко отколкото ако си я направиш сама ?
нямаш време да учиш ? пак казах недей да учиш тогава или съответно икономика...
не искам да те убидя или нещо такова просто от 120 човека курс който завършихме максиум 30тина работят по специалноста си вече са към 30 тъй като 10тина след като завършиха решиха да учат. Ако държиш да си от онези 90 окей даваи и успех бъди от тях.
Активен

ronaldina

  • Неактивен Неактивен
  • Публикации: 22
Re: задача на C++,HELP MEE
« Отговор #21 -: 14.04.2008, 16:05:04 »

само искам да ти кажа едно нещо..парво ти си нямаш и на идея какво уча,второ ..аз за парви пат хващам С++,и супер малко сме учили и супер малко примери сме взели и щом сам писала в тоя профил...значи има за какво.Предметите които си ги учим си ги изкарвам и сама..Имала сам само 2 дена лекции за С++ от които само един беше за масиви..как мислиш да ги науча..то нали знаеш винаги гледаш чуждата работа,вижда ти се много лесна.И все пак си направих програмката сама,за малкото свободно време,което имам.И мисля,че този форум е за помощ и са съвети и дискусии а не само да се критикуваме!И все пак благодаря за мнението ти.
Активен
""Believe in your dreams, but above all believe in yourself.""

ronaldina

  • Неактивен Неактивен
  • Публикации: 22
Re: задача на C++,HELP MEE
« Отговор #22 -: 14.04.2008, 16:11:26 »

#include<iostream>
using namespace std;
int main()
{
   cout<<"Molq vavedete stoinosti za razmera na masiva M";
   cout<<"a=";
   cin>>a;
   cout<<"b=";
   cin>>b;
   
   if(a!=b)
   {
      cout<<"Error\n";//a=b, za6toto samo kvadratnata matrica ima glaven diagonal
      return 1;
   }
   //deklaracii na nujnite promenlivi: vhoden dvumeren masiv M;   broia4i i j; ednomeren masiv M1, v koito 6te pazim samo elementite
   //pod glavnia diagonal; broqt m na elementite pod/nad glavnia diagonal; promenliva product za proizvedenieto na tezi elementi
   double M[a];
   int i, j;
   int n = a;
   int m = (((a*a)-n)/2);
   double M1[m];
   double sum;
   product=1;
   
   //Vavejdane stoinostite na elementite na masiva
   for(i=0; i<n; i++)
      for(j=0; j<n; j++)
      {
         cout<<"M["<<i<<"]["<<j<<"]=";
         cin>>M[j];
      }
      
    //Formirane na masiva M1, vkliu4va6t samo elementite pod glavnia diagonal.
   //Namirane i otpe4atvane na proizvedenieto ot elementite na masiva M1
   for(int k=0; k<m;)
   {
      for(i=1; i<n; i++)
         for(j=0; j<i; j++)
         {
            M1[k]=M[j];
            product= product*M1[k];
            k++;
         }
   }
   
   //
      
   cout<<"Proizvedenieto ot elementite na masiva M1 e:"<<product<<"\n";
   return 0;
}


това направих с програмката си:)Някой ако има желание може да я прегледа:)
Активен
""Believe in your dreams, but above all believe in yourself.""

antoniy

  • Управител
  • *
  • Неактивен Неактивен
  • Публикации: 723
    • http://antoniy.net/
Re: задача на C++,HELP MEE
« Отговор #23 -: 14.04.2008, 16:24:40 »

Не използваш матрица. Би следвало M да ти е двумерен масив.
M[a][a]
Активен
Too short signature limits.

ronaldina

  • Неактивен Неактивен
  • Публикации: 22
Re: задача на C++,HELP MEE
« Отговор #24 -: 14.04.2008, 16:32:32 »

да пропуснала сам го,мерси :)
Активен
""Believe in your dreams, but above all believe in yourself.""

Георги Фурнаджиев

  • Гост
Re: задача на C++,HELP MEE
« Отговор #25 -: 14.04.2008, 17:04:55 »

Жоре, ти изби рибата! Пак добре не й я даде на Паскал или по-добре на Фортран или PL/1!
Бе замислих се  ... и да не ми обиждаш Паскала ей!!! :-)

тази програма,която ми е написал Жоро,вярна ли е? :?

Просто изразът *(*(m+i)+j) всъщност значи m[i][j]Може би колегата Фурнаджиев е искал да те позплаши. ;)
В никакъв случай :-) Първо - с учебна цел ... и се получи :wink: Второ - на времето доц. Сандалски на лекция по ООП каза нещо в смисъл, че възпитаник на Пловдивския университет като използва масиви, трябва да го прави с указатели. Уплаших се да не ме порази гръм :-)
Активен

Светослав Енков

  • Неактивен Неактивен
  • Публикации: 1864
    • Shark's Home Page
Re: задача на C++,HELP MEE
« Отговор #26 -: 14.04.2008, 17:37:20 »

Споко, Жоре, работя предимно на Делфи и си обичкам Паскала!

Доц. Сандалски rulezzz! И на мен ми е водел С, че тогава нямаше много С++ все още (1988г.) в ПУ.
Активен

Георги Фурнаджиев

  • Гост
Re: задача на C++,HELP MEE
« Отговор #27 -: 14.04.2008, 18:00:01 »

...
това направих с програмката си:)Някой ако има желание може да я прегледа:)
Компилаторът ти какво мисли по въпроса? gcc 4.2.3 (gcc -x c++ -O2 zadacha.cpp) ми изплюва:

zadacha.cpp: In function ‘int main()’:
zadacha.cpp:7: error: ‘a’ was not declared in this scope
zadacha.cpp:9: error: ‘b’ was not declared in this scope
zadacha.cpp:24: error: ‘product’ was not declared in this scope
zadacha.cpp:31: error: ‘M’ was not declared in this scope
zadacha.cpp:41: error: ‘M’ was not declared in this scope


А, сега се сетих да питам - a и b потребителят ли ги задава?
Активен

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: задача на C++,HELP MEE
« Отговор #28 -: 14.04.2008, 19:30:08 »

само искам да ти кажа едно нещо..парво ти си нямаш и на идея какво уча,второ ..аз за парви пат хващам С++,и супер малко сме учили и супер малко примери сме взели и щом сам писала в тоя профил...значи има за какво.Предметите които си ги учим си ги изкарвам и сама..Имала сам само 2 дена лекции за С++ от които само един беше за масиви..как мислиш да ги науча..то нали знаеш винаги гледаш чуждата работа,вижда ти се много лесна.И все пак си направих програмката сама,за малкото свободно време,което имам.И мисля,че този форум е за помощ и са съвети и дискусии а не само да се критикуваме!И все пак благодаря за мнението ти.
Чудестно и щом не си ти виновна значи не са те научили на нищо, щом ти изискват да направиш нещо за което не са ти дали знания и  ти смяташ че не би се справила е нормално да питаш Така ли да стане или как да стане еди какво си, а не как да стане цялата задача... Колкото до какво учиш няма значение какво учиш нали учиш Ц++? Това има значенеи струва ми се и предполагам искаш да го научиш ? Смятам че съм казал достатачно точно в тази насока.
Активен

ronaldina

  • Неактивен Неактивен
  • Публикации: 22
Re: задача на C++,HELP MEE
« Отговор #29 -: 14.04.2008, 22:25:54 »

#include <iostream>

using namespace std;

int main()
{
    int a;
    cout << "Molq vavedete razmer na masiva M" << endl;
    cout << "a = ";
    cin >> a;

    // deklaracii na nujnite promenlivi:

    double M[a][a]; // vhoden dwumeren masiv
    int i, j; // broia4i
    int m = (a * (a - 1)) / 2; // razmer na ednomeren masiv
    double M1[m]; // ednomeren masiv
    double product = 1; // proizvedenie na elementite pod glavnia diagonal

    // Vavejdane stoinostite na elementite na masiva
    for (i = 0; i < a; i++)
    {
        for (j = 0; j < a; j++)
        {
            cout << "M[" << i << "][" << j << "] = ";
            cin >> M[j];
        }
    }

    // Formirane na masiva M1, vkliu4va6t samo elementite pod glavnia diagonal.
    // Namirane i otpe4atvane na proizvedenieto ot elementite na masiva M1
    int k = 0;
    for (i = 0; i < a; i++)
    {
        for (j = 0; j < i; j++)
        {
            M1[k] = M[j];
            product = product*M1[k];
            k++;
        }
    }

    cout << "Proizvedenieto ot elementite na masiva M1 e " << product << endl;

    return 0;
}



или може би така е по-добре ? :)
Активен
""Believe in your dreams, but above all believe in yourself.""

Георги Фурнаджиев

  • Гост
Re: задача на C++,HELP MEE
« Отговор #30 -: 15.04.2008, 04:44:01 »

Става и само с един двоен цикъл. Като въвеждаш елементите на матрицата проверявай къде са и ако са под диагонала - действай.

ПП: Аз все пак питам две неща. Първо - компилираш ли изобщо? Второ - размера на матрицата предварително зададен ли е или потребителят го въвежда?
Активен

Ники Вълчанов

  • Неактивен Неактивен
  • Публикации: 526
  • History is written by the victors
Re: задача на C++,HELP MEE
« Отговор #31 -: 15.04.2008, 09:43:09 »

Простете некомпетенцията ми ... но

double M[a][a] ... при декларация на масиви в C++ по този начин размерността не трябва ли да е задължително константа. Т.е.

int a = 10;
double M[a][a];
би трябвало да даде грешка, че "а" не е константа!

Не ме наливайте много, защото го карам на спомен, а и не съм си сложил C++ компилатор, че да тест-на ;)

Поздрави
           Ники
Активен
"Now everything is reflection
as I make my way though this labyrinth.
And my sence of direction
is lost like the sound of my steps!!!"
                                                     Elisa - Labyrinth

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: задача на C++,HELP MEE
« Отговор #32 -: 15.04.2008, 09:55:15 »

том 2ри мисля на книгите за C++ на Биоурн Строуструп съжелявам ако не се пише така там е обяснено как се използва стандартния тип матрица който си го има в C++. Та ако щете после ги и умножавайте матриците  ;)
Активен

ronaldina

  • Неактивен Неактивен
  • Публикации: 22
Re: задача на C++,HELP MEE
« Отговор #33 -: 15.04.2008, 23:13:46 »

Дава ми грешки да ...ама нямах време да ги оправа:)ето на тази програма:

#include "stdafx.h"

#include <iostream>

using namespace std;

int main()
{
    int a;int b;
    cout << "Molq vavedete razmer na masiva M" << endl;
    cout << "a = ";
    cin >> a;

   
    double M[a];
    int i, j;
    int m = (a * (a - 1)) / 2;
    double M1[m];
    double product = 1 ;

   
    for (i = 0; i < a; i++)
    {
        for (j = 0; j < a; j++)
        {
            cout << "M[" << i << "][" << j << "] = ";
            cin >> M[j];
        }
    }

   
    int k = 0;
    for (i = 0; i < a; i++)
    {
        for (j = 0; j < i; j++)
        {
            M1[k] = M[j];
            product = product*M1[k];
            k++;
        }
    }

    cout << "Proizvedenieto ot elementite na masiva M1 e " << product << endl;

    return 0;
}


.\maria.cpp(17) : error C2057: expected constant expression
.\maria.cpp(17) : error C2466: cannot allocate an array of constant size 0
.\maria.cpp(17) : error C2057: expected constant expression
.\maria.cpp(17) : error C2466: cannot allocate an array of constant size 0
.\maria.cpp(17) : error C2087: 'M' : missing subscript
.\maria.cpp(17) : error C2133: 'M' : unknown size
.\maria.cpp(20) : error C2057: expected constant expression
.\maria.cpp(20) : error C2466: cannot allocate an array of constant size 0
.\maria.cpp(20) : error C2133: 'M1' : unknown size

ми дава тези грешки ???
Активен
""Believe in your dreams, but above all believe in yourself.""

Ники Вълчанов

  • Неактивен Неактивен
  • Публикации: 526
  • History is written by the victors
Re: задача на C++,HELP MEE
« Отговор #34 -: 16.04.2008, 07:59:38 »

Аз за двете грешки да кажа пак ...
с риск да се повторя:

Простете некомпетенцията ми ... но

double M[a][a] ... при декларация на масиви в C++ по този начин размерността не трябва ли да е задължително константа. Т.е.

int a = 10;
double M[a][a];
би трябвало да даде грешка, че "а" не е константа!

Не ме наливайте много, защото го карам на спомен, а и не съм си сложил C++ компилатор, че да тест-на ;)

Поздрави
           Ники

Или използвай фиксирани размери за матриците
Пр:
double M1[1024]

след което си пълни колкото си искаш елементи в нея (в конкретния пример по-малко от 1024 :) )
Или ги създавай така:
int a;
cin>>a;
double *M1 = new double[a];

мисля че в този случай беше позволено да използваш променлива, за да посочиш размерността на масива (отново не съм сигурен защото нямам C++ компилатор тук)

Поздрави
           Ники
Активен
"Now everything is reflection
as I make my way though this labyrinth.
And my sence of direction
is lost like the sound of my steps!!!"
                                                     Elisa - Labyrinth

antoniy

  • Управител
  • *
  • Неактивен Неактивен
  • Публикации: 723
    • http://antoniy.net/
Re: задача на C++,HELP MEE
« Отговор #35 -: 16.04.2008, 08:24:16 »

Активен
Too short signature limits.

Ники Вълчанов

  • Неактивен Неактивен
  • Публикации: 526
  • History is written by the victors
Re: задача на C++,HELP MEE
« Отговор #36 -: 16.04.2008, 09:56:19 »



Чонков ... че си голям - голям си ;)
Че си прав - прав си ;)

Но в крайна сметка проблема на мацката е подробно описан в предния ми пост (ползвате различни компилатори)
Активен
"Now everything is reflection
as I make my way though this labyrinth.
And my sence of direction
is lost like the sound of my steps!!!"
                                                     Elisa - Labyrinth

antoniy

  • Управител
  • *
  • Неактивен Неактивен
  • Публикации: 723
    • http://antoniy.net/
Re: задача на C++,HELP MEE
« Отговор #37 -: 16.04.2008, 10:16:40 »

Поука: Не използвайте нищо на микромеките.
Активен
Too short signature limits.

JOKe

  • Неактивен Неактивен
  • Публикации: 2656
  • Code or Die
Re: задача на C++,HELP MEE
« Отговор #38 -: 16.04.2008, 10:55:15 »

Аз за двете грешки да кажа пак ...
с риск да се повторя:

Простете некомпетенцията ми ... но

double M[a][a] ... при декларация на масиви в C++ по този начин размерността не трябва ли да е задължително константа. Т.е.

int a = 10;
double M[a][a];
би трябвало да даде грешка, че "а" не е константа!

Не ме наливайте много, защото го карам на спомен, а и не съм си сложил C++ компилатор, че да тест-на ;)

Поздрави
           Ники

Или използвай фиксирани размери за матриците
Пр:
double M1[1024]

след което си пълни колкото си искаш елементи в нея (в конкретния пример по-малко от 1024 :) )
Или ги създавай така:
int a;
cin>>a;
double *M1 = new double[a];

мисля че в този случай беше позволено да използваш променлива, за да посочиш размерността на масива (отново не съм сигурен защото нямам C++ компилатор тук)

Поздрави
           Ники

мда баш така се прави :
Цитат
int a;
cin>>a;
double *M1 = new double[a];
други начини НЯМА !!! ааа онова с 1024 е ЩО ЗА БОЗА тва са  някви измишлиотини.
и после да не забравяме delete[] а; щото повечето не че знаят какво прави ама се заяждат що го няма.. 

бреи тва C++ верно грозно :) като махнещ * и става Java красота.. ;)
Активен

Ники Вълчанов

  • Неактивен Неактивен
  • Публикации: 526
  • History is written by the victors
Re: задача на C++,HELP MEE
« Отговор #39 -: 16.04.2008, 11:14:55 »

... ааа онова с 1024 е ЩО ЗА БОЗА тва са  някви измишлиотини.

xaexaeexaeae

заделянето на памет е скъпа операция и не можеш да си го позволяваш за всеки тест (обикновено във състезателните задачи 1вото нещо, което ти се подава на входа е броя тестове. Ако за всеки тест ти наново заделяш памет никога няма да се вместиш във времето, което ти се полага за изпълнение :) )

За т'ва в условието на задачата ти се казват ограниченията и ти в началото си заделяш памет за най-лошия случай (най-големите тестове) и после си бачкаш с толкова колкото ти трябва от масива.
Така че онова с 1024 си е супер.

P.S.
... ся е времето да кажеш : "Баси shit-овете, т'ва никога няя го ползвам :)" !
Активен
"Now everything is reflection
as I make my way though this labyrinth.
And my sence of direction
is lost like the sound of my steps!!!"
                                                     Elisa - Labyrinth