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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2009, 19:56   #1
xcyber
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 11
По умолчанию Массивы, язык - C.

Задание: Добавить в конец массива все элементы в том порядке, в котором они располагались в исходном массиве, исключая отрицательные элементы.

Я понял так:
Имеется массив (я взял массив, который создается случайным образом), теперь мне нужно к этому массиву в конец добавить все положительные элементы этого же массива, в том же порядке.


Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define n 10
void main()
{
	int a[n],i;
	clrscr();
	//создание случайным образом
	randomize();
		for (i=0;i<n;i++)
		{
		a[i]=random(12);
		printf ("\n %d", a[i]);
		printf ("");
		}
getch();
}

Дальше не знаю что делать. Как сделать чтобы отрицательные числа создавались? И как добавить в конец массива?
xcyber вне форума Ответить с цитированием
Старый 19.10.2009, 20:07   #2
MAKEDON
The First Person!
Форумчанин
 
Аватар для MAKEDON
 
Регистрация: 07.08.2007
Сообщений: 228
По умолчанию

Вот решение, а у тебя получился какой то коктейль. Ты использовал в си элементы языка Паскаль.
Помимо этого укажу на некоторые логические ошибки. Ты создал массив размером n, а куда будешь добавлять?

Потом я не понял смысл этой запииси.
Код:
printf ("");
Что она вобще по задумке делает? Ну и
Код:
randomize(); 
random(12);
clrscr();
в СИ не используются.


Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define n 10


int main(){
	int a[2*n],i,j=n;
	srand(time(0));
	for (i=0;i<n;i++){
		    a[i]=-10+rand()%100;
		    printf ("%d ", a[i]);
	}
	printf("\n");
	for(i=0;i<n;i++){
                   if(a[i]>0){a[j]=a[i];printf ("%d ", a[j]);j++;}
                   }
                   
  getchar();
}
Программа обычно делает то что вы ей сказали сделать, а не то что бы вы хотели, чтобы она сделала.

Последний раз редактировалось MAKEDON; 19.10.2009 в 20:11.
MAKEDON вне форума Ответить с цитированием
Старый 19.10.2009, 20:14   #3
xcyber
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 11
По умолчанию

MAKEDON, спасибо за разъяснение ошибок, просто я только-только начал учить СИ.
xcyber вне форума Ответить с цитированием
Старый 19.10.2009, 20:40   #4
xcyber
Пользователь
 
Регистрация: 17.12.2008
Сообщений: 11
По умолчанию

Возникло еще пару вопросов.
Имеется задача, находит в текстовом файле слова-палиндромы.

Код:
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define stroka  1000
#define slovo  100    

main()
{
    FILE *ifp, *ofp;
    char *reverse(char []);
    char line[stroka], word[slovo], tmp[slovo], *p;
    int nc;
    const char *ifname = "file.txt",
               *ofname = "result.txt";
    
    if ((ifp = fopen(ifname, "r")) == NULL
     || (ofp = fopen(ofname, "w")) == NULL)
        return 1;
    
    while ((p = fgets(line, stroka, ifp)) != NULL) {
        if (p[0] == '\n' || (p[0] == '\r' && p[1] == '\n'))
            break;
        while (sscanf(p, "%s%n", word, &nc) == 1) {
            p += nc;
            strcpy(tmp, word);
            if (strcmp(word, reverse(tmp)) == 0 && strlen(word) > 1)
                fprintf(ofp, "%s\n", word);
        }
    }
    fclose(ifp);
    fclose(ofp);        
    return 0;
}

/* обращает строку s */
char *reverse(char s[])
{
    char *p, *q;
    int c;
    
    p = q = s;
    while (*q)
        q++;
    for (q-- ; p < q; p++, q--)
        c = *p, *p = *q, *q = c;
    return s;
}
Правильно ли я составил алгоритм? Изображение алгоритма.
И нужно написать программу по примеру напечатанной выше, следующего типа:
1. Имеется внешний текстовый файл. Напечатать в отдельный файл строки, которые короче первой строки. Сод-ое файла вывести на экран.
Что нужно поменять в первой задаче, чтобы решить вторую.
xcyber вне форума Ответить с цитированием
Старый 19.10.2009, 21:10   #5
trandafyr
Заблокирован
 
Регистрация: 19.10.2009
Сообщений: 5
По умолчанию

Здравствуйте.Я извиняюсь но сегодня хватнул какую-то дурацкую рекламу футболок - все время выскакивает ничего не могу с ней сделать.ПОМОГИТЕ!!!!! Пишет "Осталось еще 983 показа". HELP!!!!
trandafyr вне форума Ответить с цитированием
Старый 19.10.2009, 21:13   #6
NSvirus
пропагандирую жизЪ
Форумчанин
 
Аватар для NSvirus
 
Регистрация: 19.03.2007
Сообщений: 950
По умолчанию

ну ты потерпи уж, раз не хватает сообразительности прочитать правила форума..
Посторонним В.
NSvirus вне форума Ответить с цитированием
Старый 19.10.2009, 21:14   #7
trandafyr
Заблокирован
 
Регистрация: 19.10.2009
Сообщений: 5
По умолчанию

так тяжело сказать?
trandafyr вне форума Ответить с цитированием
Старый 19.10.2009, 21:15   #8
trandafyr
Заблокирован
 
Регистрация: 19.10.2009
Сообщений: 5
По умолчанию

тут не до правил-когда она висит перед глазами
trandafyr вне форума Ответить с цитированием
Старый 19.10.2009, 21:27   #9
NSvirus
пропагандирую жизЪ
Форумчанин
 
Аватар для NSvirus
 
Регистрация: 19.03.2007
Сообщений: 950
По умолчанию

юзай Оперу
Посторонним В.
NSvirus вне форума Ответить с цитированием
Старый 19.10.2009, 21:38   #10
amerhant
Пользователь
 
Регистрация: 19.10.2009
Сообщений: 24
По умолчанию

Помогите плиз как это ришить:
Переставить элементы целочисленного массива X=(x1,x2, ...,xn) таким образом, чтобы находящиеся в нем четные (ч) и нечетные (нч) элементы были рассположины попарно: ч нч ч нч ч нч ... В конце массива рассположить избыточные четные или не четные элементы.
amerhant вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Массивы (язык С++) Ноберт Помощь студентам 3 24.08.2009 23:10
Пример из книги Керниган, Ричи. Язык C. Массивы hukola Общие вопросы C/C++ 16 26.05.2009 18:04
массивы(язык Си) bars1984 Помощь студентам 14 11.05.2009 21:15