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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2011, 23:41   #1
datgen
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 36
По умолчанию как написать вывод

в общем нужна программа упорядочивающая массив строк в порядке возрастания их длины методом сортировки простым выбором.
я ее написал она сортирует длины строк по возрастанию,но как сделать так чтобы она выводила мне мой массив самих строк в том порядке в каком были отсортированы их длины.Если запустите то поймете меня.
#include "stdafx.h"
#include "iostream"


int _tmain(int argc, _TCHAR* argv[])
{

int n, i,k,x,j;
char strmass[999][999];
printf ("input kol-vo strok\n");
scanf ("%i", &n);
printf ("input stroki\n");
for (i=0; i<n; i++)
{scanf ("%s", &strmass[i]);}
int *kol= new int [n];/////////////////////////создаем динамический массив и в него все кидаем
for (i=0; i<n; i++)
{
kol[i]=strlen(strmass[i]);
}
for (i=0; i<n; i++)
{printf("\n%i\n",kol[i]);}
////////////////////сортировка выбором//////////////////////////
for( i=0; i<n; i++)
{k=i; x=kol[i];
for( j=i+1; j <n; j++)
if ( kol[j] < x )
{
k=j; x=kol[j];
}
kol[k] = kol[i];
kol[i] = x;
}
///////////////////////конец сортировки///////////////
for (i=0; i<n; i++)
{printf("\n\nrezultat%i\n",kol[i]);}
//////////////////////проверка сортировки прошла замечательно...............


//////////как написать вывод........
for (i=0; i<n; i++)
{


}
//////////как написать вывод........
system("pause");

return 0;

}
datgen вне форума Ответить с цитированием
Старый 27.12.2011, 04:22   #2
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

что-то ты тут перемудрил, сначала создал динамический целочисленный массив, записал в него длины строк, потом отсортировал массив ДЛИН, а не строк. Тут всё проще, нужна всего одна переменная int в которую надо записать длину наименьшей строки и поочерёдно сравнивать её с длинами остальных строк, если находишь меньшую строку - меняешь местами. Вывод:
Код:
for (i=0; i<n; i++) std::cout << strmass[i];
Mahin вне форума Ответить с цитированием
Старый 27.12.2011, 04:22   #3
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Основная идея такая: упорядочивать массив строк также как и массив длин одновременно. Для этого я использовал функцию копирования строки strcpy. Можно еще, наверное, как-нибудь через указатели это сделать, но я что не хочу придумывать - работает же.
Код:
#include "iostream"
using namespace std;

int main()
{

	int n, i,k,x,j;
	char TempStr[999];
	char strmass[999][999];
	printf ("input kol-vo strok\n");
	scanf ("%i", &n);
	printf ("input stroki\n");
	for (i=0; i<n; i++){
		scanf ("%s", &strmass[i]);
	};
	int *kol= new int [n];/////////////////////////создаем динамический массив и в него все кидаем
	for (i=0; i<n; i++){
		kol[i] = strlen(strmass[i]);
	};
	for (i=0; i<n; i++){
		printf("\n%i\n",kol[i]);
	};
////////////////////сортировка выбором//////////////////////////
	for( i=0; i<n; i++){
		k=i; x=kol[i];
		for( j=i+1; j <n; j++)
			if ( kol[j] < x ){
				k=j; x=kol[j];
			}
		kol[k] = kol[i];
		kol[i] = x;

		strcpy(TempStr, strmass[k]);
		strcpy(strmass[k],strmass[i]);
		strcpy(strmass[i],TempStr);
	}
///////////////////////конец сортировки///////////////
	for (i=0; i<n; i++){
		printf("\n\nrezultat %i\n",kol[i]);
	};
//////////////////////проверка сортировки прошла замечательно...............


//////////как написать вывод........
	printf("\n");
	for (i=0; i<n; i++){
		printf("\n%s\n", &strmass[i]);
	};
//////////как написать вывод........
	system("pause");
	
	return 0;
}
JuniorProger вне форума Ответить с цитированием
Старый 27.12.2011, 07:02   #4
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

Исходя из задания, как мне кажется, лучше такой вариант:
Код:
#include <iostream>
#include <conio.h>
#include <string>
#include <clocale>

using namespace std;

void main(){
	setlocale(LC_ALL, "Russian");
	int n, min_len;
	string x;
	cout << "Введите количество строк: "; cin >> n;
	string *arr = new string[n];
	for(int i=0; i<n; i++){
		cout << "Ввести " << i+1 << " строку: "; 
		cin >> arr[i];
	}
	int k;
	for(int i=0; i<n-1; i++){
		min_len = arr[i].length(); k=i;
		for(int j=i+1; j<n; j++)
			if(arr[j].length()<min_len) {min_len=arr[j].length(); k=j;}
		x=arr[i]; arr[i]=arr[k]; arr[k]=x;
	}
	for(int i=0; i<n; i++) cout << arr[i] << endl;
	_getch();
}
прошу прощения что не в тему, но не подскажете где взять заголовок "stdafx.h", или как он называется в MS Visual Studio 2010

Последний раз редактировалось Mahin; 27.12.2011 в 07:32.
Mahin вне форума Ответить с цитированием
Старый 27.12.2011, 12:37   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Mahin Посмотреть сообщение
прошу прощения что не в тему, но не подскажете где взять заголовок "stdafx.h", или как он называется в MS Visual Studio 2010
Попросить студию создать проект вместе с ним.

http://ru.wikipedia.org/wiki/%D0%9F%...B2%D0%BA%D0%B8
_Bers вне форума Ответить с цитированием
Старый 27.12.2011, 19:57   #6
JuniorProger
Форумчанин
 
Регистрация: 16.09.2011
Сообщений: 114
По умолчанию

Цитата:
Сообщение от Mahin Посмотреть сообщение
Исходя из задания, как мне кажется, лучше такой вариант
Я бы согласился - этот вариант выглядит лучше. Только подойдет ли он автору? Может у него задание сделать "именно так". Но если подойдет, то лучше использовать вариант со string.
JuniorProger вне форума Ответить с цитированием
Старый 27.12.2011, 22:16   #7
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

про использование\не использование string нет ни слова, но даже без оного нет смысла в создании нового массива (сиречь, загрузки памяти) kol, если нужно просто отсортировать массив по длине
P.S. если так уж надо связать строку с длиной, легче будет создать структуру, включающую строку и длину этой строки, вычисляемую на этапе ввода.а из этой структуры строить массив, который можно сортировать по длине
Mahin вне форума Ответить с цитированием
Старый 27.12.2011, 23:56   #8
datgen
Пользователь
 
Регистрация: 30.03.2011
Сообщений: 36
По умолчанию

Огромное всем спасибо, все заработало.
datgen вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
посоветуйте как лучше написать написать бд diakon2 Помощь студентам 7 10.11.2010 14:17
вывод как в с# MeTeOpA Общие вопросы Delphi 2 25.05.2010 11:38
Как организовать вывод из бд в таблицу 5*7 ? xxxsas PHP 7 17.05.2010 22:45
как написать код на вывод оценки в тестирующей проге Флеонова KaufMaNN Помощь студентам 0 31.05.2008 07:39
как вы думаете можно с помощью delphi написать online игру ну к примеру как muonline 0pex Свободное общение 9 28.06.2007 14:20