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]
mina_loesningar_till_uppgift_3_7_8_och_15 [2022-07-18 13:20] (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>