Visualizzazione dei risultati da 1 a 5 su 5

Discussione: C++ array problema

  1. #1

    C++ array problema

    Ciao a tutti,
    ho bisogno del vostro prezioso aiuto!

    devo scrivere un programma in c++ che dati due Array , cui sono salvati dei numeri, ne crea un terzo array che é formato dal primo membro del primo array , il secondo membro é quello del secondo, il terzo membro é il terzo del primo array ecc.

    esempio array { 1, 2, 3} array2 {4,5,6} arrayfiinale { 1, 4,2,5,3,6 }

    nel mio programma listone e listtwo sono i primi due array , lista é l´array da creare.
    codice:
    void interLeaveListOfIntegers(int*lista, int*listone, int*listtwo)
    {
    int j=1;
    int k=0;
    int i=0;
    while ((listone[i] != -1) ||(listtwo[i] != -1))
      {
       lista[k] = listone[i];
        k=k+2;
       lista[j] = listtwo[i];
       j=j+2;
        i++;
      }
    }
    Questa é la funzione che dovrebbe creare l´array, ma in qualche modo non mi da l´ordine giusto dei numeri..

    i primi due array sono composti da caratteri, ma poi sono stati trasformati in numeri.

    questa é la funzione che stampa l´array( i primi due presi singolarmenti ,ovvero introddi nella funzione me li stampa giusti)
    codice:
    void printListOfIntegers(const char* prefix, int* list)
    {
     printf("%s", prefix);
      int i = 0;
      while (list[i] != -1)
      {
       if (i > 0) printf(",");
       if (list[i] == 0)  i++;
        printf("%d", list[i]);
        i++;
      }
      printf("\n");
    }
    Questa é la funzione che dati i due array char, ne estrae i diversi numeri inseriti.
    codice:
    void parseListOfIntegers(const char* listAsString, int* list)
    {
      int i = 0;
      int listSize = 0;
      int startOfLastNumber = 0;
      while (listAsString[i] != 0)
      {
    if (listAsString[i] != ',' && listAsString[i] != 0  && listAsString[i] != '1' && listAsString[i] != '2' && listAsString[i] != '3' && listAsString[i] !='4'   && listAsString[i] !='5' && listAsString[i] !='6' && listAsString[i] !='7' && listAsString[i] !='8' && listAsString[i] != '9'&& listAsString[i] != '0' )
                {
         printf("The geven charachter is not allowed\n");
         printf("Input list 1 :\n");
         printf("Input list 2 :\n");
         exit(1);
        }
        if (listAsString[i] == ',' && listAsString[i+1] == ',')
        {
        printf("two and many ,one and after another decimal point are not allowed\n") ;
        exit(1);
        }
        if (listAsString[i] == ',' || listAsString[i+1] == 0)
        {
          list[listSize] =  atoi(listAsString + startOfLastNumber);
          startOfLastNumber = i + 1;
          listSize++;
        }
        i++;
      }
       list[listSize] = -1;
    }
    con questa funzione ho il seguente problema che se il valore di listsize supera quello di
    MAX_LIST_SIZE allora il compilatore mi da errore.
    Non riesco a capire dove devo correggere.

    MAX_LIST_SIZE é uguale a 1000

    infine qui ho la funzione main dove praticamente chiamo tutte le funzioni insieme e viene eseguito il programma

    codice:
    #include <stdlib.h>
    #include <stdio.h>
    #include "./ListProcessing.h"
    
    // Process the given input lists. Lists are given in the form 45,23,4,129.
    int main(int argc, char** argv)
    {
     // Process the command line arguments.
      if (argc != 3)
      {
        printf("Usage: ./ListProcessingMain <list1> <list2>\n"
               "Each list is given as a comma-separated list of integers.\n");
        exit(1);
      }
      char* list1AsString = argv[1];
      char* list2AsString = argv[2];
    
      // Parse the lists and print them.
      int list1[MAX_LIST_SIZE + 1];
      int list2[MAX_LIST_SIZE + 1];
      int lista[MAX_LIST_SIZE + 1];
    
      parseListOfIntegers(list1AsString, list1);
      parseListOfIntegers(list2AsString, list2);
      printListOfIntegers("Input list 1 : ", list1);
      printListOfIntegers("Input list 2 : ", list2);
      interLeaveListOfIntegers(lista, list1,list2);
      printListOfIntegers("Input list 3 : ", lista);
    }
    so di essere piü o meno sulla strada giusta ma c´ho provato tutto il giorno ma niente da fare!
    per programmare uso l editor di testo vim e linux consol!


    grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Scusa, ma data la riga

    while ((listone[i] != -1) ||(listtwo[i] != -1))

    devo presumere che usi un -1 come valore finale negli array. Quindi nell'esempio dovrebbero essere

    { 1, 2, 3, -1}

    { 4, 5, 6, -1}

    Giusto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    si hai ragione- -1 é il valore finale

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    E quindi ? Cosa non va? Con quali valori hai veramente provato?

    Con due semplici liste terminate da -1, mi sembra che la interLeaveListOfIntegers abbia funzionato ... magari dacci maggiori informazioni per arrivare prima alla soluzione, invece di dover controllare tutto il codice ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Oregon quello che penso sia sbagliato é la funzione iniziale che ho postato . dove dalle due liste viene fatta quella nuova.("mischiata")

    qua ho un esempio di codice se provo a fare partire la mainfunction
    Quello che penso sia sbagliato é la condizione del while nella funzione dove fatta la nuova lista, e penso che ho sbagliato a non mettere la fine il -1 al terzo array. il problema é che non so dove corregere questi errori. o meglio dire come...

    dario@ubuntu:~/Desktop/dm51/uebungsblatt-4$ ./ListProcessingMain 22 ,1,1
    Input list 1 : 22
    Input list 2 : 1,1
    Input list 3 :

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.