Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Bildschirmfoto-2019-04-23-um-16-02-04.pn

 

Code:

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

void init(int intArr [], int arrSize){

    int i;    
    srand(time(NULL));
    
    for (i = 0; i < arrSize; i++) {
	intArr[i] = rand() % 10000;
    }	
}

void ausgabe(int intArr, int arrSize){
    int i; 

    for (i = 0; i < arrSize; i++) {
	printf("%5i\t", intArr);
	    if (i == (i % 10 == 0))
		printf("\n");
     }
}


int main() {
    
    int myarray[1000] = {10, 20, 30, 44, 55, 100, 111, 1000};
    
    init(myarray[1000], 100);
    ausgabe(myarray[1000], 100);

    return 0;
}

Hab die Vorlesung heute wegen ner miesen Krankheit verpasst und natürlich kommt alles neu dran, kann mir da jemand bei meinem Code helfen?

Bearbeitet von MarcoPasta

vor 47 Minuten schrieb MarcoPasta:

Bildschirmfoto-2019-04-23-um-16-02-04.pn

 

Code:


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

void init(int intArr [], int arrSize){

    int i;    
    srand(time(NULL));
    
    for (i = 0; i < arrSize; i++) {
	intArr[i] = rand() % 10000;
    }	
}

void ausgabe(int intArr, int arrSize){
    int i; 

    for (i = 0; i < arrSize; i++) {
	printf("%5i\t", intArr);
	    if (i == (i % 10 == 0))
		printf("\n");
     }
}


int main() {
    
    int myarray[1000] = {10, 20, 30, 44, 55, 100, 111, 1000};
    
    init(myarray[1000], 100);
    ausgabe(myarray[1000], 100);

    return 0;
}

Hab die Vorlesung heute wegen ner miesen Krankheit verpasst und natürlich kommt alles neu dran, kann mir da jemand bei meinem Code helfen?

Es wäre hilfreich wenn du deine Wunschhilfe etwas eingränzt...

 

Ich meine es ist ja schließlich eine Aufgabe damit du was lernst :)

 

außerdem kleiner Tipp von meiner Seite... ich glaube das dein Array nur deklariert werden soll, nicht initialisiert, die initalisierung machst du dann in der init(...) funktion.

 

Hier nochmal ein tipp die Aufgabe besteht darin, das Array mit zahlen zw. 1 und 10000 zu füllen.

 

Versuch vorher bitte selbst auf die Lösung zu kommen bevor du den Spoiler aufklappst, danke und viel Glück!! :)

Spoiler

rand() % 10000 + 1

 

Hast du deinen Code schon mal ausgeführt? Der Compiler gibt dir schon Hinweise, was mit deinem Code nicht in Ordnung ist, da dieser sich nicht kompilieren lässt. Schaue dir dazu mal die Eingangsparameter der Prozeduren an.

void init(int intArr [], int arrSize) {
    ...
}
void ausgabe(int intArr, int arrSize) {
    ...
}

Mal erwartest du ein Array und mal ein Integer aber in beiden Fällen schmeißt du ein Integer rein:

init(myarray[1000], 100);
ausgabe(myarray[1000], 100);

 

Hatte den Fehler gefunden gehabt, dass mit den Integer war nicht einmal das Problem, dass Problem war das ich mein Parameter

init(myarray[1000], 100); 

eigentlich so hätte weitergeben müssen

init(myarray, 100);

 

Am 23.4.2019 um 17:26 schrieb Xyl:

Es wäre hilfreich wenn du deine Wunschhilfe etwas eingränzt...

 

Ich meine es ist ja schließlich eine Aufgabe damit du was lernst :)

 

außerdem kleiner Tipp von meiner Seite... ich glaube das dein Array nur deklariert werden soll, nicht initialisiert, die initalisierung machst du dann in der init(...) funktion.

 

Hier nochmal ein tipp die Aufgabe besteht darin, das Array mit zahlen zw. 1 und 10000 zu füllen.

 

Versuch vorher bitte selbst auf die Lösung zu kommen bevor du den Spoiler aufklappst, danke und viel Glück!! :)

  Unsichtbaren Inhalt anzeigen

rand() % 10000 + 1

 

Den Spoiler hatte ich auch nach Erfolgreichem kompilieren nicht geöffnet, bis mir irgendwann aufgefallen ist das direkt nach der ersten Ausgabe eine leerzeile erfolgt, habe dann den Spoiler geöffnet und habs sofort gecheckt. :D

Mein C ist sehr sehr eingerostet, aber:

1. Tipp: Versuchs mal zuerst mit einem Array der Größe 10 und Initialisiere fix und gib's nur mal aus - dann kannst Du testen, ob der Rest funktioniert:

int main() {
   
    int myarray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    
    //init(myarray, 10);
    ausgabe(myarray, 10);

    return 0;
}

Ein Debugger wäre ggf. auch hilfreich..

 

2. Du wirst merken, dass Deine Ausgabe schon nicht passt - versuche mal, zwei Zahlen auszugeben und danach einen Zeilenumbruch - hint:

 if (i == (i % 10 == 0))

ist zu kompliziert gedacht und macht nicht das, was Du möchtest..

 

Auch: So gibt man nicht Elemente des Arrays aus:

   for (i = 0; i < arrSize; i++) {
	printf("%5i\t", intArr);

Du greift nämlich nicht auf den Inhalt eines Elements des Arrays zu - da fehlt was hinterm intArr.. :)

Außerdem macht "%5i\t" evtl. nicht ganz das gewünschte - aber da müsste man den Aufgabensteller fragen, was er gerne gehabt hätte, z.B. "% 5i " oder "%05i "..

3. Die Aufgabenstellung fordert, dass den Funktionen "init" und "ausgabe" eine Referenz auf das zu initialisierende Array mitgegeben wird - siehe z.B.

http://www.lerneprogrammieren.com/blog/praxis/call-value-und-call-reference-bei-der-parameteruebergabe

und https://stackoverflow.com/questions/1106957/passing-an-array-by-reference-in-c

 

Hth..

 

 

 

 

 

Am 28.4.2019 um 08:03 schrieb RipperFox:

Mein C ist sehr sehr eingerostet, aber:

1. Tipp: Versuchs mal zuerst mit einem Array der Größe 10 und Initialisiere fix und gib's nur mal aus - dann kannst Du testen, ob der Rest funktioniert:


int main() {
   
    int myarray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    
    //init(myarray, 10);
    ausgabe(myarray, 10);

    return 0;
}

Ein Debugger wäre ggf. auch hilfreich..

 

2. Du wirst merken, dass Deine Ausgabe schon nicht passt - versuche mal, zwei Zahlen auszugeben und danach einen Zeilenumbruch - hint:


 if (i == (i % 10 == 0))

ist zu kompliziert gedacht und macht nicht das, was Du möchtest..

 

Auch: So gibt man nicht Elemente des Arrays aus:


   for (i = 0; i < arrSize; i++) {
	printf("%5i\t", intArr);

Du greift nämlich nicht auf den Inhalt eines Elements des Arrays zu - da fehlt was hinterm intArr.. :)

Außerdem macht "%5i\t" evtl. nicht ganz das gewünschte - aber da müsste man den Aufgabensteller fragen, was er gerne gehabt hätte, z.B. "% 5i " oder "%05i "..

3. Die Aufgabenstellung fordert, dass den Funktionen "init" und "ausgabe" eine Referenz auf das zu initialisierende Array mitgegeben wird - siehe z.B.

http://www.lerneprogrammieren.com/blog/praxis/call-value-und-call-reference-bei-der-parameteruebergabe

und https://stackoverflow.com/questions/1106957/passing-an-array-by-reference-in-c

 

Hth..

 

hehe, bei so dingen wie array groessen etc. wuerde ich ja immer am liebsten direkt eine constexpr unsigned verwenden, aber da das hier c ist direkt ein macro.

e.G.

//C++

int main()
{
  constexpr unsigned arraySize = 10u;
  //...
  int myArray[arraySize] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; //Am liebsten mit std::array ersetzen :)
  ausgabe(myArray, arraySize);
}

//C
#define ARRAY_SIZE 10

int main()
{
  int myArray[ARRAY_SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  ausgabe(myArray, ARRAY_SIZE);
}

das schoene an dieser loesung mit makros / constexpr ist halt, dass man nur 1x die value aendern muss und man somit nicht auf unnoetig Fehler stossen kann.

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.