BG Development


Страници: (5) [1] 2 3 ... последна »  ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Въпрос за свързан списък C++, едносвързан списък C++
m.dimitrov
Публикувано на: 08-01-2019, 16:41
Quote Post



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

Мнения: 16
Регистриран на: 08.01.19



Здравейте, имам ето това задание:



Големи числа се наричат цели положителни числа с К цифри. Големите цели числа могат да се представят с помощта на линеен едносвързан списък, всеки елемент на който съдържа точно една цифра от числото. Дадени са две големи цели числа N1 и N2 (до 100 цифри). Да се напишат програмни фрагменти за :

a. Представяне на числата чрез списъци;

b. Сумиране на две големи цели числа.



Бях го направил с две функции create1 и create2 и две променливи N1 и N2, но професорката иска да е само един и колкото числа искам да въведа толкова пъти да извикам един и същ create. Опитах по този начин но при започване на въвеждането на второто число програмата блокира. Бих бил благодарен ако някой помогне.



Ето и до къде съм стигнал.


CODE

#include <iostream>
using namespace std;

struct chislo{
      int N;
      chislo* next;
};
typedef chislo* Point;
Point Head;

void Create(Point &Head) {
      Point      Last, P; Last=NULL;
      int brc=0;
      int br=0;
      cout<<"Колко цифри ще е числото?: ";
      cin>>br;
      while (brc != br) {
            P = new chislo;
            brc++;
            cout << brc <<" цифра на числото: ";
            cin >> P->N;
            P->next=NULL;
       if (Head == NULL)       Head = P;
          else      Last->next = P;
       Last = P;
      }
}

void Traverse(Point P){
cout<<"Числото е:";
       while (P !=NULL) {
       cout<<P->N;
    P = P->next;  
            }
cout<<endl;
}

int main() {
      system("chcp 1251");
      Point Head = NULL;
      Create(Head);
      Create(Head);
      Traverse(Head);
      Traverse(Head);
}


Това мнение е било редактирано от SuN на 08-01-2019, 16:53
PMEmail Poster
Top
fast_user
Публикувано на: 08-01-2019, 16:57
Quote Post



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

Мнения: 576
Регистриран на: 19.09.12



Щях да предложа да ползваш дебъгер за да проследиш стъпките на кода, ама се страхувам, че може да пишеш за линукс.


--------------------
Linux is only free if your time has no value.
Linux Akbar
Чък Норис не използва Линукс, Линукс използва Чък Норис.
PMEmail Poster
Top
miron
Публикувано на: 08-01-2019, 17:11
Quote Post



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

Мнения: 626
Регистриран на: 26.04.05



В началото на Create имаш
CODE

Point      Last, P; Last=NULL;

Тоест всеки път като я извикаш тая функция Last=NULL. А за втория елемент трябва да е различно.
PM
Top
m.dimitrov
Публикувано на: 08-01-2019, 17:45
Quote Post



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

Мнения: 16
Регистриран на: 08.01.19



QUOTE (fast_user @ 08-01-2019, 16:57)
Щях да предложа да ползваш дебъгер за да проследиш стъпките на кода, ама се страхувам, че може да пишеш за линукс.

Пиша на Windows във Visual Studio-то. Когато ползвам дебъгер, при въвеждане на първата цифра от второти число ме изхвърля на този ред:

else Last->next = P;

Ето и снимка.

Прикачена картинка (Кликнете на картинката, за да я увеличите!)
Прикачена картинка
PMEmail Poster
Top
Gamma Goblin
Публикувано на: 08-01-2019, 17:47
Quote Post



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

Мнения: 2254
Регистриран на: 21.02.18



Aко ползваше линукс нямаше да имаш такива проблеми


--------------------
https://www.rust-lang.org/
---
Хора, които са прекалено умни, за да се занимават с политика, са наказани да бъдат управлявани от глупаци.
---
PMEmail PosterUsers Website
Top
m.dimitrov
Публикувано на: 08-01-2019, 17:47
Quote Post



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

Мнения: 16
Регистриран на: 08.01.19



QUOTE (miron @ 08-01-2019, 17:11)
В началото на Create имаш
CODE

Point      Last, P; Last=NULL;

Тоест всеки път като я извикаш тая функция Last=NULL. А за втория елемент трябва да е различно.

Идеята ми е, че трябва да въведа два различни списъка, а не един единствен.
PMEmail Poster
Top
m.dimitrov
Публикувано на: 08-01-2019, 17:55
Quote Post



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

Мнения: 16
Регистриран на: 08.01.19



QUOTE (Gamma Goblin @ 08-01-2019, 17:47)
Aко ползваше линукс нямаше да имаш такива проблеми

И аз така мисля, но проблема е, че при защитаване на програмата пред даскала трябва да работи на Visual Studio в Windows.
PMEmail Poster
Top
fast_user
Публикувано на: 08-01-2019, 17:59
Quote Post



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

Мнения: 576
Регистриран на: 19.09.12



QUOTE (m.dimitrov @ 08-01-2019, 18:55)
QUOTE (Gamma Goblin @ 08-01-2019, 17:47)
Aко ползваше линукс нямаше да имаш такива проблеми

И аз така мисля, но проблема е, че при защитаване на програмата пред даскала трябва да работи на Visual Studio в Windows.

Аз, ако преподавател ме караше да ползвам Windows, а аз искам Линукс, щях да му обясня звучно, че ме дискриминира и не ми е на нивото, за да ми казва какво да ползвам. Windows-джия ще ти казва какво да правиш, смешна работа.
А иначе то студиото ти е казало каква е грешката - само трябва да огледаш прозорците

Грешката е access violation -> какво не можеш да достъпиш?
На тоя ред само на next опитваш да присвоиш стойност, а на кого е мембър той- на Last.
Във watch-a стойността на Last e NULL - оттук въпроса е, защо указателя ти е NULL, a очакваш да не?(@miron ти го е написал вече).


--------------------
Linux is only free if your time has no value.
Linux Akbar
Чък Норис не използва Линукс, Линукс използва Чък Норис.
PMEmail Poster
Top
m.dimitrov
Публикувано на: 08-01-2019, 18:20
Quote Post



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

Мнения: 16
Регистриран на: 08.01.19



Благодаря за препоръките, успях да напиша нещо което работи, дано се хареса.


CODE


#include <iostream>
using namespace std;

struct chislo{
      int N;
      chislo* next;
};
typedef chislo* Point;
Point Head1,Head2;

void Create(Point &Head) {
      Point      Last, P;
      int brc=0;
      int br=0;
      cout<<"Колко цифри ще е числото?: ";
      cin>>br;
      while (brc != br) {
            P = new chislo;
            brc++;
            cout << brc <<" цифра на числото: ";
            cin >> P->N;
            P->next=NULL;
       if (Head == NULL)       Head = P;
          else      Last->next = P;
       Last = P;
      }
}

int Traverse(Point P){
       int ch=0;
       while (P !=NULL) {
       ch=(ch*10)+P->N;
    P = P->next;  
            }
return ch;
}


int main() {
      system("chcp 1251");
      int sum=0;
      Point Head1 = NULL;
      Point Head2 = NULL;
      Create(Head1);
      Create(Head2);
      sum=Traverse(Head1)+Traverse(Head2);
      cout<<"Сумата на числата е: "<<sum<<endl;
}

PMEmail Poster
Top
PxL
Публикувано на: 09-01-2019, 03:24
Quote Post


Group Icon
Име: Димитър Т. Димитров
Група: VIP
Ранг: Почетен член

Мнения: 2863
Регистриран на: 26.04.05



QUOTE (fast_user @ 08-01-2019, 17:57)
Щях да предложа да ползваш дебъгер за да проследиш стъпките на кода, ама се страхувам, че може да пишеш за линукс.

 Щях да предложа да спреш да пишеш мнения, защото ще изглеждаш глупав, но ме е страх, че просто си глупав.


Това мнение е било редактирано от PxL на 09-01-2019, 04:12


--------------------
void putchar(char c);int main(){int x,c=1,i;for(i=0;(x="PxLY2H4:2E;7231?=68255A5S5P9N:N9O84111H861I85111G9N:O811O812M<G33911EAEDBECE22169D1=2k"[i+++3]);)while(x-->'0')putchar((!(++c%'('))?0x0a:33^(i&1));}
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (5) [1] 2 3 ... последна » Reply to this topicStart new topicStart Poll

 


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