Forum: problem med koden.. Hjälp :)

Forum huvudsida -> Programmering -> problem med koden.. Hjälp :)

Sidor: 1

Till botten

stekis 17:33 - 18:e November 2006 | Post #1
Medlem
Inlägg: 4


Skicka PM
Det här programmet ska räkna ut de 4 sista siffrorna i ett personnummer efter man har skrivit år, månad, dag och kön. Smiley Men istället för ett 10 siffrigt långt person nummer kommer massor av siffror. Ni hittar säkert en massa onödiga rader i koden men i alla fall.. vad är det största felet?
  1.  
  2. #include <iostream>
  3. #include <ctime>
  4.  
  5. using std::cout;
  6. using std::cin;
  7. using std::srand;
  8. using std::rand;
  9. using std::endl;
  10.  
  11. void summera(int l1[9], int ns);
  12. void ls (int ns[2], int dss);
  13. void rakna(int year[2], int mon[2], int day[2], int iSlumptal, int iSlumptall, int tal2, int tal1,int fslumptal, int l1[9]);
  14.  
  15. void rakna(int year[2], int mon[2], int day[2], int iSlumptal, int iSlumptall, int tal2, int tal1,int &fslumptal, int l1[9])
  16. // Här räknar den ut den första ut räkningen. Siffrorna i åren, månaderna och dagarna + 3 slump siffror ska multipliceras med 2 och 1.
  17. {
  18. int li[9];
  19. iSlumptal = rand() / (RAND_MAX / 9 + 1) + 1;
  20. iSlumptall = rand() / (RAND_MAX / 9 + 1) + 1;
  21. l1[0] = year[0]* tal2;
  22. l1[1] = year[1]* tal1;
  23. l1[2] = mon[0]* tal2;
  24. l1[3] = mon[1]* tal1;
  25. l1[4] = day[0]* tal2;
  26. l1[5] = day[1]* tal1;
  27. l1[6] = iSlumptal * tal2;
  28. l1[7] = iSlumptal * tal1;
  29. l1[8] = fslumptal * tal2;
  30. return;
  31. }
  32. void summera(int l1[9], int ns[2])
  33. // Här summeras alla siffror som programmet fick fram under förra uträkningen. Varje siffra var för sig.
  34. {
  35. ns[2] = l1[0] + l1[1] + l1[2] + l1[3] + l1[4] + l1[5] + l1[6] + l1[7] + l1[8];
  36. cout << ns[2];
  37. return;
  38. }
  39. void ls(int ns[2], int dss)
  40. // Här har tiotalet tagits bort. Sen ska talet 10 subtraheras med talet som programmet fick fram under förra uträkningen.
  41. {
  42. dss = 10-ns[1];
  43. cout << dss;
  44. return;
  45. }
  46. int main()
  47. {
  48. srand(time(0));
  49. int dss;
  50. int ns[2];
  51. int l1[9];
  52. int year[2];
  53. int mon[2];
  54. int day[2];
  55. int tal2 = 2;
  56. int tal1 = 1;
  57. char kt[1];
  58. int fslumptal;
  59. int iSlumptal;
  60. int iSlumptall;
  61. // Här skriver man in informationen.
  62. cout << "skriv in födelse år(skriv bara med 2 siffror annars blir allt fel alltså de två sista):";
  63. cin >> year[2];
  64. cout << "skriv in månad:" << endl;
  65. cin >> mon[2];
  66. cout << "skriv in dag:" << endl;
  67. cin >> day[2];
  68. cout << "skriv för [K]ille eller [T]jej" << endl;
  69. cin >> kt[1];
  70. if (strcmp(kt,"K") == 0)
  71. {
  72. int fslumptal = 3;
  73. }
  74. else if(strcmp(kt,"T") == 0)
  75. {
  76. int fslumptal = 4;
  77. }
  78. cout << year[0] << year[1] << mon[0] << mon[1] << day[0] << day[1] << kt << endl;
  79. cin.get();
  80. // här händer alla uträkningar.
  81. int rakna();
  82. int summera();
  83. int ls();
  84. // Här skriver programmet ut alla resultaten eller resultatet.
  85. cout << year[0] << year[1] << mon[0] << mon[1] << day[0] << day[1] << iSlumptal << iSlumptall << fslumptal << dss;
  86. cin.ignore(1,'\n');
  87. cin.get();
  88. return 0;
  89. }
  90.  


så... Vad är fel..? svara snällt Smiley

-------------------------
Ingen signatur!



The_code 19:56 - 18:e November 2006 | Post #2
Medlem
Inlägg: 28


Skicka PM
Vad händer då?

-------------------------
Pillar med VB.NET, C++ och GameMaker



Wael 21:21 - 18:e November 2006 | Post #3
Medlem
Inlägg: 37


Skicka PM
Jag vet inte vad som är fel men jag tycker att istället för att använda alla de där raderna med "using std" ibörjan så byt ut dem mot "using namespace std;"istället!!

-------------------------
Ingen signatur!



stekis 11:18 - 20:e November 2006 | Post #4
Medlem
Inlägg: 4


Skicka PM
Testa min kod så ser du vad som händer... Det kommer massa siffror istället för bara 10.

hmm... jag kanske kom på.. Finns det nått sätt att få if/else funktionen att skilja på om variabeln har 1 eller 2 element?

-------------------------
Ingen signatur!

Senast redigerad 11:32 - 20:e November 2006


Dojjan 12:13 - 20:e November 2006 | Post #5
Medlem
Inlägg: 114


Skicka PM
En lösning vore ju att använda strings. Men du kan ju också använda strlen(char*).




stekis 13:45 - 20:e November 2006 | Post #6
Medlem
Inlägg: 4


Skicka PM
Hur skulle du skriva koden då? Asså jag menar hur gör man. Jag är inte så bra på programmering än. Hur använder man strlen(char*)??

-------------------------
Ingen signatur!

Senast redigerad 13:48 - 20:e November 2006


madah 21:53 - 24:e November 2006 | Post #7
Medlem
Inlägg: 28


Skicka PM
Finns mängder med fel i din kod.

På rad 15 så skickar du med iSlumptal och iSlumptal1, men lite längre ner så deklarerar du helt nya variabler med samma namn som du dessutom tilldelar slumpmässiga värden. Varför skicka med dem som argument överhuvudtaget här?

Samma misstag görs på rad 73 och 77. Här deklarerar du en ny variabel med namnet fslumptal, den tidigare fslumptal på rad 58 kommer förbli oförändrad/undefined.

Felet med att konstiga siffror skrivs ut sker redan vid inläsningen. Vid rad 64 så komer inte två tecken att automatiskt läsas in i variabeln year, du läser dessutom in i den tredje positionen fast det bara finns två.

Såhär skulle du kunna skriva inläsningen istället:

std::string str;

cout << "skriv in födelse år(skriv bara med 2 siffror annars blir allt fel alltså de två sista):";

cin >> str;

year[0] = (int)str.c_str()[0] - '0';
year[1] = (int)str.c_str()[1] - '0';


Det som sker här:

str.c_str()[0] betyder att man tar det första tecknet ur textsträngen. Men för textsträngen "0" så får du ut ascii-värdet 48, därför så tar man och subtraherar med '0'.




stekis 00:52 - 25:e November 2006 | Post #8
Medlem
Inlägg: 4


Skicka PM
tack.. jag ändrar och postar den nya koden så fort jag kan.

-------------------------
Ingen signatur!



Sidor: 1

Forum huvudsida -> Programmering -> problem med koden.. Hjälp :)
Atom feed

Du får inte posta i den här tråden | Till toppen