Differences

This shows you the differences between two versions of the page.

Link to this comparison view

mina_loesningar_till_uppgift_3_7_8_och_15 [2017-09-01 14:54] (current)
Line 1: Line 1:
 +===== Ex på lösningar för uppgifterna 3, 7, 8 och 15 =====
 +
 +5.3
 +<code cpp>
 +#include <​cstring>​
 +#include <​iostream>​
 +#include <​cstdlib>​
 +using namespace std;
 +void vand(char *s);
 +
 +int main() {
 +  char temp[100];
 +  cout << "Skriv in en sträng: ";
 +  cin.getline(temp,​100);​
 +  vand(temp);
 +  cout << "​Stängen vänd:​\n"​ << temp << endl;
 +  system("​PAUSE"​);​
 +  return 0;
 +}
 +
 +
 +void vand(char *s) {
 +  char c, *p1, *p2;
 +  p1 = p2 = s; // Båda pekar på starten
 +  while (*p1) { // p1 pekar på \0
 +    *p1++;
 +  }
 +  p1--; // pekar på slutet
 +  while (p1>p2) {
 +    c = *p1; *p1 = *p2; *p2 = c;  // byt plats
 +    p1--;
 +    p2++;
 +  }
 +}
 +</​code>​
 +
 +
 +5.7
 +<code cpp>
 +// returnerar true om kopieringen gick bra
 +
 +bool kopiera(char *till, char *fran, int n) {
 +  for (int i=0; i<n; i++) {
 +    if (! (*till++ = *fran++)) {
 +      return true;  // nolltecken kopierades
 +    }
 +  }
 +
 +  * --till = '​\0'; ​ // misslyckades,​ lägg nolltecken sist
 +  return false;
 +}
 +
 +</​code>​
 +5.8
 +<code cpp>
 +void strcat(char *till, char *fran) {
 +  while (*till) {  // sök nolltecknet
 +    till++;
 +  }
 +  while (*till++ = *fran++) {  // kopiera
 +    ;
 +  }
 +}
 +</​code>​
 +5.15
 +<code cpp>
 +#include <​cstring>​
 +#include <​iostream>​
 +#include <​cstdlib>​
 +using namespace std;
 +
 +// Funktionen returnerar ett kryss respektive en ring om någon
 +// av spelarna har vunnit. Har ingen vunnit returneras värdet '#'​.
 +// Har båda vunnit retuneras det som först påträffas,​ ska ju inte kunna hända
 +char vinnare(char a[3][3]);
 +
 +int main() {
 +  char a[3][3] = {{' ','​x','​o'​},​{'​x','​o','​ '​},​{'​o','​x','​ '}}, temp;
 +  // Skriver ut spelplan
 +  for (int i = 0 ; i < 3 ; i++) {
 +    for (int j = 0 ; j < 3 ; j++) {
 +      cout << a[i][j];
 +    }
 +    cout << endl;
 +  }
 +  temp = vinnare(a);
 +  cout << endl;
 +  if (temp != '#'​) {
 +    cout << temp << " vann" << endl;
 +  } else {
 +    cout << "ingen vann!" << endl;
 +  }  ​
 +  system("​PAUSE"​);​
 +  return 0;
 +}
 +
 +
 +
 +char vinnare(char a[3][3]) {
 +   int i;
 +   // kontrollera diagonaler
 +   if (a[0][0]==a[1][1] && a[0][0]==a[2][2] && a[0][0]!='​ ') {
 +     ​return a[0][0];
 +   }
 +   if (a[0][2]==a[1][1] && a[0][2]==a[2][0] && a[0][2]!='​ ') {
 +     ​return a[0][2];
 +   }
 +
 +   // kontrollera rader
 +   for (i=0; i<3; i++) {
 +     if (a[i][0]==a[i][1] && a[i][0]==a[i][2] && a[i][0]!='​ ') {
 +       ​return a[i][0];
 +     }
 +   }
 +
 +   // kontrollera kolumner
 +   for (i=0; i<3; i++) {
 +     if (a[0][i]==a[1][i] && a[0][i]==a[2][i] && a[0][i]!='​ ') {
 +       ​return a[0][i];
 +     }
 +   }
 +   ​return '#';​
 +}
 +</​code>​