Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2017, 17:19   #1
Evgenyke
 
Регистрация: 08.12.2017
Сообщений: 7
По умолчанию Из Паскаля в Си

Помогите переделать данную прогу с Паскаля на СИ
Код:
    const n=10;
    var a:array[1..n]of integer;
        i,j,k,q:integer;
    begin
        for i:=1 to n do
         begin
          a[i]:=-5+random(11);
          write(a[i],' ')
         end;
         writeln;
         j:=1;i:=2;
         while i<=n do
          begin
           if (a[i]>0)
            then 
             begin
              inc(j);
              q:=a[i];
              for k:=i downto j do a[k]:=a[k-1];
              a[j-1]:=q;
             end;
            inc(i,2)
           end;
          for i:=1 to n do write(a[i],' ')
    end.
Вот мои наработки, дальше застрял
Код:
#include "stdafx.h"
#include<iostream>
#include<time.h>
#define N 20

int j = 1;
int i = 2;
int q;
int k;
int main()
{
	int mas[N];
	printf("Massiv: ");
	srand(time(NULL));
	for (int i = 0; i < n; i++) {
		mas[i] = rand() % 21 - 10;
		printf("%d ", mas[i]);
	}
		while (i <= n)
		{
			if (mas[i] > 0)
				j++;
				q = mas[i];
				for (int k = i; j--)
			{
				mas[k] = mas[k - 1];
				mas[j - 1] = q;
			}
			i += 2;
		}
		for (int i = 1; n++)
		{
			printf("%d", mas[i]);
		}
	}
    return 0;
}
Evgenyke вне форума Ответить с цитированием
Старый 08.12.2017, 17:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

формально ответ будет такой:
Код:
int main()
{
	int mas[N];
	printf("Massiv: ");
	srand(time(NULL));
	for (int i = 0; i < N; i++) {
		mas[i] = rand() % 21 - 10;
		printf("%d ", mas[i]);
	}
	printf("\n");
	int q, j = 0, ii = 1;
	while (ii < N){
		if (mas[ii] > 0){
			j++;
			q = mas[ii];
			for (int k = ii; k>=j; k--){
				mas[k] = mas[k - 1];
			}
			mas[j - 1] = q;
		}
		ii += 2;
	}
	for (int i = 0; i < N; i++) {
		printf("%d", mas[i]);
	}
    return 0;
}
только эта программа не работает корректно!
p.s. впрочем, похоже, что программа на Паскале тоже не корректно работает (или я не понял задачу, которую она решает).

Последний раз редактировалось Serge_Bliznykov; 08.12.2017 в 17:42.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.12.2017, 17:45   #3
Evgenyke
 
Регистрация: 08.12.2017
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
формально ответ будет такой:
Код:
int main()
{
	int mas[N];
	printf("Massiv: ");
	srand(time(NULL));
	for (int i = 0; i < N; i++) {
		mas[i] = rand() % 21 - 10;
		printf("%d ", mas[i]);
	}
	printf("\n");
	int q, j = 0, ii = 1;
	while (ii < N){
		if (mas[ii] > 0){
			j++;
			q = mas[ii];
			for (int k = ii; k>=j; k--){
				mas[k] = mas[k - 1];
			}
			mas[j - 1] = q;
		}
		ii += 2;
	}
	for (int i = 0; i < N; i++) {
		printf("%d", mas[i]);
	}
    return 0;
}
только эта программа не работает корректно!
p.s. впрочем, похоже, что программа на Паскале тоже не корректно работает (или я не понял задачу, которую она решает).
Собсна вот она: Все положительные элементы массива, имеющие четный порядковый номер, переписать в начало массива
Evgenyke вне форума Ответить с цитированием
Старый 08.12.2017, 18:03   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Evgenyke Посмотреть сообщение
Все положительные элементы массива, имеющие четный порядковый номер, переписать в начало массива
ну, и сразу натыкаемся на проблему индексации.
в Pascal индексация от 1 (первый элемент, второй и т.д. включая N-й)
в С индексация массивов от нуля (нулевой, первый, второй, и т.д. до N (не включая))

какие из элементов в С имеют чётный порядковый номер? по естественной нумерации (как в Паскале?)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.12.2017, 18:30   #5
Evgenyke
 
Регистрация: 08.12.2017
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, и сразу натыкаемся на проблему индексации.
в Pascal индексация от 1 (первый элемент, второй и т.д. включая N-й)
в С индексация массивов от нуля (нулевой, первый, второй, и т.д. до N (не включая))

какие из элементов в С имеют чётный порядковый номер? по естественной нумерации (как в Паскале?)
Ну видимо 2,4,6 и т.д или я не понял вопроса
Evgenyke вне форума Ответить с цитированием
Старый 08.12.2017, 20:14   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Evgenyke Посмотреть сообщение
Ну видимо 2,4,6 и т.д или я не понял вопроса
дан массив в C (например, 17 19 25 27 29 32 ...)
17 - это нулевой элемент массива
19 - это первый элемент массива
25 - это второй элемент массива
27 - это третий элемент массива.
29 - это четвёртый элемент массива.
32 - это пятый элемент массива.
и т.д.

какие из них нужно перенести в начало?!

в Паскале всё понятно, это элементы 19, 27, 32...
а в C ? Наверное, эти же элементы нужно переносить
(ведь с точки зрения пользователя неважно, что там внутри в программе,
человек считает 1, 2, 3, 4...)
т.е. в C это будет элемент с индексом 1, с индексом 3, индексом 5.
Т.е. в C нужно переносить элементы с нечётными индексами.
Так?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.12.2017, 22:02   #7
Evgenyke
 
Регистрация: 08.12.2017
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
дан массив в C (например, 17 19 25 27 29 32 ...)
17 - это нулевой элемент массива
19 - это первый элемент массива
25 - это второй элемент массива
27 - это третий элемент массива.
29 - это четвёртый элемент массива.
32 - это пятый элемент массива.
и т.д.

какие из них нужно перенести в начало?!

в Паскале всё понятно, это элементы 19, 27, 32...
а в C ? Наверное, эти же элементы нужно переносить
(ведь с точки зрения пользователя неважно, что там внутри в программе,
человек считает 1, 2, 3, 4...)
т.е. в C это будет элемент с индексом 1, с индексом 3, индексом 5.
Т.е. в C нужно переносить элементы с нечётными индексами.
Так?
С индексами 2,4,6, т.е. чётными
Evgenyke вне форума Ответить с цитированием
Старый 08.12.2017, 22:37   #8
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Evgenyke, вы не индексы пишите а числа из примера Serge
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 09.12.2017, 02:55   #9
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov12643
в Pascal индексация от 1 (первый элемент, второй и т.д. включая N-й)
Чтобы совсем корректно было, то в данном примере на Pascal
А то ведь можно и array[3..17] of ....
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С паскаля на с++ DeniCoder Помощь студентам 1 21.11.2017 21:34
из Паскаля в С++ fkty Общие вопросы C/C++ 3 06.06.2013 09:34
из паскаля в си zxzxz Помощь студентам 17 26.03.2013 23:16
Из паскаля в С++ Slake Visual C++ 0 25.12.2011 14:35
от паскаля к с++ WOLFak Обсуждение статей 11 27.01.2010 00:18