Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: нужна помощь по СИ  (Прочитано 1251 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн QWE12345

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
нужна помощь по СИ
« : 26 Ноября 2010, 11:54:40 »
день добрый,
есть ли умельцы СИ с кучей свободного времени готовые написать 5 лайтовых программ (по началному курсу института) за вознаграждение? =)

пример программы:  дан массив натуральных чисел (юзер сам вводит кол-во элементов массива и сами элементы массива). из этого массива вытащить все нечётные числа и сделать из них второй массив, отсортированный по возрастанию. сделать вывод на экран первого массива, массива нечётных чисел и отсортированного массива нечётных чисел.


Оффлайн Timurib

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: нужна помощь по СИ
« Ответ #1 : 26 Ноября 2010, 17:30:51 »
наслаждайся

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

int read_int() {
int num;
while (scanf("%d", &num) != 1) {
while(getchar() != '\n') continue;
printf("Ошибка. Введите целое число: ");
}
return num;
}

void print_array(int* array, int length) {
int i;
for (i = 0; i < length; ++i) {
printf(" [%d] = %d\n", i, array[i]);
}
}

int compare(const void* a, const void* b) {
return *(int*)a - *(int*)b;
}

int main() {
printf("Введите размер массива: ");
int length = read_int();

int* source_array = (int*) malloc(length * sizeof(int));
int i;
int odd_counter = 0;
for (i = 0; i < length; ++i) {
printf("Элемент[%d]: ", i);
source_array[i] = read_int();
if (source_array[i] & 1 == 1) {
++odd_counter;
}
}

printf("Исходный массив:\n");
print_array(source_array, length);

int* odd_array = (int*) malloc(odd_counter * sizeof(int));
int j = 0;
for (i = 0; i < length; ++i) {
if (source_array[i] & 1 == 1) {
odd_array[j++] = source_array[i];
}
}

printf("Массив из нечетных элементов:\n");
print_array(odd_array, odd_counter);

qsort(odd_array, odd_counter, sizeof(int), compare);

printf("Массив из нечетных элементов упорядоченных по возрастанию:\n");
print_array(odd_array, odd_counter);

free(source_array);
free(odd_array);
source_array = NULL;
odd_array = NULL;

return 0;
}

вознаграждения не надо

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: нужна помощь по СИ
« Ответ #2 : 27 Ноября 2010, 07:45:04 »
Завалят. На первом же вопросе переделать сортировку на пузырьковыю-самописную.

Оффлайн Timurib

  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: нужна помощь по СИ
« Ответ #3 : 27 Ноября 2010, 11:57:48 »
ну в постановке задачи не сказано о том, что нельзя пользоваться стандартными средствами )

Оффлайн QWE12345

  • Автор темы
  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: нужна помощь по СИ
« Ответ #4 : 29 Ноября 2010, 10:02:51 »
поглумился ) :-[
но всё равно спасибо)

Пользователь решил продолжить мысль 29 Ноября 2010, 10:41:26:
пардон, а где здесь сортировка - несамописная? просто я кое как сам склепал эту чёртову прогу :D , но моя - самописная сотрировка не выполняет свою задачу как надо.
« Последнее редактирование: 29 Ноября 2010, 10:41:26 от QWE12345 »

Оффлайн Упс

  • Старожил
  • *
  • Сообщений: 3231
    • Просмотр профиля
Re: нужна помощь по СИ
« Ответ #5 : 29 Ноября 2010, 11:18:52 »
Цитировать
а где здесь сортировка - несамописная?
qsort
xUbuntu 12.04

Оффлайн YaDeluxe

  • Новичок
  • *
  • Сообщений: 31
    • Просмотр профиля
Re: нужна помощь по СИ
« Ответ #6 : 29 Ноября 2010, 15:17:43 »
Ребят может и мне помножите...
 есть  2 программки ( теория графов )
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
FILE* fi = fopen("m_graph.txt","r");
FILE* fo = fopen("m_par.txt","w");
struct edge{ // ребро графа
int b,e;
};
int n; //количество ребер
edge *graph; // массив ребер
edge *matching; // паросочетание
int num_mat; //количество паросочетаний
bool smezh(edge q1,edge q2){ // 1 - если q1 и q2 смежны, иначе -0
return q1.b==q2.b||q1.b==q2.e||q1.e==q2.b||q1.e==q2.e;
}
void out(edge *m,int num){  
fprintf(fo,"%d\n",num); // количество ребер
for(int i=0;i<num;i++)  
fprintf(fo,"%d\ %d\n",m[i].b,m[i].e);
}
bool bad(){//возвращает 1, если в паросочетании есть смежное ребро
for(int i=0;i<num_mat-1;i++)  
if(smezh(matching[i],matching[num_mat-1]))return 1;  
return 0;
}
void solve(){ //находит максимальное паросочетание  
num_mat = 0;  
for(int i=0;i<n;i++){  
matching[num_mat]=graph[i];num_mat++; // добавляем ребро  
if(bad())num_mat--; // если уже есть смежные - удаляем  
}
}
int main(){  
fscanf(fi,"%d",&n);  
graph = new edge[n];  
matching = new edge[n];  
for(int i=0;i<n;i++)  
fscanf(fi,"%d%d",&graph[i].b,&graph[i].e);  
solve();  
out(matching,num_mat);  
fcloseall();
return 0;
}

и 2

#include<iostream.h>
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define word unsigned int

int i, j, n, p, xn, xk;
int flag[11];
word c[11][11], l[11];
char s[80], path[80][11];

int min(int n)
{
int i, result;
for(i=0;i<n;i++)
if(!(flag[i])) result=i;
for(i=0;i<n;i++)
if((l[result]>l[i])&&(!flag[i])) result=i;
return result;
}

word minim(word x, word y)
{
if(x<y) return x;
return y;
}

void main()
{
cout<<"Vvedite kolichestvo tochek: ";
cin>>n;
for(i=0;i<n;i++)
for(j=0;j<n;j++) c[i][j]=0;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
   cout<<"Vvedite rasstoyanie ot  x"<<i+1<<" do x"<<j+1<<": ";
   cin>>c[i][j];
}
cout<<"   ";
for(i=0;i<n;i++) cout<<"    X"<<i+1;
cout<<endl<<endl;
for(i=0;i<n;i++)
{
printf("X%d",i+1);
for(j=0;j<n;j++)
{
printf("%6d",c[i][j]);
c[j][i]=c[i][j];
}
printf("\n\n");
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(c[i][j]==0) c[i][j]=65535; //бесконечность
cout<<"Vvedite nachalnuy tochku: ";
cin>>xn;
cout<<"Vvedite konechnuy tochku: ";
cin>>xk;
xk--;
xn--;
if(xn==xk)
{
cout<<"Nachalnaya I konechnaya tochki sovpadayt."<<endl;
getch();
return;
}

for(i=0;i<n;i++)
{
flag[i]=0;
l[i]=65535;
}
l[xn]=0;
flag[xn]=1;
p=xn;
itoa(xn+1,s,10);
for(i=1;i<=n;i++)
{
strcpy(path[i],"X");
strcat(path[i],s);
}
do
{
for(i=0;i<n;i++)
if((c[p][i]!=65535)&&(!flag[i])&&(i!=p))
{
if(l[i]>l[p]+c[p][i])
{
itoa(i+1,s,10);
strcpy(path[i+1],path[p+1]);
strcat(path[i+1],"-X");
strcat(path[i+1],s);
}
l[i]=minim(l[i],l[p]+c[p][i]);
}
p=min(n);
flag[p]=1;
}
while(p!=xk);
if(l[p]!=65535)
{
cout<<"Put: "<<path[p+1]<<endl;
cout<<"Dlina puti: "<<l[p]<<endl;
}
else
cout<<"takogo puti ne syshestvuet!"<<endl;
getch();
}

Нужно чтоб у гейца в консоли запускалось (тобиш)
курсачь заказывал сам не понимаю как компилировать ))



--
Тема закрыта. С конкретными вопросами - милости просим в поиск, помтом спрашивать, если ничего не нашли.
-- kwah
« Последнее редактирование: 29 Ноября 2010, 15:30:59 от Kwah »
Новичек,  но мне нравиться...  неизвестное затягивает!

 

Страница сгенерирована за 0.018 секунд. Запросов: 21.