• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prawie działający program

0 głosów
350 wizyt
pytanie zadane 20 stycznia 2020 w C i C++ przez xZenit Użytkownik (760 p.)
otwarte ponownie 20 stycznia 2020 przez xZenit

Witam, napisałem taki kod:

#include <iostream>
using namespace std;

int main()
{
	int ile, a, n, p, k, g, z=0, t;
	int *tab;

	cin>>ile;
	int prz[ile];
	for (a=0; a<ile; a)
	{
		cin>>k;
        prz[a]=k;
		int *tab = new int[(k*2)];
		for (n=0; n<k; n++)
		{
			cin>>tab[n*(a+1)];
		}

    a++;
	}
	for (g=0; g<ile; g)
	{
        p=0;
        while (p<=1)
        {
            for (t=p; t<prz[g]; t+=2)
            {
                cout<<tab[t]<<" ";
            }
        p++;
    cout<<endl;}
    g++;
	}
}

do poniższego zadania:

Na przemian

Limit pamięci: 64 MB

Antek z Zuzią często bawią się w pisanie liczb. Na kartce zapisują na przemian liczby całkowite - raz Zuzia, raz Antek. W wyniku zabawy powstaje zazwyczaj wiele zapisanych liczbami kartek.

Zadanie

Napisz program, który:

  • wczyta ze standardowego wejścia:
    • liczbę kartek zapisanych przez dzieci,
    • liczbę elementów ciągu,
    • ciąg liczb całkowitych,
  • dla każdego zestawu danych wypisze na standardowe wyjście wczytane liczby w taki sposób, aby najpierw pojawiły się liczby zapisane przez Antka, a następnie te, które zapisała Zuzia (według kolejności występowania na wejściu).

Wejście

Pierwszy wiersz zawiera jedną liczbę całkowitą image (image), będącą liczbą zestawów danych. W kolejnych image wierszach znajdują się opisy poszczególnych zestawów danych. Każdy zestaw składa się z liczby image (image) oraz następujących po niej liczb image (imageimage), pooddzielanych pojedynczymi odstępami.

Wyjście

Program powinien wypisać image wierszy. W image-tym z nich powinien się znajdować ciąg odpowiadający image-temu zestawowi danych. Są to wczytane liczby w zmienionej kolejności - najpierw liczby, które były na wejściu na pozycjach parzystych, następnie liczby z pozycji nieparzystych.

Przykład

Dla danych wejściowych:

2 
3 5 7 2
4 2 1 4 3

poprawną odpowiedzią jest:

7 5 2
1 3 2 4

Mój kod jednak nie działa poprawnie (problem tkwi w części programu odpowiedzialnej za wypisywanie na ekran wyników). Prosiłbym o jakąś sugestię co do naprawy owego błędu.

komentarz 20 stycznia 2020 przez xZenit Użytkownik (760 p.)
Ok, dzięki za odpowiedź, za chwilę przeanalizuję.
komentarz 20 stycznia 2020 przez xZenit Użytkownik (760 p.)

@NewEraOfPeace,

Coś znalazłem, zamieniłem:

 for (t=0; t<prz[g]; t+=2)

na:

 for (t=p; t<prz[g]; t+=2)

Sprawdzam czy to wystarczy, dzięki za pomoc.

komentarz 20 stycznia 2020 przez xZenit Użytkownik (760 p.)
Niestety program nadal wywala błąd. Masz może jeszcze jakiś pomysł?

2 odpowiedzi

0 głosów
odpowiedź 21 stycznia 2020 przez kukulim Mądrala (6,440 p.)

Trudno czyta się taki kod jak zmienne to same nic nie znaczące literki :)

Trenuje teraz C# wiec dam ci odpowiedz t tym języku: :)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace csfirstrun
{
    class Program
    {       
        static void Main(string[] args)
        {
            int ileKartekZapisano = 0;
            ileKartekZapisano = int.Parse(Console.ReadLine());
            while (ileKartekZapisano != 0)
            {
                string liczbyPodanePrzezDzieci = Console.ReadLine();
                string[] tablicaLiczbPodanychPrzezDzieci = liczbyPodanePrzezDzieci.Split(' ');

                for (int i = 2; i < tablicaLiczbPodanychPrzezDzieci.Length; i += 2)
                {
                    Console.Write(tablicaLiczbPodanychPrzezDzieci[i]+" ");
                }
                for (int i = 1; i < tablicaLiczbPodanychPrzezDzieci.Length; i += 2)
                {
                    Console.Write(tablicaLiczbPodanychPrzezDzieci[i]+" ");
                }
                Console.WriteLine();
                ileKartekZapisano--;
            }
            Console.Read();
        }       
    }
}

Generalnie wczytujesz wszystkie cyferki do jednej tablicy a później po koleji wypisujesz co drugą raz zaczynając od 1, a druga pętle zaczynając od 0 (ja w C# musiałem pominąć pierwszy znak wiec  zacząłem 2 i od 1);

0 głosów
odpowiedź 21 stycznia 2020 przez j23 Mędrzec (195,220 p.)

Uprościłem nieco ten kod:

    int d, n;
    short a[1000];

    std::cin >> d;
    
    while (d-- > 0 && std::cin >> n) {
        for (int i = 0; i < n; ++i) 
            std::cin >> a[i];
        for (int i = 1; i < n; i += 2) 
            std::cout << a[i] << ' ';
        for (int i = 0; i < n; i += 2) 
            std::cout << a[i] << ' ';
        std::cout << '\n';    
    }

 

Podobne pytania

+1 głos
3 odpowiedzi 907 wizyt
pytanie zadane 11 grudnia 2015 w C i C++ przez sharkus101 Początkujący (330 p.)
0 głosów
4 odpowiedzi 501 wizyt
pytanie zadane 10 października 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)
0 głosów
1 odpowiedź 796 wizyt

93,740 zapytań

142,675 odpowiedzi

323,294 komentarzy

63,319 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...