Zuletzt bearbeitet vor einem Monat
von Xineohp1506

Informatik - Rechner und Netzbetrieb

Lösungen

für Hinweise auf Fehler stets dankbar und offen ?

Übung 02

1) a)

mkdir Subdir subdir

b)

cat > da 
    .....
  .....
# Strg+c

c)

# -----

d)

mv subdir/da subdir/Da

e)

# -----

f)

rm subdir/Da
rmdir subdir

g)

# für das aktuelle Verzeichnis

2) a)

# erster erstellt im ~ eine leere Datei mit den Namen experiment, zweiter gibt eine Fehlermeldung aus, da die Datei da in Subdir schon vorhanden ist

b)

# eine Ausgabe

c)

# eine Fehlermeldung?

d)

# date   => gibt das aktuelle Datum aus
# who       => zeigt an wer eingeloggt ist
# who -H    =>           -""-               mit Kopfzeile
# who -uH       =>           -""-                  -""-        mit Loggintime
# finger        => gibt Informationen über den Benutzer aus
# uname     => gibt das BS aus
# -a steht bei den meisten Programmen für all

e)

# file gibt Auskunft über die Datei, das bedeutet aber nicht unbedingt das man direkt erfährt zu welchen Progamm die Datei gehört. Des weiteren kann man mit file dateien manipulieren.

f)

# -k => Sucht im Namen und in den Kurzbescheibungen
# -l    => verwendet nur lokale man
# -a    => alle gefunden man werden nacheinander angezeigt

3)

# es gibt mehrere Möglichkeiten, aber in diesem Fall wird nach id gesucht.

Übung 03

1-3)

# ---

4)

# 022 -> 755

5)

# chmod u=rx,g=rx,o=x    f   chmod 551 D
# chmod u=r,g=r,o=-             f   chmod 440 D
# chmod u=rw,g=r,o=-    f   chmod 640 D
# chmod u=rwx,g=-,o=-   f   chmod 700 D
# chmod u=wx,g=r,o=-    f   chmod 340 D

6)

# umask 27

7)

# in der Bourne geht es so 
% export PATH=.:$PATH 
# wie es in der tcsh ist muss ich noch einmal nachschauen.

8)

# den pfad findet man mit 
which uname
# der zweite Schritte würde auf meinen System so aussehen
cp /bin/uname ~/ls
# Es wird uname ausgeführt, da uname nun in meinen ~ auf ls hört und mein ~ zuerst aufgerufen wird.

9)

# pfad wo liegt

10)

set myvar = 2008
# In der ersten.
# In allen
# Nein da die conf nicht neu eingelesen wurde.

Übung 04

1)

ls -l > manpages.info
  cat manpages.info
  more -"-
  less -"-

2)

# less is more
# man less ?

3)

# /dev/....
# Ich bin der Eigentümer
# Es geht nicht weil Gerätedateien schreibgeschützt sind und weil sie gerade in verwendung ist

4)

echo $#path

Übung 05

1)

cd /usr/bin

a)

echo ??

b)

echo [aeiou]*d

c)

echo *\?*

2) a)

ls- l | grep '^..$'

b)

ls- l | grep '^[aeiou]*d$*'

c)

ls- l | grep '*?*'

3)

set zlist `date` 
set zlist [1]=heute

4)

set pco `ps -e | wc -l`

Übung 06

Aufgabe 1

ls -l |grep '[May]a[iy]'

Aufgabe 2

set substitutionfolge `~/.*`

Aufgabe 3

# ls ausgabe gefilter auf dot-files

Aufgabe 4

(find /usr -name '00*' >jarout) > & /dev/null

Aufgabe 5

# nein dieses ist in der tcsh nur indirekt möglich

Aufgabe 6

ls -l /usr | grep d...r.xr.x

Übung 07

Aufgabe 1

chmod 755 ~

Aufgabe 2

#! bin/tcsh -f
set zz = gesetzt
echo $zz

Übung 08

Aufgabe 2

#! bin/tcsh

ps -f | sed 1,1d

Aufgabe 3

#!/bin/tcsh
 
echo "Any Key-Taste drücken"
        read AnyKey
echo "Mahlzeit du Lusche, wie ist dein Vorname?"
        set PRENAME=$<
echo "Ich will jetzt deinen Nachnamen hören, du Drecksack!"
        set NAME=$<
echo "Ah die Dame heisst $PRENAME $NAME"
echo "Ah die Dame heisst $NAME , $PRENAME"

echo "Wie ist deine Matrikelnummer?"
    set MATRNR=$<

if ( $MATRNR % 2 == 0 ) then
    echo "$MATRNR ist gerade"
else
    echo "$MATRNR ist ungerade"
endif
echo "ENDE"

Aufgabe 4

#! bin/tcsh

set anz=$#argv

while ( $anz != 0 )
  if (-d $argv[$anz] ) then
    rm -r $argv[$anz]
    echo " argument" $anz " ist ein verzeichnis und wurde gelöscht"

    else

    echo " argument " $anz  "ist kein verzeichnis"


    endif

  @ anz --

end

Aufgabe 5

#! /bin/sh
for verz in $*
do
  # $verz da??
  if [ -d $verz ]
        then
    # ja also dann löschen
    rmdir $verz
  else
  # NEIN?
    echo he, du Sack $verz ist nicht da.
  fi
done

Aufgabe 6

#!/bin/tcsh
 
if ( $argv != 2 ) then
    #exit
else
    if (! ((-f $1 && -f $2) || (-d $1 && -d $2)) then
   #exit
  else
    if ({ (diff $1 $2 > /dev/null) }) then
      #exit
    else
      echo "Sind gleich"
    endif
  endif
endif
echo "ENDE"

Aufgabe 8

set a=wirklich
set b=$a
echo $b ---> wirklich

Bei eval vor einer Kommandozeile, werden in einem ersten Durchlauf alle Variablen durch ihre Inhalte ersetzt, die geänderte Zeile wird dann abgearbeitet.

Aufgabe 9

#! bin/tcsh
 
set anz=$#argv
 
while ( $anz != 0 )
  if (-f $argv[$anz] )  then 
  echo $anz -tes Argument: `cat $argv[$anz]`
    else 
  echo $anz -tes Argument: ungültig
  endif 
@ anz --
   
end

Übung 11

Aufgabe 1 ganz einfaches Bsp. frei in einer Minute zusammen gehakt.

<html>
 <head>
  <titel>Homepage von Karl Arsch</title>
  <style type="text/css">
   <!--
    body { background:#000; }
    h1,h2,h3,h4 { background-color:#fff }
    #head h1 {}
    #content h1 {}
    #content p.absatz {}
   -->
  </style>
 </head>
 <body>
  <div id="head">
   <h1>simple Site</h1>
  </div>
  <div id="content">
   <h2>zweiter Titel</h2>
   <p class="absatz">
    erster Absatz
   </p>
   <p class="absatz">
    zweiter Absatz
   </p>
  </div>
 </body>
</html>

Aufgabe 2 a)

// es gibt nichts zu beobachten bei 
 gcc fout.c -o fout

b)

7 16.5
Es wurden 7 Zeichen ausgegeben.
1076920320 0.0
Es wurden 15 Zeichen ausgegeben.

c)

// ist eine printf drin, d.h. Ausgabe

d)

// meldet ein paar Fehler
 fout.c: In function `main':
 fout.c:22: warning: int format, double arg (arg 2)
 fout.c:22: warning: double format, different type arg (arg 3)

Aufgabe 3

/* 
 * hier ohne Fehler
 */

#include<stdio.h>

int main() {

  int i = 63;
  double x = .000007;
  double y = 123.45;

  printf("\ni:\n%d \n%o \n%x \n%X", i, i, i, i);
  printf("\nx:\n%f \n%e \n%E \n%g \n%G", x, x, x, x, x);
  printf("\ny:\n%g \n%G \n", y, y);
  return 0;
}

/* 
 * zum vgl der code mit Fehler
 */

int main() {

  int i = 63;
  double x = .000007;
  double y = 123.45;

  printf("\ni:\n%d \n%o \n%x \n%X", i, i, k, i);
  printf("\nx:\n%f \n%e \n%E \n%g \n%G", x, i, x, x);
  printf("\ny:\n%g \n%G", i);

}

Aufgabe 4

//
// es soll der text "Ich kenne die Formatelemente zu 100%." Ausgegeben werden
//

//base header
#include<stdio.h>

//start main -> void = keine parameter
int main(void) {
  
  //Ausgabe, man achte auf %%
  printf("Ich kenne die Formatelemente zu 100%%.\");
  return 0;
}

Übung 12

Aufgabe 1

/* fehler.c
 *  
 *  Ein Programm, dass Compilerfehler,
 *  Laufzeitfehler und logische Fehler demonstriert.
 * 
 */

#include <stdio.h>

int main() {

        int num1, num2, x,y;
        num1 = 0;
        num2 = 1;

        printf("Der Quotient der Variablen ist: ");
        printf("%d\n", num1/num2);
        printf("\n");              // Leerzeile

        printf("Jetzt werden die Variablenwerte vertauscht.\n");

                x=num1;
                y=num2;

                num1=y;
                num2=x;

        printf("Der Quotient der Variablen ist nun: ");
        printf("%d\n", num1/num2);

        return 0;
}

c)

/*
 * Fehlermeldung: Fließkommafehler (core dumped)
 * Grund: Division durch 0 ist nicht möglich.
 */

Aufgabe 2

/* Programm, dass zuerst die geraden Zahlen von 12 bis 0, dann
 *  die ungeraden Zahlen von -1 bis -13 und zum Schluss die ersten 10 Quadratzahlen 
 *  mit Hilfe einer for-Schleifen ausgibt:
 * 
 */
#include <stdio.h>

int main() {
    int i;
    for (i=13;i>-1;i--)  {
         if ( i%2 == 0 ) {
              printf( "%d,",i) ;
             }
        }
    printf("\n");
    for (i=-1;i<=13;i++)  {
         if ( i%2 == 1 ) {
              printf("-");
              printf( "%d,",i) ;
            }
         }
     printf("\n");
     for(i=0;i<10;i++)  {
         printf( "%d,",i*i) ;          
         }
     printf("\n");
  return 0;
}

Aufgabe 3

/*
 * Temperatur wird in celsius und fahreheit angegeben in einer 
 * Tabelle
 */
#include <stdio.h>
int main() {
  int f=0;
  int c=0;
   printf("Fahrenheit    Celsius \n");
   while (f <=300 ) {    
    c=f-32; 
    c=c*5;
    c=c/9;
    printf("%d\t\t%d\n",f,c);
    f=f+20;
   }
 return 0;
}

Aufgabe 4

/*
 * quadrat einer eingabe mal 3
 */
#include <stdio.h>
int quadratdrei (int n) {
  n=n*n;
  return n*3 ;
 }

int c;
int qud;
int main() {
    scanf("%d",&c);
    qud=quadratdrei(c);
    printf("%d\n",qud);
   return 0;
  }

Aufgabe 5

/*
 * Das Script erwartet eine Eingabe und es nimmt solange die Eingabe 
 * entgegen bis ein newline kommt. Die Eingabe wird dann in ASCII-Werte
 * "übersetzt". In der folgenden Ausgabe werden die ermittelten Werte
 * auf der Ausgabeeinheit ausgegeben. Jeder Wert in einer newline.
 */
/*
 * Zeichen zählen
 * File count.c
 */
#include <stdio.h>
#include <stdlib.h>

int main (void) {
   int c,count=0;

   printf("Schreib und das ist ein Befehl: \t");
   while((c=getchar()) != '\n') {
         count++;
   }
   printf("Anzahl der Zeichen beträgt %d Zeichen\n", count);
   return EXIT_SUCCESS;
}

Übung 13

Aufgabe 1

/*Ein Programm zu berechnen des Zinses mit Zinsanlage
 */
#include <stdio.h>
#define Jahre 10 /*Laufzeit*/
#define gka 1000 /*kapital*/
#define z 5 //Zinsen

int main(){

int i;
float gk, zins ;
gk=gka;

printf("Jahr \t Geld \n");
    
  for (i=0; i<=Jahre ; i++ ){
  
  printf("%d \t %.2f \n ", i , gk );    
  zins=((z*gk)/100);
  gk= gk+zins   ;
  
  }
  
return 0;

}

Aufgabe 2

/*
 * Ein Programm zum Zeiger ausprobieren
 */
 
#include <stdio.h>

int main () {
int i, * pointeri;

pointeri=&i;
i=1;
printf("%p \n", pointeri);
printf("%d \n", *pointeri);
printf("%d \n", i);
*pointeri=2;
printf("%d \n", i);

return 0;
}

Aufgabe 3

/*Ein Programm zum Zeiger ausprobieren
 */
 
#include <stdio.h>

void swap (int *pointa,int *pointb){
int z;

z=*pointa;
*pointa=*pointb;
*pointb=z;
}

int main() {
int a=2;
int b=4;

printf("%d %d  \n ", a , b);
swap(&a,&b);
printf("%d %d \n ", a , b );

return 0;
}

Aufgabe 4

/* mithilfe von zeigern zerteilte ausgabe einer hexazahl 
*/
#include <stdio.h>

int main() {

long long S, *ptr;
S =0x1a1b2a2b3a3b4a4bULL;

ptr=&S;
unsigned short *a, *aa, *aaa,*aaaa;
void *whole ;
whole = ptr ;

a=whole;
aa=a+1;
aaa=a+2;
aaaa=a+3;

printf("wert der long long S: %llx \n ", S);
printf("Wert des 4 doppelbyte %x\n ", *a);
printf("Wert des 3 doppelbyte %x\n ", *aa);
printf("Wert des 2 doppelbyte %x\n ", *aaa);
printf("Wert des 1 doppelbyte %x\n ", *aaaa);

return 0;
}

Übung 14

Aufgabe 1

#include<stdio.h>
#define arrayg 10 

int main() {
int i;
int ar [arrayg];
  for (i=0; i<arrayg ;i++){
      ar [i]= (i+1)*(i+1);
      printf("%d ", ar[i]);
    }
    printf("\n");
return 0;
}

Aufgabe 2

#include<stdio.h>
#define arrayg 10 

void rev_print(int* arp) {
int i;

for (i=arrayg-1; i>=0 ;i--){         
    printf("%d ",(*arp+i)*(*arp+i));
  }
  printf("\n");
}

int main() {
int i;
int ar [arrayg];
     for (i=0; i<arrayg ;i++){
  ar [i]= (i+1)*(i+1);
  printf("%d ", ar[i]);         
     }
     printf("\n");  
     rev_print(ar);
return 0;
}

Aufgabe 3

#include<stdio.h>
#define arrayg 1000 

int main() {
int i,j;
int eingabe=0;
int ar [arrayg];

for (j=0;j<arrayg; j++){
ar[j]=(j)*(j);
}
  for (i=0; i<arrayg ;i++){
  printf("Bitte geben sie eine Zahl zwischen 1 und %d ein \n ",arrayg);
    scanf ("%d", &eingabe );        
      if( eingabe==0){
        break;
      }
    if (eingabe<1 || eingabe>1000){
    printf("ihre Zahl passt nich in den Array");
      continue;
    }
    else{ 
  printf("Zahl im Array and der stelle %d ,%d \n ", eingabe, ar[eingabe]);      
        }                           
      } 
    printf("\n");
return 0;
}

Aufgabe 4

/* char_array.c
 * 
 * Entscheidung, ob eine Zeichenkette ein 'a' enthaelt
 */

#include <stdio.h>
#define MAX 40

int main() {
  int index;
  char eingabe [MAX];

  printf("Bitte String eingeben (max. %d Zeichen): ", MAX);
  gets(eingabe);

  for (index = 0; eingabe[index] != '\0'; index++) 
     if (eingabe[index] == 'a') 
        break;

  if (eingabe[index] == '\0')
     printf("\nDer String enthaelt kein 'a'\n");
  else 
     printf("\nDas erste 'a' ist an %d. Stelle\n", index + 1);

  return 0;
}

Aufgabe 5

/* zeichenketten.c
 * 
 * Eingabe, Ausgabe und Manipulation von Zeichenketten
 */

#include <stdio.h>
#include <string.h>

int main() {
   char s1 [20];
   char s2 [20];
   char * name;
   char * tmp;

   printf("Geben Sie Ihren Vornamen ein: ");
   scanf("%s", s1);
   printf("Geben Sie Ihren Nachnamen ein: ");
   scanf("%s", s2);
  
   tmp = s2;
   while (*tmp != '\0') {
        if (*tmp > 96 && *tmp < 123)
            *tmp = *tmp - 32;
        tmp++;
   }

   name = strcat(s1, " ");
   name = strcat(name, s2);

   printf("%s\n", name);

   return 0;
}

Aufgabe 6

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

int main (int argc, char *argv[]){
double kubik;
if (argc != 2){
printf("Falsch!\n");
return 0;
}
if (atof(argv[1])!=0 || *argv[1]=='0' ){
kubik=atof(argv[1]);

kubik=kubik*kubik*kubik;

printf("%f \n",kubik);
} 
else {
printf("Keine Zahl!\n");
}

return 0;
}

Literatur

  • Martin Dietze: Praxiskurs Unix-Shell; O'Reilly Verlag GmbH & Co. KG, 2011
  • Helmut Erlenkötter: C: Programmieren von Anfang an; Rowohlt Taschenbuch Verlag, 1999
  • Ulla Kirch-Prinz, Peter Prinz: C - kurz & gut; O'Reilly Verlag GmbH & Co. KG, 2002

Weblinks

Sonstiges

Falls ihr die PATH Variable versaut habt

path (/opt/sfw/teTeX/bin/sparc-sun-solaris2.9 /usr/local/qt/bin /usr/local/kde/bin /opt/sfw/bin /usr/sfw/bin /opt/sfw/gcc-3/bin /opt/local/bin /usr/local/bin /usr/dt/bin /usr/openwin/bin /usr/ccs/bin /usr/bin /bin)
PATH /opt/sfw/teTeX/bin/sparc-sun-solaris2.9:/usr/local/qt/bin:/usr/local/kde/bin:/opt/sfw/bin:/usr/sfw/bin:/opt/sfw/gcc-3/bin:/opt/local/bin:/usr/local/bin:/usr/dt/bin:/usr/openwin/bin:/usr/ccs/bin:/usr/bin:/bin: