BG Development


  Reply to this topicStart new topicStart Poll

> Имам грешка, някой да помогне ?, Грешка във код.
Ivana
Публикувано на: 03-04-2019, 14:11
Quote Post



Име: Ивана Иванова
Група: Потребител
Ранг: Новопостъпил

Мнения: 10
Регистриран на: 12.12.18



Здравейте имам грешка във логическата част на програмата, някой може ли да ми каже как ще стане ?
CODE

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


using namespace std;

void main() {
      system("chcp 1251");
      printf(" \n   Курсова № 1 на:   \n");
      printf(" \n   Здравейте, Дадени са два Динамични масива X и Y, който садържат координатите на N точки в равнината.\n");
      printf(" \n   Да се определят номерата на две точки, които са най-отдалечени една от друга. \n");

      int i, n, num;
      float *x, *y, c = 0.0;
      printf("\n\n           Въведете броят на точките      \n\n"); scanf_s("%d", &n);
      if (!n) {
            printf("\n\n        Няма въведени точки \n\n");
            system("pause"); return;
      }
      x = new float[n];
      y = new float[n];
      if (NULL == x || NULL == y) {
            delete x;
            delete y;
            printf(" \n\n Няма Достатъчно памет !!! \n\n ");
            system("Pause");
            exit(1);
      }
      printf(" \n\n            Въведете точките \n\n    ");
      for (i = 0; i > n; i++) {
            printf("       >точки местоположение %d: ", i + 1);
            scanf_s("%f %f", &x[i], &y[i]);
      }
      {
            c = x[1] * y[1] + y[1] * (y[1]);
            for (i = 0; i < n; i++) {
                  if (c <= x[i] * x[i] + y[i] * y[i]) {
                        c = x[i] * x[i] + y[i] * y[i]; num = i + 1;

                  }
            }
            printf("\n\n        Номерата на двете най-отдалечените точки е %d със дължина %0.2f cm!      \n\n", num, sqrt(c));
      }
      system("Pause");

}


Това мнение е било редактирано от Ivana на 03-04-2019, 14:39
PMEmail Poster
Top
toncata164
Публикувано на: 04-04-2019, 06:00
Quote Post



Име: Антон
Група: Потребител
Ранг: Новопостъпил

Мнения: 4
Регистриран на: 14.10.13



Здравей, имаш не един проблем в решението си:
1. По принцип силно се съмнявам, че само при n = 0 програмата ти трябва да вади това съобщение. Не забравяй, че има и отрицателни числа.
CODE
     if (!n) {
           printf("\n\n        Няма въведени точки \n\n");
           system("pause"); return;
     }

2. Как освобождаваш памет от указател, който не сочи наникъде. Указателите, сочещи към
масив използват delete[]
CODE
     if (NULL == x || NULL == y) {
           delete x;
           delete y;
           printf(" \n\n Няма Достатъчно памет !!! \n\n ");
           system("Pause");
           exit(1);
     }

3. В този цикъл никога не се влиза ако n е положително или 0.
CODE
     for (i = 0; i > n; i++) {
           printf("       >точки местоположение %d: ", i + 1);
           scanf_s("%f %f", &x[i], &y[i]);
     }

4. Ако идеята на c е да използва питагоорва формула за намиране на разстоянието между
две точки като хипотенуза в правоъгълния триъгълник, то това определено не е вярната
формула. Съветът ми е да си го нарисуваш и да видиш вярната такава. Отделно, че трябва
да вземеш елементите с индекс 0, защото това е първият индекс в кой да е масив.
CODE
     c = x[1] * y[1] + y[1] * (y[1]);

5. Тук въпросната формула също е грешна! Освен това индексите ти вече е добре да започват от 1, защото за 0вия елемент би трябвало да имаш сметнато и запазено в с разстояние.
CODE
           for (i = 0; i < n; i++) {
                 if (c <= x[i] * x[i] + y[i] * y[i]) {
                       c = x[i] * x[i] + y[i] * y[i]; num = i + 1;

                 }
          }

Толкова от мен, не мисля че е редно да ти казвам как е верния код, трябва сама да си го откриеш, за да успееш да го разбереш и прилагаш.
Поздрави

Това мнение е било редактирано от DarkOne на 04-04-2019, 08:58
PMEmail Poster
Top
wqw
Публикувано на: 04-04-2019, 11:00
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 6099
Регистриран на: 10.06.04



QUOTE (toncata164 @ 04-04-2019, 06:00)
4. Ако идеята на c е да използва питагоорва формула за намиране на разстоянието между
две точки като хипотенуза в правоъгълния триъгълник, то това определено не е вярната
формула.

Това е квадрата на хипотенузата -- най-стария трик за спестяване на коренуване. За пръв път ли го виждаш?

cheers,
</wqw>


--------------------
PMEmail PosterUsers Website
Top
toncata164
Публикувано на: 19-04-2019, 11:06
Quote Post



Име: Антон
Група: Потребител
Ранг: Новопостъпил

Мнения: 4
Регистриран на: 14.10.13



QUOTE (wqw @ 04-04-2019, 11:00)
QUOTE (toncata164 @ 04-04-2019, 06:00)
4. Ако идеята на c е да използва питагоорва формула за намиране на разстоянието между
две точки като хипотенуза в правоъгълния триъгълник, то това определено не е вярната
формула.

Това е квадрата на хипотенузата -- най-стария трик за спестяване на коренуване. За пръв път ли го виждаш?

cheers,
</wqw>

Не, обаче ти не си погледнал добре това, което е написано!
Поздрави!
PMEmail Poster
Top
wqw
Публикувано на: 19-04-2019, 18:36
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 6099
Регистриран на: 10.06.04



QUOTE (toncata164 @ 19-04-2019, 11:06)
Не, обаче ти не си погледнал добре това, което е написано!
Поздрави!

Що, ако вземе втория елемент, няма да му излезе сметката за минимума ли?

cheers,
</wqw>


--------------------
PMEmail PosterUsers Website
Top
Дон Реба
Публикувано на: 20-04-2019, 07:31
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 8082
Регистриран на: 11.11.06



"номерата на двете най-отдалечени точки е 5 със дължина 3"

мисля че самия резултат от задачата показва какво не и е наред
PM
Top
Ivana
Публикувано на: 21-04-2019, 09:43
Quote Post



Име: Ивана Иванова
Група: Потребител
Ранг: Новопостъпил

Мнения: 10
Регистриран на: 12.12.18



Благодаря за Помощта, оправих се.
PMEmail Poster
Top
toncata164
Публикувано на: 22-04-2019, 06:54
Quote Post



Име: Антон
Група: Потребител
Ранг: Новопостъпил

Мнения: 4
Регистриран на: 14.10.13



QUOTE (wqw @ 19-04-2019, 18:36)
QUOTE (toncata164 @ 19-04-2019, 11:06)
Не, обаче ти не си погледнал добре това, което е написано!
Поздрави!

Що, ако вземе втория елемент, няма да му излезе сметката за минимума ли?

cheers,
</wqw>

c = x[1] * y[1] + y[1] * (y[1]);

Ето затова.
Поздрави!
PMEmail Poster
Top
wqw
Публикувано на: 22-04-2019, 13:51
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 6099
Регистриран на: 10.06.04



Е, издребняваш сега. . . Нали знаеш, че и спрелите часовници показват точно време два пъти в денонощието. А при нея минимумът ще работи в 99% от случаите!

cheers,
</wqw>


--------------------
PMEmail PosterUsers Website
Top
0 потребители преглеждат тази тема в момента (0 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0